Cara Install Aplikasi WAF LibModsecurity di Nginx CentOS 8

LibModSecurity adalah aplikasi web application firewall (WAF) yang free” dan open-source yang dapat digunakan untuk melindungi server Nginx dari berbagai jenis serangan cyber. Muncul dengan Core Rule Set termasuk SQL injection, cross-site scripting, Trojans dan banyak lagi. Ia bekerja dengan memonitor lalu lintas HTTP secara real-time dan melawan kerentanan menggunakan OWASP ModSecurity Core Rule Set. LibModSecurity dapat digunakan dengan Apache, Nginx, dan IIS dan juga kompatibel dengan Debian, Ubuntu, & CentOS.

Dalam tutorial ini, kami akan menunjukkan kepada Anda cara mengunduh dan mengkompilasi LibModSecurity dengan dukungan Nginx di CentOS 8.

*Persyaratan*

· Server yang menjalankan CentOS 8. · Masuk sebagai root atau user dengan hak sudo.

*Sebelum Mulai*

Sebelum memulai, perbarui server Anda dengan versi terbaru menggunakan perintah berikut:

dnf update

Setelah server Anda up-to-date, restart untuk meminimalisir terjadinya kesalahan pada sistem.

*Instal Repository dan Dependensi yang Diperlukan*

Pertama, instal repositori EPEL dan REMI pada sistem. Anda dapat menginstalnya dengan perintah berikut:

dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Langkah berikutnya instal semua dependensi yang diperlukan dengan perintah berikut:

dnf install gcc-c++ flex bison yajl curl-devel zlib-devel pcre-devel autoconf automake git curl make libxml2-devel pkgconfig libtool httpd-devel redhat-rpm-config wget openssl openssl-devel nano

Setelah semua paket diinstal, Anda dapat menginstal dependensi lain menggunakan repositori PowerTool:

dnf –enablerepo=PowerTools install doxygen yajl-devel

Instal GeoIP menggunakan repositori REMI dengan menjalankan perintah berikut:

dnf –enablerepo=remi install GeoIP-devel

Setelah semua paket diinstal, Anda dapat melanjutkan ke langkah berikutnya.

*Download dan Compile LibModsecurity*

Pertama, Anda harus download source LibModsecurity dan mengompilasinya di sistem Anda. Untuk melakukannya, masuk ke direktori /opt dan download versi terbaru LibModsecurity dari repositori Git :

cd /opt/ git clone –depth 1 -b v3/master –single-branch https://github.com/SpiderLabs/ModSecurity

Masuk ke direktori ModSecurity dan download kode libInjection dengan perintah berikut:

cd ModSecurity git submodule init git submodule update

Konfigurasikan LibModsecurity menggunakan perintah berikut:

./build.sh ./configure

Terakhir, compile dan instal LibModSecurity dengan perintah berikut:

make make install

Pada titik ini, LibModsecurity telah diinstal pada sistem. Anda sekarang dapat melanjutkan untuk menginstal Nginx dengan dukungan LibModsecurity.

*Download dan Compile Nginx dengan Dukungan LibModsecurity*

Pertama, Anda harus membuat user sistem dan grup untuk Nginx. Anda dapat membuatnya dengan perintah berikut:

useradd -r -M -s /sbin/nologin -d /usr/local/nginx nginx

Selanjutnya, Anda perlu download Nginx dan mengompilasinya dengan dukungan LibModsecurity.

Untuk melakukannya, pertama download konektor ModSecurity-nginx dari repositori Git dengan perintah berikut:

cd /opt git clone https://github.com/SpiderLabs/ModSecurity-nginx.git

Selanjutnya, download versi terbaru dari Nginx dengan perintah berikut:

wget http://nginx.org/download/nginx-1.17.6.tar.gz

Setelah diunduh, ekstrak file yang diunduh menggunakan perintah berikut:

tar -xvzf nginx-1.17.6.tar.gz

Selanjutnya, masuk ke direktori Nginx dan konfigurasikan dengan perintah berikut:

cd nginx-1.17.6 ./configure –user=nginx –group=nginx –with-pcre-jit –with-debug –with-http_ssl_module –with-http_realip_module –add-module=/opt/ModSecurity-nginx

Selanjutnya Install Nginx dengan perintah berikut :

make make install

Pada titik ini, Nginx telah diinstal dengan dukungan LibModsecurity. Anda sekarang dapat melanjutkan untuk mengkonfigurasi Nginx.

*Konfigurasikan Nginx dengan ModSecurity*

Pertama, Anda perlu menyalin file konfigurasi sampel ModSecurity dari direktori source Nginx ke direktori konfigurasi Nginx.

Anda dapat menyalinnya dengan perintah berikut:

cp /opt/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf cp /opt/ModSecurity/unicode.mapping /usr/local/nginx/conf/

Selanjutnya, buat symbolic link dari Nginx binary ke”  /usr/sbin/” dengan perintah berikut:

ln -s /usr/local/nginx/sbin/nginx /usr/sbin/

Selanjutnya, buat direktori Nginx” log, direktori ini berfungsi untuk mencatat semua akses maupun error yang ada pada Nginx, untuk membuat direktori Nginx log gunakan perintah berikut:

mkdir /var/log/nginx

Selanjutnya, buka file konfigurasi Nginx dengan perintah berikut:

nano /usr/local/nginx/conf/nginx.conf

Buat perubahan berikut:

user nginx; worker_processes 1; pid /run/nginx.pid; events { worker_connections 1024; }

http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name ganti_dengan_alamat_IP_atau_hostname_atau_domain; modsecurity on; modsecurity_rules_file /usr/local/nginx/conf/modsecurity.conf; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }

