Dalam panduan ini, kita akan mempelajari cara mengkonfigurasi LibModsecurity dengan Nginx di CentOS 8. LibMosecurity adalah versi terbaru dari ModSecurity versi 2.9 ke bawah. Oleh karena itu dikenal sebagai ModSecurity versi 3.
Konfigurasikan LibModsecurity dengan Nginx di CentOS 8
Jalankan Pembaruan Sistem
Mulailah dengan memperbarui paket sistem Anda.
dnf update
Instal Alat dan Ketergantungan Bangun yang Diperlukan
Baik Nginx dan LibModsecurity akan dikompilasi dari sumbernya dan oleh karena itu diperlukan sejumlah alat bantu dan dependensi. Jalankan perintah di bawah ini untuk menginstalnya.
dnf install gcc-c++ flex bison yajl curl-devel curl zlib-devel pcre-devel autoconf automake git curl make libxml2-devel pkgconfig libtool httpd-devel redhat-rpm-config git wget openssl openssl-devel vim
dnf --enablerepo=PowerTools install doxygen yajl-devel
Instal Perpustakaan GeoIP
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
dnf --enablerepo=remi install GeoIP-devel
Download Kode Sumber LibModsecurity
Buat direktori sementara untuk menyimpan tarball sumber.
mkdir /tmp/modsec
Anda dapat memilih untuk menggunakan /optsebagai gantinya.
Jalankan perintah di bawah ini untuk mengkloning repositori GitHub LibModsecurity terbaru.
cd /tmp/modsec
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
Kompilasi dan Instal LibModsecurity
Arahkan ke direktori sumber LibModsecurity, konfigurasikan, kompilasi, dan instal
cd ModSecurity
Download kode libInjection yang tersedia sebagai bagian dari kode sumber ModSecurity dalam format git-submodule
git submodule init git submodule update
Konfigurasikan LibModsecurity untuk menyesuaikannya dengan sistem Anda dan periksa apakah ada ketergantungan yang diperlukan yang hilang.
./build.sh./configure
Itu fatal: No names found, cannot describe anythingdapat diabaikan dengan aman. Perbaiki masalah ketergantungan jika ada.
Kompilasi dan instal LibModSecurity.
make
make install
Instal Nginx dengan Dukungan LibModsecurity
Untuk mengatur Nginx dengan LibModsecurity, Anda perlu mengkompilasi Nginx dengan dukungan untuk LibModsecurity.
Oleh karena itu, download konektor ModSecurity-nginx yang menyediakan saluran komunikasi antara Nginx dan LibModsecurity dengan mengkloning repositori git-nya.
cd /tmp/modsec git clone https://github.com/SpiderLabs/ModSecurity-nginx.git
Selanjutnya, download Nginx versi pokok terbaru dari downloadan Nginx. Versi terbaru pada tulisan ini adalah versi nginx-1.17.6.tar.gz.
wget http://nginx.org/download/nginx-1.17.6.tar.gz
Ekstrak arsip.
tar xzf nginx-1.17.6.tar.gz
Buat user dan grup sistem Nginx yang tidak memiliki hak istimewa.
useradd -r -M -s /sbin/nologin -d /usr/local/nginx nginx
Arahkan ke direktori sumber Nginx dan konfigurasikan.
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=/tmp/modsec/ModSecurity-nginx
Kompilasi dan instal Nginx.
make make install
Konfigurasi Nginx dengan ModSecurity
Untuk memulainya, copy contoh file konfigurasi ModSecurity pada direktori sumber ke direktori konfigurasi Nginx.
cp /tmp/modsec/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
Copy unicode.mapping file dari direktori sumber ModSecurity ke direktori konfigurasi Nginx.
cp /tmp/modsec/ModSecurity/unicode.mapping /usr/local/nginx/conf/
Selanjutnya, edit file konfigurasi Nginx dan buat perubahan seperti yang ditunjukkan di bawah ini.
Buat cadangan file konfigurasi Nginx.
cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
Buka file konfigurasi untuk diedit.
vim /usr/local/nginx/conf/nginx.conf
Konfigurasikan Nginx sehingga konfigurasi Anda mungkin terlihat seperti;
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 nginx.kifarunix-demo.com; modsecurity on; modsecurity_rules_file /usr/local/nginx/conf/modsecurity.conf; access_log /var/log/nginx/access_kifarunix-demo.log; error_log /var/log/nginx/error_kifarunix-demo.log; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
Perhatikan bahwa garis;
modsecurity on; modsecurity_rules_file /usr/local/nginx/conf/modsecurity.conf;
Mengaktifkan Modsecurity dan menentukan lokasi aturan Modsecurity.
Perhatikan bahwa ModSecurity 3 dapat diaktifkan per basis direktori.
Buat direktori log Nginx.
mkdir /var/log/nginx
Buat Layanan Sistem Nginx
Untuk dapat menjalankan Nginx sebagai service, buat service systemd seperti gambar di bawah ini;
vim /etc/systemd/system/nginx.service
[Unit] Description=nginx HTTP and reverse proxy 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
Buat tautan simbolis biner Nginx ke /usr/sbin/jalur.
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
Reload konfigurasi systemd.
systemctl daemon-reload
Jalankan verifikasi error sintaks konfigurasi Nginx.
nginx -t
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
Jika semuanya baik-baik saja, mulai dan aktifkan Nginx untuk berjalan pada boot sistem.
systemctl enable --now nginx
Periksa statusnya;
systemctl status nginx
● nginx.service - nginx HTTP and reverse proxy server Loaded: loaded (/etc/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2019-11-30 09:52:05 EAT; 9s ago Process: 2679 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) Process: 2678 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) Process: 2676 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS) Main PID: 2681 (nginx) Tasks: 2 (limit: 11524) Memory: 3.5M CGroup: /system.slice/nginx.service ├─2681 nginx: master process /usr/sbin/nginx └─2682 nginx: worker process...
Nyalakan Mesin Aturan ModSecurity
Secara default, ModSecurity diatur pada mode hanya deteksi di mana ia hanya mencatat permintaan berdasarkan aturan yang dipicu tanpa memblokir apa pun. Ini dapat diubah dengan mengatur nilai SecRuleEngine ke On.
sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /usr/local/nginx/conf/modsecurity.conf
Anda juga dapat mengubah direktori log default untuk Modsecurity
sed -i 's#/var/log/modsec_audit.log#/var/log/nginx/modsec_audit.log#' /usr/local/nginx/conf/modsecurity.conf
Instal OWASP ModSecurity Core Rule Set (CRS)
Itu OWASP ModSecurity Core Rule Set (CRS) adalah seperangkat aturan deteksi serangan umum untuk digunakan dengan ModSecurity. Ini bertujuan untuk melindungi aplikasi web dari berbagai serangan, termasuk Sepuluh Teratas OWASP, minimum peringatan palsu.
Kloning CRS dari repositori GitHub ke /usr/local/nginx/conf/ seperti yang ditunjukkan di bawah ini;
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/local/nginx/conf/owasp-crs
Selanjutnya ganti nama crs-setup.conf.example menjadi crs-setup.conf.
sudo cp /usr/local/nginx/conf/owasp-crs/crs-setup.conf{.example,}
Setelah aturan OWASP diterapkan, konfigurasikan ModSecurity untuk menggunakan aturan ini. Oleh karena itu, Anda perlu memasukkan baris berikut pada file konfigurasi ModSecurity untuk memberi tahu di mana menemukan aturannya.
echo -e "Include owasp-crs/crs-setup.confnInclude owasp-crs/rules/*.conf" >> /usr/local/nginx/conf/modsecurity.conf
Perintah ini akan menambahkan baris di bawah ini pada /usr/local/nginx/conf/modsecurity.conf.
Include owasp-crs/crs-setup.conf Include owasp-crs/rules/*.conf
Verifikasi file konfigurasi Nginx lagi.
nginx -t
Selanjutnya, restart Nginx jika semuanya Oke.
systemctl restart nginx
Menguji ModSecurity di Nginx
Selanjutnya, Anda dapat menguji efektivitas Modsecurity dengan aturan OWASP, misalnya menggunakan injeksi perintah. Jalankan perintah di bawah ini;
curl localhost/index.html?exec=/bin/bash
Anda harus mendapatkan 403 Forbidden jika aturan adalah file.
<html> <head><title>403 Forbidden</title></head> <body> <center><h1>403 Forbidden</h1></center> <hr><center>nginx/1.17.6</center> </body> </html>
Periksa file log.
tail /var/log/nginx/mod
ModSecurity: Warning. Matched "Operator `PmFromFile' with parameter `unix-shell.data' against variable `ARGS:exec' (Value: `/bin/bash' ) [file "/usr/local/nginx/conf/owasp-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf"] [line "496"] [id "932160"] [rev ""] [msg "Remote Command Execution: Unix Shell Code Found"] [data "Matched Data: bin/bash found within ARGS:exec: /bin/bash"] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-shell"] [tag "platform-unix"] [tag "attack-rce"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "OWASP_CRS/WEB_ATTACK/COMMAND_INJECTION"] [tag "WASCTC/WASC-31"] [tag "OWASP_TOP_10/A1"] [tag "PCI/6.5.2"] [hostname "127.0.0.1"] [uri "/index.html"] [unique_id "157509875732.654695"] [ref "o1,8v21,9t:urlDecodeUni,t:cmdLine,t:normalizePath,t:lowercase"] ModSecurity: Access denied with code 403 (phase 2). Matched "Operator `Ge' with parameter `5' against variable `TX:ANOMALY_SCORE' (Value: `5' ) [file "/usr/local/nginx/conf/owasp-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf"] [line "79"] [id "949110"] [rev ""] [msg "Inbound Anomaly Score Exceeded (Total Score: 5)"] [data ""] [severity "2"] [ver ""] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic"] [hostname "127.0.0.1"] [uri "/index.html"] [unique_id "157509875732.654695"] [ref ""] ModSecurity: Warning. Matched "Operator `Ge' with parameter `5' against variable `TX:INBOUND_ANOMALY_SCORE' (Value: `5' ) [file "/usr/local/nginx/conf/owasp-crs/rules/RESPONSE-980-CORRELATION.conf"] [line "76"] [id "980130"] [rev ""] [msg "Inbound Anomaly Score Exceeded (Total Inbound Score: 5 - SQLI=0,XSS=0,RFI=0,LFI=0,RCE=5,PHPI=0,HTTP=0,SESS=0): individual paranoia level scores: 5, 0, 0, 0"] [data ""] [severity "0"] [ver ""] [maturity "0"] [accuracy "0"] [tag "event-correlation"] [hostname "127.0.0.1"] [uri "/index.html"] [unique_id "157509875732.654695"] [ref ""]
Anda juga dapat membuat aturan pengujian sendiri. Misalnya, tambahkan baris di bawah ini pada file /usr/local/nginx/conf/modsecurity.conf.
SecRule ARGS "@streq test" "id:1,phase:1,deny,msg:'Mytest Rule'"
Simpan file konfigurasi. Anda juga dapat membuat file aturan khusus dan memastikannya disertakan pada file konfigurasi ModSecurity utama.
Mulai ulang Nginx.
systemctl restart nginx
Uji aturannya.
curl localhost/index.html?a=test
<html> <head><title>403 Forbidden</title></head> <body> <center><h1>403 Forbidden</h1></center> <hr><center>nginx/1.17.6</center> </body> </html>
Periksa file log.
ModSecurity: Access denied with code 403 (phase 1). Matched "Operator `StrEq' with parameter `test' against variable `ARGS:a' (Value: `test' ) [file "/usr/local/nginx/conf/modsecurity.conf"] [line "254"] [id "1"] [rev ""] [msg "'Mytest Rule'"] [data ""] [severity "0"] [ver ""] [maturity "0"] [accuracy "0"] [hostname "127.0.0.1"] [uri "/index.html"] [unique_id "157509886780.823503"] [ref "v18,4"]
ModSecurity sekarang menjalankan dan melindungi server web Anda. Itu menandai akhir dari tutorial kami tentang cara mengkonfigurasi LibModsecurity dengan Nginx di CentOS 8.
Jika Anda ingin menjalankan aplikasi web tertentu yang memerlukan LAMP stack/LEMP stack, Anda dapat mengikuti tautan di bawah ini untuk menyiapkan LEMP/LAMP stack di CentOS 8.
Instal LEMP Stack di CentOS 8
Instal LAMP Stack di CentOS 8
Anda dapat memeriksa panduan kami yang lain tentang ModSecurity dengan mengikuti tautan di bawah ini;
Instal LibModsecurity dengan Apache di Ubuntu 18.04
Instal LibModsecurity dengan Apache di Fedora 30/29/CentOS 7