Pengamanan Situs dengan menggunakan headers pada server Nginx

Secure Nginx from Clickjacking with X-FRAME-OPTIONS

Clickjacking

https://owasp.org/www-community/attacks/Clickjacking

X-Frame Options

Header add_header X-Frame-Options “SAMEORIGIN”;

Reference: here

Header X-XSS-Protection

When this header is being sent along with a response and the website contains an XSS attack, the browser will see this XSS attack and stop it from loading. This protection knows 3 levels:

  • X-XSS-Protection: 0; Disables the filter entirely.
  • X-XSS-Protection: 1; Enables the filter but only sanitizes the malicious script
  • X-XSS-Protection: 1; mode=block Enables the filter and completely blocks the page

Example:

add_header X-XSS-Protection "1; mode=block";
atau
add_header X-XSS-Protection "1;";

Reference

https://youtu.be/pV_uX0jDAh4?si=W6gbBjvpvniVDSDB

X-XSS-Protection headers. Protection or vulnerability?

https://webdock.io/en/docs/how-guides/security-guides/how-to-configure-security-headers-in-nginx-and-apache

Nginx config tips

Membuat semua file txt, git dan md tidak dapat di akses user

Letakkan script ini dalam file config di bagian atas

location ~.(git|txt|md)$ {
deny all;
return 404;
}

Menyembunyikan versi nginx

Pada /etc/nginx/nginx.conf, tambahkan berikut ini:

server_tokens off;

Tambahan konfigurasi yang tidak standard di Nginx

apt-get install nginx-extras

Setelah itu kita bisa menambahkan kode berikut ini di nginx.conf

server_tokens off;
more_set_headers "Server: Molly Percocet";

Blok semua tipye file tapi tidak untuk file tertentu (misalnya dengan file yang di awali dengan  .well-known )

## Disable .htaccess and other hidden files
location ~ /\.(?!well-known).* {
    deny all;
    access_log off;
    log_not_found off;
}

Memperbesar ukuran upload file Apache2

File konfigurasi yang perlu di edit adalah php.ini yang letaknya bisa berbeda tergantung modul php yang digunakan, antara lain:

  • /etc/php/7.4/apache/php.ini
  • /etc/php/7.4/fpm/php.ini

Versi php dapat disesuaikan

Parameter yang perlu diatur adalah :

post_max_size = 100M
upload_max_filesize = 100M

Besar ukuran dapat diubah sesuai kebutuhan

Jangan lupa setelah itu, web server Apache perlu di restart

$ sudo service apache2 restart

Mod rewrite (part.1)

Mod Rewrite part.1

Mod_Rewrite memungkinkan Anda membuat URL khusus dan sederhana sesuai kebutuhan.

Tulisan ini akan membahas tentang bagaimana mengaktifkan Mod_Rewrite, Membuat dan Menggunakan halaman .htaccess yang diperlukan, dan menyiapkan penulisan ulang URL.

Before we begin generating the actual URL rewrites, we need to activate the apache mod_rewrite module that controls them.

sudo a2enmod rewrite

Perintah mengaktifkan modul atau—jika sudah diaktifkan, menampilkan kata-kata, “Module rewrite sudah diaktifkan”

Setelah modul diaktifkan, Anda dapat mengatur penulisan ulang URL dengan membuat file .htaccess di direktori situs web Anda.

File .htaccess adalah cara untuk mengonfigurasi detail situs web Anda tanpa perlu mengubah file konfigurasi server. Tanda titik yang meng’awali’ nama file akan membuat file ini tidak tampak secara default di dalam folder.

Selain itu, peletakan file .htaccess juga penting. Konfigurasi dalam file itu akan memengaruhi semua yang ada di direktori dan direktori di bawahnya.

Cara mengizinkan perubahan dalam file .htaccess

Untuk mengizinkan file .htaccess menimpa konfigurasi situs web standar, kita awali dengan dengan membuka file konfigurasi. Catatan: Anda memerlukan hak sudo untuk langkah ini.