Jika Anda mempunyai banyak domain dan ingin membuat pengaturan sendiri untuk setiap domain, silahkan melihat panduan kami tentang cara membuat server block di Nginx.

Simpan dan tutup file setelah Anda selesai. Kemudian, periksa Nginx untuk setiap kesalahan sintaks dengan perintah berikut:

nginx -t

Anda akan melihat output berikut:

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

Pada titik ini, Nginx telah dikonfigurasi. Anda dapat melanjutkan untuk membuat unit file systemd untuk Nginx.

*Buat file Layanan Systemd untuk Nginx*

Selanjutnya, Anda perlu membuat file systemd untuk mengelola layanan Nginx. Anda dapat membuatnya dengan perintah berikut:

nano /etc/systemd/system/nginx.service

Tambahkan baris berikut:

[Unit] Description=The nginx server After=network.target remote-fs.target nss-lookup.target

[Service] Type=forking PIDFile=/run/nginx.pid ExecStartPre=/usr/bin/rm -f /run/nginx.pid ExecStartPre=/usr/sbin/nginx -t ExecStart=/usr/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID KillSignal=SIGQUIT TimeoutStopSec=5 KillMode=mixed PrivateTmp=true

[Install] WantedBy=multi-user.target

Simpan dan tutup file setelah Anda selesai. Kemudian, restart daemon systemd dengan perintah berikut:

systemctl daemon-reload

Selanjutnya, mulai Nginx service dan aktifkan untuk memulai setelah sistem reboot dengan perintah berikut:

systemctl start nginx systemctl enable –now nginx

Anda akan melihat output berikut:

Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service “†’ /etc/systemd/system/nginx.service.

Selanjutnya, verifikasi layanan Nginx dengan perintah berikut:

systemctl status nginx

Anda akan melihat output berikut:

? nginx.service – The nginx HTTP and reverse proxy server Loaded: loaded (/etc/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2019-12-30 10:20:01 EST; 41s ago Process: 17730 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) Process: 17728 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) Process: 17727 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS) Main PID: 17732 (nginx) Tasks: 2 (limit: 6102) Memory: 5.0M CGroup: /system.slice/nginx.service ??17732 nginx: master process /usr/sbin/nginx ??17733 nginx: worker process

Dec 30 10:20:00 nginx systemd[1]: Starting The nginx HTTP and reverse proxy server… Dec 30 10:20:00 nginx nginx[17728]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok Dec 30 10:20:00 nginx nginx[17728]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful Dec 30 10:20:01 nginx systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument Dec 30 10:20:01 nginx systemd[1]: Started The nginx HTTP and reverse proxy server.

Pada titik ini, Nginx sudah mulai dan berjalan. Anda sekarang dapat melanjutkan untuk mengkonfigurasi ModSecurity.

*Konfigurasikan ModeSecurity*

Secara default, ModSecurity diatur pada mode hanya deteksi. Jadi, Anda harus membuat sedikit perubahan pada aturan ModSecurity. Anda dapat melakukannya dengan mengedit file modsecurity.conf:

nano /usr/local/nginx/conf/modsecurity.conf

Temukan baris berikut:

SecRuleEngine DetectionOnly

Dan, ganti dengan baris berikut:

SecRuleEngine On

Dan, ganti dengan baris berikut:

/var/log/modsec_audit.log

Dan, ganti dengan baris berikut:

/var/log/nginx/modsec_audit.log

Simpan dan tutup file setelah Anda selesai.

Selanjutnya, download versi terbaru dari ModSecurity Core Rule Set dari repositori Git menggunakan perintah berikut:

git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/local/nginx/conf/owasp-crs

Setelah file di download, ganti nama file konfigurasi crs-setup.conf.example” menjadi” crs-setup.conf dengan perintah berikut:

mv /usr/local/nginx/conf/owasp-crs/crs-setup.conf.example /usr/local/nginx/conf/owasp-crs/crs-setup.conf

Selanjutnya, konfigurasikan ModeSecurity untuk menggunakan aturan ini dengan mengedit file /usr/local/nginx/conf/modsecurity.conf:

nano /usr/local/nginx/conf/modsecurity.conf

Tambahkan baris berikut di akhir file:

Include owasp-crs/crs-setup.conf Include owasp-crs/rules/*.conf

Simpan dan tutup file setelah Anda selesai. Kemudian, restart layanan Nginx untuk mengimplementasikan perubahan:

systemctl restart nginx

*Test Pengaturan dan Performa ModSecurity*

ModSecurity telah diinstal dan dikonfigurasi. Sudah waktunya untuk menguji apakah pengaturan kita berfungsi atau tidak.

Untuk menguji ModSecurity terhadap /command injection/, buka browser web Anda dan ketik URL http://localhost/index.html?exec=/bin/bash. Anda akan melihat error 403 Forbidden seperti berikut:

Untuk menguji respon ModSecurity terhadap serangan XSS (Cross site scripting), buka terminal dan jalankan perintah curl di barengi dengan payload XSS.

curl http://localhost/?q=”>

Jika anda mendapatkan output berikut, berarti ModSecurity berhasil mendeteksi serangan dan memblokirnya.

403 Forbidden

403 Forbidden


nginx/1.17.6

*Kesimpulan*

Selamat! Anda telah berhasil download dan compiled LibModSecurity dengan Nginx. Server Anda sekarang diamankan dari berbagai serangan. Untuk informasi lebih lanjut, Anda dapat mengunjungi dokumentasi ModSecurity di ModSecurity Doc.

Leave a Reply

Your email address will not be published.