ModSecurity adalah sebuah firewall yang berfungsi untuk melindungi aplikasi web dari serangan-serangan berbahaya. Pada panduan ini, kami akan berbagi cara install ModSecurity di Nginx mulai dari persiapan sistem hingga pengujiannya. Simak artikel ini hingga selesai.
Di jaman teknologi internet yang berkembang semakin pesat, keamanan adalah aspek terpenting dan tidak dapat diabaikan begitu saja. Tujuan ditingkatkannya keamanan adalah untuk menjaga sumber daya atau informasi yang tidak seharusnya terexpose ke sisi public.
Salah satu langkah yang perlu dilakukan adalah meningkatkan keamanan Website untuk mencegah terjadinya kejahatan siber, seperti pencurian data, serangan malware, dan penyebaran virus yang dapat mengakibatkan ketidakmampuan akses komputer. Saat ini, tingkat kejahatan dalam bidang siber semakin meningkat seiring dengan kemajuan teknologi yang ada
Untuk mencegah adanya kejahatan cyber, kita perlu menerapkan adanya sistem keamanan yang mumpuni, salah satu keamanan tersebut adalah WAF/Mod Security.
Dalam artikel ini, kami akan membahas tentang apa itu modsec atau modsecurity hingga cara install modsecurity di Nginx secara lengkap.
Apa itu ModSecurity?
ModSecurity adalah sebuah firewall aplikasi web (web Application Firewall atau disingkat menjadi WAF) yang berfungsi untuk melindungi aplikasi web dari serangan-serangan berbahaya. ModSecurity dirancang untuk bekerja sebagai addon atau modul tambahan di dalam server Apache atau Nginx.
Tujuan utama ModSecurity adalah untuk mengidentifikasi, memblokir, dan melindungi aplikasi web dari berbagai jenis serangan yang bertujuan untuk merusak sistem. Serangan-serangan tersebut meliputi SQL Injection, cross-site scripting (XSS), (XSRF/CSRF), dan serangan² lainnya yang membahayakan server.
ModSecurity memiliki kemampuan yang sangat fleksibel, dan dapat dikonfigurasi sesuai dengan kebutuhan pengguna. Kita dapat mengatur rules sesuai dengan kebutuhan. ModSecurity juga mendukung bahasa ekspresi reguler yang kuat untuk mencocokkan pola serangan.
Dengan menggunakan ModSecurity, administrator sistem dapat meningkatkan keamanan aplikasi web mereka dengan menambahkan lapisan perlindungan tambahan disisi server.
ModSecurity membantu mengurangi risiko serangan dan melindungi data sensitif dari serangan-serangan yang berpotensi merusak sistem penting. Selengkapnya tentang modsec dapat Anda baca pada artikel berikut: ModSecurity: Pengertian, Fungsi Hingga Cara Kerjanya
Cara Install Modsec di Nginx
Sebelum melakukan instalasi, pastikan server Anda telah memenuhi system requirement berikut ini.
Step 1. Persiapan Sistem
- OS Ubuntu 20.04
- Nginx Webserver V1.20
- VPS dengan RAM minimal 2GB + Disk 15 GB atau lebih
Step 2. Install Package
Sebelum konfigurasi ModSecurity pada nginx dilakukan, kita memerlukan install package yang diperlukan untuk menjalankan modsec. Langkahnya sebagai berikut.
- Install dependensi yang nantinya dipergunakan untuk rebuild nginx.
# sudo apt install nginx
# sudo apt-get install bison build-essential ca-certificates curl dh-autoreconf doxygen \
# flex gawk git iputils-ping libcurl4-gnutls-dev libexpat1-dev libgeoip-dev liblmdb-dev \
# libpcre3-dev libpcre++-dev libssl-dev libtool libxml2 libxml2-dev libyajl-dev locales \
# lua5.3-dev pkg-config wget zlib1g-dev zlibc libxslt-dev libgd-dev
- Instalasi Git dan clone package ModSecurity.
# sudo apt install git
# cd /opt && sudo git clone https://github.com/SpiderLabs/ModSecurity
# cd ModSecurity
# sudo git submodule init
# sudo git submodule update
- Apabila package git telah diupdate, jalankan build pada ModSecurity.
# sudo ./build.sh
# sudo ./configure
# sudo make
# sudo make install
Setelah selesai build, install package modsec konektor dengan :
cd /opt && sudo git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx
Step 3. Rebuild Nginx dengan ModSecurity
- Sebelum melakukan rebuild, lakukan pengecekan pada versi Nginx.
nginx -v
nginx version: nginx/1.18.0 (Ubuntu)
- Setelah mengetahui versi nginx yang digunakan, unduh paket Nginx sesuai versi.
# cd /opt && sudo wget http://nginx.org/download/nginx-1.18.0.tar.gz
# sudo tar -xvzmf nginx-1.18.0.tar.gz
# cd nginx-1.18.0
- Setelah mengekstrak paket nginx, maka kita dapat cek paket yang diperlukan untuk rebuild :
nginx -V
Pada output akan ditemukan code :
--with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-GkiujU/nginx-1.18.0=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' lib/nginx/uwsgi --with-debug --with-pcre-jit (dan seterusnya)
- Tambahkan modul ModSecurity pada bagian terakhir kode diatas, berikut command lengkapnya.
sudo ./configure --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-GkiujU/nginx-1.18.0=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' lib/nginx/uwsgi --with-debug --with-pcre-jit
(dan seterusnya) –add-dynamic-module=../ModSecurity-nginx
tambahkan –add-dynamic-module=../ModSecurity-nginx pada baris terakhir
- Apabila semua telah siap di rebuild, maka jalankan command berikut untuk melakukan rebuild pada nginx.
sudo make modules
Tunggu hingga proses rebuild selesai dalam beberapa menit.
- Setelah proses rebuild selesai, buat folder nginx untuk lokasi modul dari ModSecurity, dan copy modul nginx ke dalam lokasi folder yang telah dibuat.
sudo mkdir /etc/nginx/modules
sudo cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules
Memasang ModSecurity pada config Nginx
- Edit config nginx pada folder /etc/nginx/nginx.conf dengan menambahkan modul ModSecurity didalamnya.
Modul : load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;
Tambahkan pada baris ke 5:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;
- Download paket Rule keamanan ” OWASP ModSecurity Core Rule Set (CRS) “, Owasp crs adalah paket rule yang akan digunakan untuk nginx untuk mengidentifikasi tipe serangan yang ada, apabila serangan yang masuk merupakan salah satu dari rule, maka ModSecurity akan memblokir serangan yang masuk.
# sudo rm -rf /usr/share/modsecurity-crs
# sudo git clone https://github.com/coreruleset/coreruleset /usr/local/modsecurity-crs
Sesuaikan penamaan rule yang akan di load
sudo mv /usr/local/modsecurity-crs/crs-setup.conf.example /usr/local/modsecurity-crs/crs-setup.conf
sudo mv /usr/local/modsecurity-crs/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example /usr/local/modsecurity-crs/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
- Konfigurasi ModSecurity
Kita akan membuat sebuah folder, folder tersebut akan dicek dan dijalankan oleh nginx.
sudo mkdir -p /etc/nginx/modsec
Copy dan pindahkan rule dari ModSecurity ke nginx.
sudo cp /opt/ModSecurity/unicode.mapping /etc/nginx/modsec
sudo cp /opt/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf
4. Aktifkan deteksi ModSecurity pada file /etc/nginx/modsec/modsecurity.conf.
Ubah nilainya SecRuleEngine menjadi On:
5. Buat file modsec dan tanamkan rule modsecurity-crs didalamnya.
/etc/nginx/modsec/main.conf
Include /etc/nginx/modsec/modsecurity.conf
Include /usr/local/modsecurity-crs/crs-setup.conf
Include /usr/local/modsecurity-crs/rules/*.conf
Memasang ModSecurity pada Nginx
Untuk menerapkan ModSecurity maka kita perlu menambahkan 2 baris berikut ke dalam virtual host Nginx yang telah dibuat.
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
Berikut contoh file virtualhost beserta modsecurity-crs.
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name dikanetwork.web.id;
root /var/www/html;
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}
Restart Nginx untuk menerapkan perubahan.
sudo systemctl restart nginx
Pengujian ModSecurity
Ujicoba dapat dilakukan dengan menggunakan berbagai tipe attack seperti injeksi sql ataupun eksekusi ke script seperti berikut.
http://(alamat ip server)/index.html?exec=/bin/bash

Atau
http://mayapada.dikanetwork.web.id/?q=1" or "1"="1"%27

Maka Output akan menghasilkan error code 403 Forbidden yang menandakan modsec berjalan dengan baik untuk mencegah serangan.
Demikian artikel kami tentang cara install dan config ModSecurity WAF pada Nginx, semoga bermanfaat.