LINUXSEC

Cara Install dan Konfigurasi ModSecurity pada Web Server Nginx

Cara Install dan Konfigurasi ModSecurity pada Web Server Nginx - Pada kesempatan kali ini saya akan sharing seputar hardening security. Kali ini kita membahas pemasangan modul ModSecurity pada Web Server Nginx. Sebelumnya apa itu Mod Security?

ModSecurity adalah aplikasi firewall, Open source, yang memberikan perlindungan Halaman Web host di server. Pada dasarnya, ModSecurity (mod_security) monitor si menganalisis Lalu lintas real time HTTP dan memberikan perlindungan bagi serangkaian serangan yang bisa terjadi pada halaman web.

Sementara Nginx (dibaca engine x) adalah server HTTP dan Proxy dengan kode sumber terbuka yang bisa juga berfungsi sebagai proxy IMAP/POP3. Kode sumber nginx ditulis oleh seorang warga negara Rusia yang bernama Igor Sysoev pada tahun 2002 dan dirilis ke publik pada tahun 2004. Nginx terkenal karena stabil, memiliki tingkat performansi tinggi dan minim mengonsumsi sumber daya.

itulah kenapa perusahaan perusahaan besar rama rata memilih nginx daripada Apache. Dan juga, di Apache itu semua modul sudah lengkap, bahkan untuk instalasi mod-security di apache2 tinggal pakai apt-get saja. Namun karena modul yang sudah lengkap ini, apache rakus sekali ke memori, bahkan ada beberapa modul apache yang akhirnya cuma buang buang resource karena tidak dipakai, tapi sudah ikut terinstall.

Sementara di Nginx, semua harus serba di konfigurasi. Dan mungkin buat yang baru kenal atau baru belajar webserver dan membandingkan tingkat kesulitan mengelola apache dan nginx, semua akan setuju mengatakan nginx lebih ribet. Saya pun pernah berpendapat demikian. Namun dengan nginx, ibaratnya kita bakal susah di awal (karena harus konfigurasi sana sini), tetapi pada akhirnya kita akn puas dengan performa nya yang stabil dan tidak rakus memori.

Oke cukup ya pengenalan dan gambaran tentang webservernya, kali ini masuk ke pembahasan instalasi Mod Security pada Nginx. Untuk memasang mod-security pada Nginx kita harus meng-compile Nginx dari sumbernya, bukan hasil install paket repostrity dengan apt-get atau yum.

Pada tutorial ini saya menggunakan server CentOS 7. Untuk pemakai centOs dan keluarganya silahkan ikuti tutorial ini, dan untuk pengguna Ubuntu saya akan bahas di post selajutnya.

Sebelum memulai, kita buat dulu direktori untuk bahan bahan yang harus disiapkan. Sebenarnya step ini opsional saja ya, cuma biar gak ribet.

mkdir build  
cd /root/build

Oke sudah siap untuk proses install nya.

Pertama, install dependensi dan dev-tool yang diperlukan terlebih dahulu.

yum groupinstall -y "Development Tools"
yum install -y httpd httpd-devel pcre pcre-devel libxml2 libxml2-devel curl curl-devel openssl openssl-devel

Karena beberapa ketidakstabilan yang dilaporkan pada ModSecurity untuk Nginx master branch, untuk saat ini, secara resmi disarankan untuk menggunakan versi terbaru dari cabang nginx_refactoring bila memungkinkan.

git clone -b nginx_refactoring https://github.com/SpiderLabs/ModSecurity.git
cd ModSecurity
sed -i '/AC_PROG_CC/a\AM_PROG_CC_C_O' configure.ac
sed -i '1 i\AUTOMAKE_OPTIONS = subdir-objects' Makefile.am

Kedua perintah sed diatas untuk mengedit file configure.ac dan Makefile.am untuk menghindari pesan warning jika menggunakan automake versi terbaru.

Oke lanjut :

./autogen.sh
./configure --enable-standalone-module --disable-mlogc
make

Sampai disini persiapan untuk mod-security sudah oke. Sekarang ke Nginx nya.
kalian bisa cek rilisan Nginx disini :
Nginx Download Page
Saat tulisan ini dibuat, nginx versi stabil terbaru adalah versi 1.13.1 .
Sekarang kita download source nya, dan ingat, posisi kita masih di direktori build.

wget https://nginx.org/download/nginx-1.13.1.tar.gz
gunzip -c nginx-1.13.1.tar.gz | tar xvf -
cd  nginx-1.13.1

Oke sebenernya yang ini opsional juga, tapi ya, sekalian kita compile dari awal, dan bebas ngedit ngedit dulu, kenapa gak sekalian dibikin vanity server name nya.

Maksudnya gimana ? Kalian pas cek whois server, pasti ada kan informasi server yang digunakan. Seperti “Server : Apache2”, “Server : Nginx”, atau “Server: nginx-cloudflare” . nah kita ubah informasi server tersebut. Bisa? Bisa dong pastinya. 😀