sudo nano /etc/apache2/sites-available/default

Setelah berada di dalam file itu, temukan bagian berikut, dan ubah baris yang mengatakan AllowOverride dari None menjadi All. Bagian tersebut sekarang akan terlihat seperti ini:

<Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
 </Directory>

Setelah Anda menyimpan dan keluar dari file itu, restart apache. File .htaccess sekarang akan tersedia untuk semua situs Anda.

sudo service apache2 restart

Refference: Digital Ocean: How To Set Up Mod_Rewrite

Mencopot memcached dari Ubuntu

(Uninstall memcached from ubuntu)

Cara paling praktis adalah sebagai berikut, tapi cara ini hanya mencopot memcached nya saja, tapi mencopot juga dependency packages yang tidak diperlukan

$ sudo apt-get remove memcached 

Jika akan menghapus juga dependency packages terkait maka lakukan hal berikut ini

$ sudo apt-get purge memcached

atau sekalian dibersihkan, jika Anda akan reinstall kembali, lakukan ini

$ sudo apt-get purge --auto-remove memcached 

Memasang Web Server (LAMP) di Ubuntu 16.04

Pengantar

Sebelumnya diasumsikan bahwa kita sudah memiliki Ubuntu 16.04 Server 64bit. Jika Anda belum mengetahui cara instalasi Ubuntu 16.04 dapat dilihat disini. Karena ini untuk server, maka IP Address nya harus di set static. Secara default Ubuntu 16.04 Server tidak dipasangi Graphical User Interface, jadi semua dikendalikan dengan console, text based command.

Rencana yang akan dipasang adalah :

  1. Apache2
  2. MySQL 5
  3. PHP 7

Langkah 1 | Pasang Apache2 Web Server:

– Login lah sebagai user ubuntu yang pertama kali dibuat, user pertama ini memiliki kekhususan karena secara default sudah sebagai sudo user, atau user yang dapat berperan sebagai root. Saat ini prompt dari console Anda masih berupa “$” yang menandakan sebagai role user ‘bukan root’.

Selanjutnya masuklah sebagai root :

sudo -i

Salah satu tanda bahwa kita sedang dalam mode root adalah adanya prompt “#”.

Lakukan Update, agar seluruh komponen OS berada pada status update terkini.

apt-get update

DIlanjutkan dengan memasang/install Apache 2:

apt-get install apache2

Jika berjalan baik tanpa error, selanjutnya kita periksa apakah sudah berfungsi dengan browse dengan browser ke alamat IP server tersebut.

http://<IP address>

Dan akan tampak kira-kira seperti gambar di bawah ini:

Langkah 2 | Pasang MySQL Server:

Ada beberapa pilihan database yang dapat kita lakukan antara lain : MySQL, MariaDB, PostgreSQL, dan sebagainya. Kali ini kita pilih MySQL

sudo apt-get install mysql-server mysql-client

Dalam proses pemasangan ini Anda akan diminta memasukkan pilihan password untuk user database ‘root’:

Sekali lagi:

Keberadaan MySQL dapat diperiksa dengan:

sudo systemctl status mysql

Hasilnya kira-kira akan seperti ini :

toosa@toosa-T580:~$ sudo systemctl status mysql
[sudo] password for toosa: 
? mysql.service - MySQL Community Server
 Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en
 Active: active (running) since Sab 2016-12-17 20:07:08 WIB; 1 day 12h ago
 Main PID: 1548 (mysqld)
 CGroup: /system.slice/mysql.service
 ??1548 /usr/sbin/mysqld

Periksa versi MySQL Anda :

sudo mysql --version

Jika Anda ternyata bermaksud memasang MariaDB, maka MySQL perlu dilepas terlebih dahulu atau dipasang pada port yang berbeda, hal itu tidak dibahas di artikel ini, insyaALLAH akan saya bahas di artikel mendatang. Demikian pula untuk meningkatkan keamanan dari MySQL atau MariaDB akan saya bahas pada artikel selanjutnya.

Langkah 3 | Pasang PHP 7:

Berikutnya kitapasang PHP 7

sudo apt-get update 
sudo apt-get install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi? php7.0 libapache2-mod-php7

Selanjutnya kita periksa versi php yang telah terpasang dengan :

sudo php -v

Kira-kira akan kita dapatkan hasil sebagai berikut :

toosa@toosa-T580:~$ php -v
PHP 7.0.9-1+deb.sury.org~trusty+1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
 with Zend OPcache v7.0.9-1+deb.sury.org~trusty+1, Copyright (c) 1999-2016, by Zend Technologies

Terkahir kita perisksa dengan fungsi phpinfo(), mari kita buat sebuah file info.php

sudo nano  /var/www/html/info.php

Lalu diisi dengan code sebagai berikut :

<?php
phpinfo();
?>

Setelah disimpan, coba cek IP Anda :

Check IP :

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

lalu buka browser dengan IP tersebut: http://<IP address>/info.php, contoh :

http://192.168.100.1/info.php

Konfigurasi Apache 2.4 up untuk Virtualhost

Misalkan Anda memiliki server web dengan IP 222.222.222.222 dan akan mendaftarkan nama domain domainsaya.com di server tersebut, berikut adalah langkah konfigurasinya :

Setting DNS ditempat Anda mendaftarkan domain sehingga nama domain tersebut mengarah ke IP 222.222.222.222. Dengan demikian siapapun di internet ketika akan mencari domainsaya.com akan diarahkan ke IP 222.222.222.222.

Berikutnya tinggal setting di Web server kita, dalam hal ini Apache 2.4. Bagaimana caranya ?

Buatlah sebuah file conf di /etc/apache/site-available/domainsaya.conf. Isilah dengan :

<VirtualHost 222.222.222.222:80>
DocumentRoot /home/domainsaya/public_html
ServerName domainsaya.com
# Other directives here
       <Directory /home/domainsaya/public_html/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>

File konfigurasi domainsaya.conf ini harus memiliki symbolic link di /etc/apache/site-enabled/ agar dapat berfungsi :

ln -s /etc/apache/site-available/domainsaya.conf /etc/apache/site-enable/domainsaya.conf

Kemudian Apache perlu kita reload

#service apache restart

Semoga bermanfaat.

Tambahan :

Apache 2.4.3 telah menambahkan feature keamanan baru yang memungkinkan muncul pesan error “403 forbidden” yang tidak muncul jika menggunakan Apache 2.2.x. Atau bisa juga pesan berupa “client denied by server configuration”.
Fitur ini membutuhkan identitas pengguna untuk mengakses direktori. Fitur ini diaktifkan secara DEFAULT di dalam httpd.conf yang dibuat bersamaan pada saat instalasi Apache pertama kali. Kita dapat melihat aktifnya fitur ini dari directive :

Require all denied

Directive di atas tersebut akan menolak akses dari semua users. Untuk mengubahnya anda dapat saja menghapus directive tersebut, atau menambahkan directive lawannya di directory yang akan Anda buat terbuka akses nya :

Require all granted

diletakkan di :

;
   Order allow,deny
   Allow from all
   # New directive needed in Apache 2.4.3: 
   Require all granted

Warning: date() on ZendServer

Apabila Anda menemukan error seperti ini ketika menggunakan fungsi date()  :

Warning: date() [function.date]: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Asia/Jakarta’ for ‘WIT/7.0/no DST’ instead in /home/toosa/public_html/basicphp/date1.php on line 2

Ini tandanya Zend Server Anda belum terisi dengan benar. Karena itu masuklah ke Administrasi Zend Server, masuk ke Server Setup lalu cari directive date.timezone , isilah sesuai dengan time zone yang Anda inginkan, misalnya Asia/Jakarta.

 

1 2