Nginx:Install ModSecurity: Difference between revisions

Created page with "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 depende..."
 
No edit summary
 
(30 intermediate revisions by the same user not shown)
Line 3: Line 3:
Konektor ModSecurity-nginx berbentuk modul Nginx yang menyediakan lapisan komunikasi antara Nginx dan ModSecurity.
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:
Instal semua dependensi yang diperlukan untuk proses build dan kompilasi dengan perintah berikut:<syntaxhighlight lang="shell">
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
</syntaxhighlight>di Debian 11<ref>[https://www.tecmint.com/install-modsecurity-nginx-debian-ubuntu/ tecmint.com] - How to Install ModSecurity for Nginx on Debian/Ubuntu</ref><syntaxhighlight lang="bash">
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
</syntaxhighlight>
*Install GIT
<syntaxhighlight lang="shell">
apt install git
</syntaxhighlight><syntaxhighlight lang="shell">
apt install gnutls-bin
</syntaxhighlight>
*Sebelum melakukan clone, pindah directory utama ke <code>/opt</code>
<syntaxhighlight lang="shell">
cd /opt
</syntaxhighlight>
*Clone ModSecurity dari repository Github
<syntaxhighlight lang="shell">
sudo git clone https://github.com/SpiderLabs/ModSecurity
</syntaxhighlight>
*Masuk ke directory ModSecurity
<syntaxhighlight lang="shell">
cd ModSecurity
</syntaxhighlight>
*Jalankan perintah git berikut untuk menginisialisasi dan memperbarui submodul:
<syntaxhighlight lang="shell">
sudo git submodule init
</syntaxhighlight><syntaxhighlight lang="shell">
sudo git submodule update
</syntaxhighlight>
*Jalankan script <code>build.sh</code>
<syntaxhighlight lang="shell">
sudo ./build.sh
</syntaxhighlight>
*Jalankan file <code>configure</code>, yang bertanggung jawab untuk mendapatkan semua dependensi untuk proses pembuatan:
<syntaxhighlight lang="shell">
sudo ./configure
</syntaxhighlight>
*Jalankan perintah make untuk mem-''build'' ModSecurity (tunggu 10 s/d 15 menit)
<syntaxhighlight lang="shell">
sudo make
</syntaxhighlight>
*Setelah proses build selesai, instal ModSecurity dengan menjalankan perintah berikut:
<syntaxhighlight lang="shell">
sudo make install
</syntaxhighlight>
 
==Download ModSecurity Connector==
*Pindah directory ke <code>/opt</code>
<syntaxhighlight lang="shell">
cd /opt
</syntaxhighlight>
*Clone repository
<syntaxhighlight lang="shell">
sudo git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
</syntaxhighlight>
 
==Build ModSecurity module untuk Nginx==
*Periksa versi [[Nginx]]
<syntaxhighlight lang="shell">
nginx -v
</syntaxhighlight>
*'''Output'''
<syntaxhighlight lang="shell">
nginx version: nginx/1.18.0 (Ubuntu)
</syntaxhighlight>
*Download versi [[Nginx]] yang berjalan pada system ke directory <code>/opt</code>
<syntaxhighlight lang="shell">
cd /opt
</syntaxhighlight><syntaxhighlight lang="shell">
sudo wget http://nginx.org/download/nginx-1.18.0.tar.gz
</syntaxhighlight>
*Extract the tarball:
<syntaxhighlight lang="shell">
sudo tar -xvzf nginx-1.18.0.tar.gz
</syntaxhighlight>
*Ganti directory ke <code>/nginx-1.18.0</code>
<syntaxhighlight lang="shell">
cd nginx-1.18.0
</syntaxhighlight>
*Tampilkan argumen konfigurasi yang digunakan untuk versi Nginx Anda:
<syntaxhighlight lang="shell">
nginx -V
</syntaxhighlight>
*'''Output Sample'''
nginx version: nginx/1.18.0 (Ubuntu)
built with OpenSSL 1.1.1f  31 Mar 2020
TLS SNI support enabled
configure arguments: <span style="color:#ff0000">--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</span>
 
*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 <span style="color:#ff0000">paste disini mulai dari berwarna merah</span>
 
atau<syntaxhighlight lang="shell">
./configure --with-compat --add-dynamic-module=../ModSecurity-nginx
</syntaxhighlight>
*Build modul dengan perintah berikut:
<syntaxhighlight lang="shell">
sudo make modules
</syntaxhighlight>
*Buat direktori untuk modul Modsecurity di folder konfigurasi Nginx sistem Anda:
<syntaxhighlight lang="shell">
sudo mkdir /etc/nginx/modules
</syntaxhighlight>
*Salin modul Modsecurity yang di compile ke dalam folder konfigurasi Nginx Anda:
<syntaxhighlight lang="shell">
sudo cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules
</syntaxhighlight>
 
==Memuat Modul ModSecurity di Nginx==
*Buka konfigurasi [[Nginx]] pada directory <code>/etc/nginx/nginx.conf</code>
<syntaxhighlight lang="shell">
vim /etc/nginx/nginx.conf
</syntaxhighlight>
*Tambahkan code berikut
 
<syntaxhighlight lang="nginx">
load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;
</syntaxhighlight>
 
*'''Sample'''                         
 
<syntaxhighlight lang="nginx" line="1">
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;
</syntaxhighlight>
 
==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:
 
<syntaxhighlight lang="shell">
sudo rm -rf /usr/share/modsecurity-crs
</syntaxhighlight>
 
*Clone repository ke directory <code>/usr/local/modsecurity-crs</code>
 
<syntaxhighlight lang="shell">
sudo git clone https://github.com/coreruleset/coreruleset /usr/local/modsecurity-crs
</syntaxhighlight>
 
*Rename the <code>crs-setup.conf.example</code> ke <code>crs-setup.conf</code>:
 
<syntaxhighlight lang="shell">
sudo mv /usr/local/modsecurity-crs/crs-setup.conf.example /usr/local/modsecurity-crs/crs-setup.conf
</syntaxhighlight>
 
*Ganti nama file aturan pengecualian permintaan default:
<syntaxhighlight lang="shell">
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
</syntaxhighlight>
 
Sekarang harus menyiapkan OWASP-CRS dan siap digunakan dalam konfigurasi [[Nginx]].
 
==Konfigurasi ModSecurity==
*Mulailah dengan membuat direktori ModSecurity di direktori <code>/etc/nginx/</code>:
 
<syntaxhighlight lang="shell">
sudo mkdir -p /etc/nginx/modsec
</syntaxhighlight>
 
*Salin file pemetaan unicode dan file konfigurasi ModSecurity dari repository GitHub ModSecurity cloning kalian:
 
<syntaxhighlight lang="shell">
sudo cp /opt/ModSecurity/unicode.mapping /etc/nginx/modsec
</syntaxhighlight>
 
<syntaxhighlight lang="shell">
sudo cp /opt/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf
</syntaxhighlight>
 
*Hapus ekstensi <code>.recommended</code> dari nama file konfigurasi ModSecurity dengan perintah berikut:
 
<syntaxhighlight lang="shell">
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
</syntaxhighlight>
 
*Dengan editor teks seperti vim atau nano, buka <code>/etc/modsecurity/modsecurity.conf</code> dan ubah nilai untuk <code>SecRuleEngine</code> menjadi <code>On</code>:
 
<syntaxhighlight lang="shell" line="1">
# -- 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
</syntaxhighlight>
 
*Buat file konfigurasi baru bernama <code>main.conf</code> di direktori <code>/etc/nginx/modsec</code>:
 
<syntaxhighlight lang="shell">
vim /etc/nginx/modsec/main.conf
</syntaxhighlight>


sudo apt-get install bison build-essential ca-certificates curl dh-autoreconf doxygen \
*Copy code berikut
  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 libgd-dev


*Install GIT
<syntaxhighlight lang="shell" line="1">
apt install git
Include /etc/nginx/modsec/modsecurity.conf
Include /usr/local/modsecurity-crs/crs-setup.conf
Include /usr/local/modsecurity-crs/rules/*.conf
</syntaxhighlight>
 
==Konfigurasi pada Nginx==
*Buka konfigurasi Nginx kalian biasanya pada directory /etc/nginx/sites-enabled, dengan menambahkan
 
<syntaxhighlight lang="shell">
vim /etc/nginx/sites-enabled/default.conf
</syntaxhighlight>
 
atau
 
<syntaxhighlight lang="shell">
vim /etc/nginx/conf.d/default.conf
</syntaxhighlight>
 
*Lalu tambahkan code berikut
 
<syntaxhighlight lang="nginx" line="1">
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
</syntaxhighlight>
 
{{Note|Jika mengikuti tutorial dari awal, konfigurasi default.conf berada di dorectory /etc/nginx/conf.d}}
 
 
*'''Sample'''


*Sebelum melakukan clone, pindah directory utama ke <code>/opt</code>
<syntaxhighlight lang="nginx" line="1">
cd /opt
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;
</syntaxhighlight>


*Clone ModSecurity dari repository Github
==Source==
sudo git clone https://github.com/SpiderLabs/ModSecurity
<references />
*[https://www.linode.com/docs/guides/securing-nginx-with-modsecurity/ linode.com]
*[https://www.nginx.com/blog/compiling-and-installing-modsecurity-for-open-source-nginx/ nginx.com]
*[https://github.com/SpiderLabs/ModSecurity-nginx/issues/117 github.com]


*Masuk ke directory ModSecurity
[[Category:Security]]
cd ModSecurity
[[Category:Server]]
[[Category:Nginx]]
[[Category:ModSecurity]]