Di direktori source nginx edit file http_header_filter_module

nano src/http/ngx_http_header_filter_module.c

Lalu cari baris berikut :

static char ngx_http_server_string[] = "Server: nginx" CRLF;  
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

Ubah menjadi :

static char ngx_http_server_string[] = "Server: NekoPoi" CRLF;  
static char ngx_http_server_full_string[] = "Server: NekoPoi" CRLF;

bebas diedit. Silahkan sesusaikan sendiri ya.
Sip, sekarang lanjut ke compile Nginx dengan tambahan modul mod-security.

./configure --user=nginx --group=nginx --add-module=/root/build/ModSecurity/nginx/modsecurity
make
make install

Karena kita tadi set compile nginx agar menggunakan user nginx dan grup nginx, kita buat juga akun nya. Tidak perlu diberi akses login, dan memang sebaiknya jangan diberi akses login.

groupadd -r nginx
useradd -r -g nginx -s /sbin/nologin -M nginx
sed -i "s/#user  nobody;/user nginx nginx;/" /usr/local/nginx/conf/nginx.conf

Berikut lokasi dari semua file konfigurasi nginx yang terinstall.

nginx path prefix: “/usr/local/nginx”
nginx binary file: “/usr/local/nginx/sbin/nginx”
nginx modules path: “/usr/local/nginx/modules”
nginx configuration prefix: “/usr/local/nginx/conf”
nginx configuration file: “/usr/local/nginx/conf/nginx.conf”
nginx pid file: “/usr/local/nginx/logs/nginx.pid”
nginx error log file: “/usr/local/nginx/logs/error.log”
nginx http access log file: “/usr/local/nginx/logs/access.log”
nginx http client request body temporary files: “client_body_temp”
nginx http proxy temporary files: “proxy_temp”
nginx http fastcgi temporary files: “fastcgi_temp”
nginx http uwsgi temporary files: “uwsgi_temp”
nginx http scgi temporary files: “scgi_temp”

Nah, untuk memudahkan, kita buat symlink ke binary file nginx.

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

Sekarang kalian bisa memanggilnya secara langsung.
Contoh :

nginx -t

Output :

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

Biar lebih nyaman lagi, kita setup juga file systemd nya.

nano /lib/systemd/system/nginx.service

Isinya :

[Service]  
Type=forking  
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf  
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf  
ExecReload=/usr/local/nginx/sbin/nginx -s reload  
KillStop=/usr/local/nginx/sbin/nginx -s stop  
KillMode=process  
Restart=on-failure  
RestartSec=42s  
PrivateTmp=true  
LimitNOFILE=200000  
[Install]  
WantedBy=multi-user.target

Sekarang kalian bisa menjalankan perintah

service nginx restart | start | stop

Sekarang adalah setup Mod Security. Disini saya menggunakan rule yang biasa digunakan dan sudah disediakan yaitu ModSecurity OWASP CRS .

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

Lalu cari kode

location / {

root   html;

index  index.html index.htm;

}

Lalu sisipkan kode berikut sebelum path root dari nginx server nya.

ModSecurityEnabled on;  
ModSecurityConfig modsec_includes.conf;

Sehingga jadinya :

location / {
    ModSecurityEnabled on;
ModSecurityConfig modsec_all.conf;
    root   html;
    index  index.html index.htm;

Oke selanjutnya buat file modsec_allconf .

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

isinya :

include modsecurity.conf  
include owasp-modsecurity-crs/crs-setup.conf  
include owasp-modsecurity-crs/rules/*.conf

Selanjutnya inport konfigurasi mod-security.

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

Kita ubah sedikit file modsecurity.conf nya :

sed -i "s/SecRuleEngine DetectionOnly/SecRuleEngine On/" /usr/local/nginx/conf/modsecurity.conf

Langkah selanjutnya adalah menambahkan rule Modsecurity CRS

cd /usr/local/nginx/conf
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
cd owasp-modsecurity-crs
mv crs-setup.conf.example crs-setup.conf
cd rules
mv REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
mv RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf

Jika sudah oke, restart nginx.
service nginx restart
Lalu coba kita lakukan xss pada server kita menggunakan browser.
http://linuxsec.org/?param=“>
Cek di log nginx nya.

grep xss /usr/local/nginx/logs/error.log

Akan ada notice dari mod-security.

Sebagai tambahan, saya anjurkan juga konfigurasi **HTTP Header Security**nya.

Oke sekian tutorial kali ini, semoga bermanfaat. Jika ada yang kurang jelas silahkan bertanya.

Komentar

    Tinggalkan Komentar

    Silahkan tinggalkan komentar jika ada masukan, pertanyaan, kritik ataupun dukungan. Namun pastikan untuk berkomentar secara sopan.