Nginx:Install ModSecurity
Meskipun ModSecurity tidak secara resmi didukung sebagai modul untuk Nginx, ada solusi yang melibatkan konektor ModSecurity-nginx. Konektor ModSecurity-nginx adalah titik koneksi antara Nginx dan libmodsecurity (ModSecurity v3). Dengan kata lain, konektor ModSecurity-nginx menyediakan saluran komunikasi antara Nginx dan libmodsecurity.
Konektor ModSecurity-nginx berbentuk modul Nginx yang menyediakan lapisan komunikasi antara Nginx dan ModSecurity.
Instal semua dependensi yang diperlukan untuk proses build dan kompilasi dengan perintah berikut:
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
di Debian 11<ref>tecmint.com - How to Install ModSecurity for Nginx on Debian/Ubuntu</ref>
sudo apt install make gcc build-essential autoconf automake libtool libfuzzy-dev ssdeep gettext pkg-config libcurl4-openssl-dev liblua5.3-dev libpcre3 libpcre3-dev libxml2 libxml2-dev libyajl-dev doxygen libcurl4 libgeoip-dev libssl-dev zlib1g-dev libxslt-dev liblmdb-dev libpcre++-dev libgd-dev
- Install GIT
apt install git
apt install gnutls-bin
- Sebelum melakukan clone, pindah directory utama ke
/opt
cd /opt
- Clone ModSecurity dari repository Github
sudo git clone https://github.com/SpiderLabs/ModSecurity
- Masuk ke directory ModSecurity
cd ModSecurity
- Jalankan perintah git berikut untuk menginisialisasi dan memperbarui submodul:
sudo git submodule init
sudo git submodule update
- Jalankan script
build.sh
sudo ./build.sh
- Jalankan file
configure, yang bertanggung jawab untuk mendapatkan semua dependensi untuk proses pembuatan:
sudo ./configure
- Jalankan perintah make untuk mem-build ModSecurity (tunggu 10 s/d 15 menit)
sudo make
- Setelah proses build selesai, instal ModSecurity dengan menjalankan perintah berikut:
sudo make install
Download ModSecurity Connector
- Pindah directory ke
/opt
cd /opt
- Clone repository
sudo git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
Build ModSecurity module untuk Nginx
- Periksa versi Nginx
nginx -v
- Output
nginx version: nginx/1.18.0 (Ubuntu)
- Download versi Nginx yang berjalan pada system ke directory
/opt
cd /opt
sudo wget http://nginx.org/download/nginx-1.18.0.tar.gz
- Extract the tarball:
sudo tar -xvzf nginx-1.18.0.tar.gz
- Ganti directory ke
/nginx-1.18.0
cd nginx-1.18.0
- Tampilkan argumen konfigurasi yang digunakan untuk versi Nginx Anda:
nginx -V
- Output Sample
nginx version: nginx/1.18.0 (Ubuntu)
built with OpenSSL 1.1.1f 31 Mar 2020
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-KTLRnK/nginx-1.18.0=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_flv_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_secure_link_module --with-http_sub_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --add-dynamic-module=/build/nginx-KTLRnK/nginx-1.18.0/debian/modules/http-headers-more-filter --add-dynamic-module=/build/nginx-KTLRnK/nginx-1.18.0/debian/modules/http-auth-pam --add-dynamic-module=/build/nginx-KTLRnK/nginx-1.18.0/debian/modules/http-cache-purge --add-dynamic-module=/build/nginx-KTLRnK/nginx-1.18.0/debian/modules/http-dav-ext --add-dynamic-module=/build/nginx-KTLRnK/nginx-1.18.0/debian/modules/http-ndk --add-dynamic-module=/build/nginx-KTLRnK/nginx-1.18.0/debian/modules/http-echo --add-dynamic-module=/build/nginx-KTLRnK/nginx-1.18.0/debian/modules/http-fancyindex --add-dynamic-module=/build/nginx-KTLRnK/nginx-1.18.0/debian/modules/nchan --add-dynamic-module=/build/nginx-KTLRnK/nginx-1.18.0/debian/modules/http-lua --add-dynamic-module=/build/nginx-KTLRnK/nginx-1.18.0/debian/modules/rtmp --add-dynamic-module=/build/nginx-KTLRnK/nginx-1.18.0/debian/modules/http-uploadprogress --add-dynamic-module=/build/nginx-KTLRnK/nginx-1.18.0/debian/modules/http-upstream-fair --add-dynamic-module=/build/nginx-KTLRnK/nginx-1.18.0/debian/modules/http-subs-filter --add-dynamic-module=/build/nginx-KTLRnK/nginx-1.18.0/debian/modules/http-geoip2
- Untuk mengkompilasi modul Modsecurity, salin semua argumen berikut argumen konfigurasikan: dari output Anda dari perintah di atas dan tempel di tempat di perintah berikut:
sudo ./configure --add-dynamic-module=../ModSecurity-nginx paste disini mulai dari berwarna merah
atau
./configure --with-compat --add-dynamic-module=../ModSecurity-nginx
- Build modul dengan perintah berikut:
sudo make modules
- Buat direktori untuk modul Modsecurity di folder konfigurasi Nginx sistem Anda:
sudo mkdir /etc/nginx/modules
- Salin modul Modsecurity yang di compile ke dalam folder konfigurasi Nginx Anda:
sudo cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules
Memuat Modul ModSecurity di Nginx
- Buka konfigurasi Nginx pada directory
/etc/nginx/nginx.conf
vim /etc/nginx/nginx.conf
- Tambahkan code berikut
load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;
- Sample
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;
Setting Up OWASP-CRS
OWASP ModSecurity Core Rule Set (CRS) adalah seperangkat aturan deteksi serangan umum untuk digunakan dengan ModSecurity atau firewall aplikasi web yang kompatibel. CRS bertujuan untuk melindungi aplikasi web dari berbagai serangan, termasuk Sepuluh Teratas OWASP, dengan peringatan palsu yang minimal. CRS memberikan perlindungan terhadap banyak kategori serangan umum, termasuk SQL Injection, Cross Site Scripting, dan Local File Inclusion.
- Pertama, hapus kumpulan aturan saat ini bawaan sebelumnya dengan ModSecurity, menggunakan perintah berikut:
sudo rm -rf /usr/share/modsecurity-crs
- Clone repository ke directory
/usr/local/modsecurity-crs
sudo git clone https://github.com/coreruleset/coreruleset /usr/local/modsecurity-crs
- Rename the
crs-setup.conf.examplekecrs-setup.conf:
sudo mv /usr/local/modsecurity-crs/crs-setup.conf.example /usr/local/modsecurity-crs/crs-setup.conf
- Ganti nama file aturan pengecualian permintaan default:
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
Sekarang harus menyiapkan OWASP-CRS dan siap digunakan dalam konfigurasi Nginx.
Konfigurasi ModSecurity
- Mulailah dengan membuat direktori ModSecurity di direktori
/etc/nginx/:
sudo mkdir -p /etc/nginx/modsec
- Salin file pemetaan unicode dan file konfigurasi ModSecurity dari repository GitHub ModSecurity cloning kalian:
sudo cp /opt/ModSecurity/unicode.mapping /etc/nginx/modsec
sudo cp /opt/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf
- Hapus ekstensi
.recommendeddari nama file konfigurasi ModSecurity dengan perintah berikut:
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
- Dengan editor teks seperti vim atau nano, buka
/etc/modsecurity/modsecurity.confdan ubah nilai untukSecRuleEnginemenjadiOn:
# -- Rule engine initialization ----------------------------------------------
# Enable ModSecurity, attaching it to every transaction. Use detection
# only to start with, because that minimises the chances of post-installation
# disruption.
#
SecRuleEngine On
- Buat file konfigurasi baru bernama
main.confdi direktori/etc/nginx/modsec:
vim /etc/nginx/modsec/main.conf
- Copy code berikut
Include /etc/nginx/modsec/modsecurity.conf
Include /usr/local/modsecurity-crs/crs-setup.conf
Include /usr/local/modsecurity-crs/rules/*.conf
Konfigurasi pada Nginx
- Buka konfigurasi Nginx kalian biasanya pada directory /etc/nginx/sites-enabled, dengan menambahkan
vim /etc/nginx/sites-enabled/default.conf
atau
vim /etc/nginx/conf.d/default.conf
- Lalu tambahkan code berikut
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
| Note: | Jika mengikuti tutorial dari awal, konfigurasi default.conf berada di dorectory /etc/nginx/conf.d |
- Sample
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html/;
index index.php index.html index.htm index.nginx-debian.html;
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
Source
<references />