Install ModSecurity di Nginx – ModSecurity adalah sebuah Web Aplikasi Firewall (WAF) yang berfungsi untuk melindungi aplikasi web dari serangan seperti SQL Injection, XSS, Brute Force, dan banyak lagi. Sedangkan OWASP CRS sendiri adalah aturan atau rule siap pakai yang akan digunakan oleh WAF ModSecurity untuk mendeteksi dan mencegah serangan siber.
OWASP Modsecurity Project
ModSecurity is an open source, cross-platform web application firewall (WAF) module. Known as the “Swiss Army Knife” of WAFs, it enables web application defenders to gain visibility into HTTP(S) traffic and provides a power rules language and API to implement advanced protections.
Sebelum memulai proses instalasi, Ada beberapa hal yang harus disiapkan, seperti Server Ubuntu yang digunakan untuk menginstall ModSec.
Spesifikasi Server
Seperti yang sudah kami jelaskan di atas tentang pengertian dan fungsi dari modsec. Jadi singkatnya, Kita akan melakukan instalasi ModSecurity di Nginx dan menggunakan rule OWASP CRS sebagai aturan atau rule firewallnya. Simak artikel ini hingga selesai.
Gambaran Proses Instalasi
Baca Juga : Cara Mudah Mengamankan VPS Ubuntu
Langkah wajib yang harus dilakukan sebelum menginstall sesuatu di server adalah update dulu packagenya. Kemudian install juga package yang diperlukan untuk menjalankan modsec.
sudo apt update && sudo apt upgrade -y
sudo apt install git gcc make build-essential autoconf automake libtool libcurl4-openssl-dev liblua5.3-dev libfuzzy-dev ssdeep gettext pkg-config libgeoip-dev libyajl-dev doxygen libpcre3-dev libpcre2-16-0 libpcre2-dev libpcre2-posix3 zlib1g zlib1g-dev -y
Atur juga timezone server dan sesuaikan dengan daerah tempat tinggal Anda. disini saya mengatur timezone server ke Asia/Jakarta.
sudo timedatectl set-timezone Asia/Jakarta
Secara default, paket ModSecurity tidak tersedia di repository bawaan Ubuntu. Oleh karena itu, kita perlu mengunduhnya secara manual dan melakukan proses build agar dapat berjalan di sistem VPS yang digunakan. Kita mulai dari clone source modsec dari github, kemudian masuk ke direktorinya
cd /opt && sudo git clone https://github.com/owasp-modsecurity/ModSecurity.git
cd ModSecurity
sudo git submodule init
sudo git submodule update
sudo ./build.sh
sudo ./configure
Kemudian build dan install ke server. Proses ini memakan waktu 5 hingga 10 menit, tergantung kecepatan server yang Anda miliki.
sudo make
sudo make install
Kita perlu menginstall NGINX terlebih dahulu agar dependensi yang diperlukan untuk build terpenuhi. Dan sebagai referensi konfigurasi bawaan yang akan digunakan setelah versi hasil build selesai. Selain itu juga sebagai langkah antisipasi jika proses build dari source code mengalami kendala.
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
Pastikan service nginx berjalan seperti gambar di bawah ini:
Download nginx source code sesuai dengan versi nginx yang telah terinstall di server. Pertama kita periksa dulu versi nginx yang terinstall di server.
sudo nginx -v
Kemudian download nginx source code versi yang sama. Lanjut ekstrak dan masuk ke direktorinya.
cd /opt && sudo wget https://nginx.org/download/nginx-1.24.0.tar.gz
sudo tar -xzvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
Pastikan versi Nginx yang diundah sama dengan yang terinstall di server seperti ini:
ModSecurity NGINX Connector adalah modul untuk menghubungkan NGINX dengan ModSecurity. Secara default, NGINX tidak bisa langsung menggunakan ModSecurity karena tidak mendukungnya. Jadi dipasanglah NGINX Connector sebagai jembatan yang membuat NGINX bisa berjalan dengan ModSecurity.
cd /opt && sudo git clone https://github.com/owasp-modsecurity/ModSecurity-nginx.git
Seperti yang sudah saya informasikan sebelumnya, Nginx secara default tidak support Modsecurity. Untuk itu kita perlu merebuild Nginx beserta module modsec-nginx-connector agar keduanya bisa dibekerja dengan baik. Proses ini memakan waktu 5 hingga 10 menit, tergantung kecepatan server yang Anda miliki.
cd nginx-1.24.0/
sudo ./configure --with-compat --add-dynamic-module=/opt/ModSecurity-nginx
sudo make
sudo make modules
Pastikan proses rebuild berjalan lancar dan berhasil seperti ini:
Selanjutnya copy modules ModSec ke nginx modules-enabled
sudo cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules-enabled/
sudo cp /opt/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsecurity.conf
sudo cp /opt/ModSecurity/unicode.mapping /etc/nginx/unicode.mapping
Untuk mengaktifkan, kita perlu mengonfigurasi file nginx.conf agar bisa meload modules modsecurity. Ikuti langkah berikut untuk memulai.
sudo nano /etc/nginx/nginx.conf
Load module modsecurity dengan memasukkan perintah ini. Masukkan di baris ke 5 !
load_module /etc/nginx/modules-enabled/ngx_http_modsecurity_module.so;
Pastikan Anda mengatur dengan benar seperti gambar di bawah ini:
Edit file /etc/nginx/modsecurity.conf dan ubah SecRuleEngine ke on.
sudo nano /etc/nginx/modsecurity.conf
Ubah seperti gambar di bawah ini:
Kemudian verifikasi konfigurasi Nginx dan restart nginx dengan perintah ini.
sudo nginx -t
sudo systemctl restart nginx
Pastikan hasilnya sukses, OK dan module modsecurity terload seperti ini:
OWASP CRS adalah paket rule yang akan digunakan oleh nginx untuk mengidentifikasi tipe serangan yang masuk ke server. Jika serangan yang masuk cocok dengan salah satu aturan dalam CRS, maka ModSecurity akan memblokir serangan tersebut.
Pertama kita download dulu rule OWASP CRS dari official repository di github. Perintah di bawah ini akan mengunduh repositori CRS dari OWASP dan menempatkannya di direktori /etc/nginx/owasp-crs
.
sudo git clone https://github.com/coreruleset/coreruleset.git /etc/nginx/owasp-crs
Kemudian salin konfigurasi default dari CRS yang disertakan dalam repositori tersebut. Perintah di di bawah ini akan menyalin file crs-setup.conf.example
menjadi crs-setup.conf
, yang digunakan untuk mengatur pengaturan dasar CRS.
sudo cp /etc/nginx/owasp-crs/crs-setup.conf{.example,}
Lanjut edit file modsecurity.conf untuk mengupdate dan load rule OWASP CRS.
sudo nano /etc/nginx/modsecurity.conf
Masukkan code berikut di bagian paling bawah:
Include owasp-crs/crs-setup.conf
Include owasp-crs/rules/*.conf
Terakhir verifikasi dan restart service nginx.
sudo nginx -t
sudo systemctl restart nginx
Kita juga perlu menambahkan dua baris konfigurasi berikut di setiap virtualhost Nginx. Hal ini bertujuan untuk mengaktifkan ModSecurity pada virtual host yang sudah dibuat. Misal pada contoh ini kita akan mengaktifkan modsecurity pada virtualhost bawaan nginx, yaitu default.
sudo nano /etc/nginx/sites-enabled/default
Tambahkan 2(dua) baris kode berikut.
modsecurity on;
modsecurity_rules_file /etc/nginx/modsecurity.conf;
Lebih jelasnya seperti gambar di bawah ini:
Terakhir verifikasi dan restart service nginx.
sudo nginx -t
sudo systemctl restart nginx
Pada langkah ini Kita akan mencoba mengakses server melalui browser dan menyisipkan kode yang mencurigakan, seperti perintah shell. Seperti contoh ini Kita akan coba untuk menjalankan perintah shell /bin/bash
di server melalui parameter URL.
http://ip-address-server/as.php?s=/bin/bash
Kita juga bisa melihat log dari modsecuirty dengan perintah berikut:
sudo tail -f /var/log/modsec_audit.log
Dan melihat error log nginx dengan perintah berikut:
sudo tail -f /var/log/nginx/error.log
Jadi begitulah panduan Cara Install ModSecurity di Nginx. Setelah mengikuti langkah-langkah di atas, jika server menampilkan error 403 dan mencatat percakapan yang diblokir di log, berarti ModSecurity sudah berhasil melindungi server Nginx Anda dari potensi ancaman. Pastikan untuk terus memonitor log secara berkala agar sistem tetap aman dari serangan. Dengan pengaturan yang tepat, Anda sudah menambah lapisan keamanan yang signifikan untuk server Anda
Semoga panduan ini bermanfaat, dan selamat mencoba! 🚀