Keamanan Mod adalah Open-source Web Application Firewall (WAF) untuk server web Apache Nginx dan IIS. Firewall lapisan aplikasi ini dikembangkan oleh SpiderLabs Trustwave dan dirilis di bawah Lisensi Apache 2.0. ModSecurity melindungi situs web dari peretas dengan menggunakan seperangkat aturan ekspresi reguler untuk menyaring eksploitasi yang umum diketahui, memungkinkan pemantauan lalu lintas HTTP, pencatatan log, analisis waktu nyata, dan deteksi serangan. Ada lebih dari 16.000 aturan yang tersedia untuk mendeteksi serangan seperti SQL Injection, Cross-site Scripting (XSS), Penyertaan File Lokal, Penyertaan File Jarak Jauh, dan aturan khusus aplikasi untuk banyak aplikasi web seperti Wordpress, Joomla, Drupal, dll.
Dalam tutorial ini, saya akan menunjukkan cara menginstal mod_security untuk server web Nginx yang cepat. Saya akan mengonfigurasi ModSecurity sebagai modul mandiri dan kemudian membangun Nginx dari sumber untuk menyertakan ModSecurity.
Prasyarat
- Server Ubuntu 15.04, saya akan menggunakan IP di sini 192.168.1.106.
- Keistimewaan Root
Apa yang akan kita lakukan dalam tutorial ini:
- Perbarui Sistem dan Repositori Ubuntu 15.04.
- Instal Dependensi yang diperlukan untuk membuat Nginx dan ModSecurity.
- Unduh ModSecurity dan Nginx.
- Instal ModSecurity dan Nginx.
- Konfigurasi Nginx.
- Konfigurasikan ModSecurity.
- Konfigurasikan Kumpulan Aturan Inti OWASP (CRS).
- Pengujian.
Semua perintah di bawah ini harus dijalankan sebagai root. Jalankan:
sudo -i
untuk menjadi pengguna root di server Anda.
1. Perbarui Sistem dan Repositori
Sebelum Anda mulai menginstal semua dependensi, harap perbarui sistem Anda:
apt-get update
apt-get upgrade
2. Instal dependensi build
Instal semua paket yang diperlukan untuk mengkompilasi Nginx dan ModSecurity dengan perintah apt di bawah ini:
apt-get install git build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf apache2-prefork-dev libxml2-dev libcurl4-openssl-dev
3. Unduh ModSecurity dan Nginx
Buka direktori "/usr/src/" , lalu kloning repositori ModSecurity dari Github:
cd /usr/src/
git clone https://github.com/SpiderLabs/ModSecurity.git modsecurity
Download Nginx dengan perintah wget, disini saya akan menggunakan Nginx stable versi 1.8. Jika Anda ingin menggunakan versi lain, buka halaman unduh Nginx untuk mendapatkan daftar semua rilis yang tersedia.
wget http://nginx.org/download/nginx-1.8.0.tar.gz
4. Instal ModSecurity dan Nginx
Sekarang saatnya menginstal ModSecurity, silahkan masuk ke direktori /usr/src/modsecurity:
cd /usr/src/modsecurity/
Dan kompilasi ModSecurity sebagai modul mandiri di server Anda, sehingga kami dapat memasukkannya ke Nginx:
./autogen.sh
./configure --enable-standalone-module --disable-mlogc
make
Sekarang masuk ke direktori nginx, kompilasi Nginx dan sertakan modul ModSecurity:
cd ../nginx-1.8.0
./configure \
--user=www-data \
--group=www-data \
--with-debug \
--with-ipv6 \
--with-http_ssl_module \
--add-module=/usr/src/modsecurity/nginx/modsecurity
Perintah configure menjelaskan:
Nginx akan berjalan di bawah pengguna dan grup "www-data" , dan kami mengaktifkan debug, ipv6 dan ssl modul. Dan terakhir kami memasukkan modul ModSecurity ke dalam Nginx.
Sekarang instal Nginx:
make
make install
Saat perintah make install selesai, Anda dapat melihat bahwa Nginx diinstal di "/usr/local/nginx" direktori:
cd /usr/local/nginx/
ll
drwxr-xr-x 2 root root 4096 Oct 3 07:21 conf/
drwxr-xr-x 2 root root 4096 Oct 3 07:21 html/
drwxr-xr-x 2 root root 4096 Oct 3 07:21 logs/
drwxr-xr-x 2 root root 4096 Oct 3 07:21 sbin/
5. Konfigurasi Nginx
Edit file konfigurasi nginx dengan vi/vim dan konfigurasikan nginx untuk dijalankan di bawah pengguna "www-data" .
cd /usr/local/nginx/
vi conf/nginx.conf
Pada baris pertama, batalkan komentar pada baris "pengguna" dan ubah pengguna menjadi www-data:
user www-data;
Simpan dan Keluar.
Buat symlink untuk biner nginx sehingga kita dapat menggunakan perintah "nginx" secara langsung.
ln -s /usr/local/nginx/sbin/nginx /bin/nginx
Selanjutnya kita akan membuat script systemd untuk Nginx yang digunakan untuk memulai/menghentikan daemon Nginx. Silakan buka direktori "/lib/systemd/system/" dan buat file baru "nginx.service" dengan vi:
cd /lib/systemd/system/
vi nginx.service
Rekatkan skrip di bawah ini:
[Service] Type=forking ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload KillStop=/usr/local/nginx/sbin/nginx -s stop KillMode=process Restart=on-failure RestartSec=42s PrivateTmp=true LimitNOFILE=200000 [Install] WantedBy=multi-user.target
Simpan dan Keluar.
Sekarang muat ulang systemd-daemon sehingga systemd memuat file layanan Nginx baru kami.
systemctl daemon-reload
Uji konfigurasi nginx dan mulai nginx dengan perintah systemctl:
nginx -t
systemctl start nginx
6. Konfigurasikan ModSecurity
Salin file konfigurasi ModSecurity ke direktori nginx dan beri nama "modsecurity.conf" :
cp /usr/src/modsecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp /usr/src/modsecurity/unicode.mapping /usr/local/nginx/conf/
Buka file modsecurity.conf dengan editor vi:
cd /usr/Local/nginx/conf/
vi modsecurity.conf
Pada baris 7, ubah "DetectionOnly" untuk "aktif" .
SecRuleEngine On
Pada baris 38, tingkatkan nilai "SecRequestBodyLimit " ke "100000000".
SecRequestBodyLimit 100000000
Pada baris 192, ubah nilai "SecAuditLogType " ke "Serentak " dan beri komentar pada baris SecAuditLog dan batalkan komentar pada baris 196.
SecAuditLogType Concurrent
#SecAuditLog /var/log/modsec_audit.log
# Specify the path for concurrent audit logging.
SecAuditLogStorageDir /opt/modsecurity/var/audit/
Simpan dan Keluar.
Sekarang buat direktori baru untuk log audit ModSecurity dan ubah pemiliknya menjadi www-data.
mkdir -p /opt/modsecurity/var/audit/
chown -R www-data:www-data /opt/modsecurity/var/audit/
7. Konfigurasikan Kumpulan Aturan Inti OWASP (CRS)
Unduh Kumpulan Aturan Inti OWASP dari github.
cd /usr/src/
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
Buka direktori "owasp-modsecurity-crs " dan salin direktori "base_rules" ke direktori nginx.
cd owasp-modsecurity-crs
cp -R base_rules/ /usr/Local/nginx/conf/
Edit modsecurity.conf dan tambahkan OWASP CRS.
cd /usr/Local/nginx/conf/
vi modsecurity.conf
Silakan pergi ke akhir file dan tambahkan konfigurasi berikut:
#DefaultAction SecDefaultAction "log,deny,phase:1" #If you want to load single rule /usr/loca/nginx/conf #Include base_rules/modsecurity_crs_41_sql_injection_attacks.conf #Load all Rule Include base_rules/*.conf #Disable rule by ID from error message (for my wordpress) SecRuleRemoveById 981172 981173 960032 960034 960017 960010 950117 981004 960015
Simpan dan Keluar.
Sebagai langkah terakhir, tambahkan file modsecurity.conf ke konfigurasi Nginx dengan mengedit file "nginx.conf " file.
vi conf/nginx.conf
Tambahkan modsecurity.conf:
[.....]
#Enable ModSecurity ModSecurityEnabled on; ModSecurityConfig modsecurity.conf; root html; index index.php index.html index.htm;
[.....]
Simpan dan keluar.
Mulai ulang Nginx untuk menerapkan perubahan konfigurasi:
systemctl restart nginx
8. Pengujian
Saya memiliki situs WordPress yang berjalan di Nginx dan ModSecurity, ini berfungsi dengan baik. Untuk pengujian, saya akan memasang plugin baru yang rentan terhadap XSS dan SQL Injection.
Berikut adalah hasilnya:
XSS dilarang
https://www.exploit-db.com/exploits/37107/
Akses peramban:
Log Server:
Injeksi SQL dilarang
https://www.exploit-db.com/exploits/37560/
Akses Peramban:
Log Server:
Nginx dan ModSecurity berhasil.
Kesimpulan
ModSecurity adalah WAF (Web Application Firewall) open source yang dikembangkan oleh SpiderLabs Trustwave untuk mengamankan aplikasi web Anda. Ada lebih dari 16.000 aturan yang tersedia untuk mendeteksi serangan seperti SQL Injection, XSS, LFI, RFI, dll. ModSecurity mudah dipasang dan tersedia sebagai modul untuk Apache, Nginx, dan IIS untuk windows.
Referensi
- https://www.modsecurity.org/documentation.html
- https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project
- https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual