Instal dan Konfigurasi NAXSI Nginx WAF di Ubuntu 18.04 LTS

Selamat datang di panduan kami tentang cara menginstal dan mengkonfigurasi NAXSI Nginx WAF di Ubuntu 18.04 LTS.

Instal dan Konfigurasi NAXSI Nginx WAF di Ubuntu 18.04 LTS

NAXSI adalah akronim untuk Nginx Anti XSS dan injeksi SQL. Ini adalah modul firewall aplikasi web (WAF) opensource, berkinerja tinggi, dan pemeliharaan aturan rendah untuk NGINX. Tidak seperti WAF lain yang mengandalkan tanda tangan untuk mendeteksi dan mencegah serangan web seperti SQLi, XSS dll, Naxsi bergantung pada karakter tak terduga yang terdapat pada permintaan HTTP GET dan POST. Untuk mencapai ini, ia menggunakan aturan sederhana yang berisi 99% dari pola yang diketahui terlibat dalam kerentanan web.

Instal dan Konfigurasi NAXSI Nginx WAF di Ubuntu 18.04 LTS

Langkah melalui prosedur berikut untuk menginstal dan mengkonfigurasi NAXSI Nginx WAF di Ubuntu 18.04 LTS.

Instal Nginx-Naxsi di Ubuntu 18.04 LTS

Perbarui dan tingkatkan paket sistem Anda;

apt update apt upgrade

Instal dependensi yang diperlukan.

apt install libpcre3-dev libssl-dev unzip build-essential daemon libxml2-dev libxslt1-dev libgd-dev libgeoip-dev

Panduan ini mengasumsikan bahwa ini adalah penerapan Nginx yang benar-benar baru. Karena paket Nginx-Naxsi tidak tersedia di repositori default Ubuntu 18.04, Anda harus mengdownload dan mengkompilasi Nginx dan Naxsi dari sumbernya.

Download sumber Nginx terbaru dari sini. Anda cukup mendapatkan tautan dan menariknya dengan wgetseperti yang ditunjukkan di bawah ini;

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

Buka zip kode sumber;

tar xzf nginx-1.15.8.tar.gz

Download dan unzip naxis.

wget https://github.com/nbs-system/naxsi/archive/master.zip
unzip master.zip

Konfigurasi Nginx untuk dukungan Naxsi

Arahkan ke direktori sumber Nginx dan jalankan configureskrip untuk menyiapkan Nginx untuk kompilasi seperti yang ditunjukkan di bawah ini;

cd nginx-1.15.8
./configure  --conf-path=/etc/nginx/nginx.conf  --add-module=../naxsi-master/naxsi_src/  --error-log-path=/var/log/nginx/error.log  --http-client-body-temp-path=/var/lib/nginx/body  --http-fastcgi-temp-path=/var/lib/nginx/fastcgi  --http-log-path=/var/log/nginx/access.log  --http-proxy-temp-path=/var/lib/nginx/proxy  --lock-path=/var/lock/nginx.lock  --pid-path=/var/run/nginx.pid  --user=www-data  --group=www-data  --with-http_ssl_module  --without-mail_pop3_module  --without-mail_smtp_module  --without-mail_imap_module  --without-http_uwsgi_module  --without-http_scgi_module  --prefix=/usr

Jika semuanya baik-baik saja, Anda seharusnya dapat melihat ringkasan konfigurasi;

... creating objs/Makefile Configuration summary + using system PCRE library + using system OpenSSL library + using system zlib library nginx path prefix: "/usr" nginx binary file: "/usr/sbin/nginx" nginx modules path: "/usr/modules" nginx configuration prefix: "/etc/nginx" nginx configuration file: "/etc/nginx/nginx.conf" nginx pid file: "/var/run/nginx.pid" nginx error log file: "/var/log/nginx/error.log" nginx http access log file: "/var/log/nginx/access.log" nginx http client request body temporary files: "/var/lib/nginx/body" nginx http proxy temporary files: "/var/lib/nginx/proxy" nginx http fastcgi temporary files: "/var/lib/nginx/fastcgi"

Perintah di atas menghasilkan a Makefileyang dapat digunakan untuk mengkompilasi Nginx. Kompilasi dilakukan dengan menggunakan makeperintah.

make

Setelah kompilasi selesai, jalankan skrip instalasi.

make install

Setelah instalasi selesai, buat direktori perpustakaan data dinamis Nginx.

mkdir -p /var/lib/nginx/{body,fastcgi}

Mengonfigurasi Nginx NAXSI

Untuk memulainya, copy aturan inti Naxsi, naxsi_core.ruleske direktori konfigurasi Nginx. Aturan inti adalah apa yang membuat dasar WAF.

cp ~/naxsi-master/naxsi_config/naxsi_core.rules /etc/nginx/

Sekarang aturan sudah ada, Anda harus mengaktifkan aturan ini untuk bertindak berdasarkan lokasi. Anda juga dapat menentukan berbagai jenis serangan yang dapat diblokir oleh Naxsi.

vim /etc/nginx/naxsi.rules
SecRulesEnabled; DeniedUrl "/RequestDenied"; ## Check Naxsi rules CheckRule "$SQL >= 8" BLOCK; CheckRule "$RFI >= 8" BLOCK; CheckRule "$TRAVERSAL >= 4" BLOCK; CheckRule "$EVADE >= 4" BLOCK; CheckRule "$XSS >= 8" BLOCK;
  • SecRulesEnabledmengaktifkan aturan Naxsi di lokasi web tertentu. SecRulesEnableddirektif menonaktifkan ini.
  • Perhatikan bahwa Anda dapat mengatur Naxsi dalam mode pembelajaran menggunakan direktif, LearningMode, di mana ia secara otomatis menghasilkan aturan daftar putih berdasarkan perilaku situs web. Dalam mode ini, Naxsi tidak memblokir serangan apa pun.
  • DeniedUrlmendefinisikan mana Naxsi akan mengarahkan permintaan diblokir.
  • CheckRuledirektif meminta Naxsi untuk bertindak atas permintaan tertentu berdasarkan skor. Tindakan tersebut dapat menjadi ALLOW, BLOCK, LOG, DROP. Tingkat skor adalah antara 0-9 dan diatur oleh aturan khusus.

Selanjutnya, konfigurasikan server Nginx untuk memasukkan aturan-aturan ini sehingga terlihat seperti di bawah ini tanpa komentar.

vim /etc/nginx/nginx.conf
user www-data; worker_processes 1; events { worker_connections 1024; } http { include mime.types;  include /etc/nginx/naxsi_core.rules;  include /etc/nginx/conf.d/*.conf;  include /etc/nginx/sites-enabled/*; default_type application/octet-stream;  access_log /var/log/nginx/access.log;  error_log /var/log/nginx/error.log; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / {  include /etc/nginx/naxsi.rules; root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }

Simpan file dan verifikasi bahwa tidak ada error sintaksis.

nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

Buat Layanan Startup Nginx

Karena Nginx diinstal dari sumbernya, Anda perlu membuat skrip startup-nya. Karenanya buat file unit sistem Nginx seperti yang ditunjukkan di bawah ini;

vim /lib/systemd/system/nginx.service
[Unit] Description=A high performance web server and a reverse proxy server Documentation=man:nginx(8) After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/run/nginx.pid ExecStartPre=/usr/sbin/nginx -t ExecStart=/usr/sbin/nginx ExecReload=/usr/sbin/nginx -s reload ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target

Muat Ulang Konfigurasi Systemd

systemctl daemon-reload

Mulai Nginx

Jalankan perintah di bawah ini untuk memulai nginx.

systemctl start nginx

Anda dapat memeriksa status menggunakan perintah di bawah ini;

systemctl status nginx ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; disabled; vendor preset: enabled) Active: active (running) since Wed 2019-01-23 19:57:22 UTC; 2min 54s ago Docs: man:nginx(8) Process: 28385 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) Process: 28384 ExecStartPre
=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) Main PID: 28386 (nginx) Tasks: 2 (limit: 2325) CGroup: /system.slice/nginx.service ├─28386 nginx: master process /usr/sbin/nginx └─28388 nginx: worker process

Jika Anda melihat garis, nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument, ini solusinya.

mkdir /etc/systemd/system/nginx.service.d printf "[Service]nExecStartPost=/bin/sleep 0.1n" > /etc/systemd/system/nginx.service.d/override.conf systemctl daemon-reload

Uji WAF Nginx-Naxsi

Karena Nginx-Naxsi berhasil diatur, sekarang saatnya untuk memverifikasi bahwa Naxsi benar-benar dapat memblokir percobaan serangan. Mari kita mulai dengan menguji SQLi. Dari server jauh, jalankan, curl ‘http://192.168.43.46/?q=1″ or “1”=”1″‘sambil mengekor log error di server web.

tail -f /var/log/nginx/error.log
2019/01/23 20:17:36 [error] 28470#0: *3 NAXSI_FMT: ip=192.168.43.149&server=192.168.43.46&uri=/&vers=0.56&total_processed=3&total_blocked=3&config=block&cscore0=$SQL&score0=40&cscore1=$XSS&score1=40&zone0=ARGS&id0=1001&var_name0=q, client: 192.168.43.149, server: localhost, request: "GET /?q=1" or "1"="1" HTTP/1.1", host: "192.168.43.46" 2019/01/23 20:17:36 [error] 28470#0: *3 open() "/usr/html/RequestDenied" failed (2: No such file or directory), client: 192.168.43.149, server: localhost, request: "GET /?q=1" or "1"="1" HTTP/1.1", host: "192.168.43.46"

Seperti yang Anda lihat, SQLi diblokir. Selanjutnya, jalankan perintah di bawah ini untuk menguji Cross-Site Scripting (XSS) dengan menjalankan perintah;curl ‘http://192.168.43.46/?q=<script>alert(0);</script>’

tail -f /var/log/nginx/error.log 2019/01/23 20:27:47 [error] 28470#0: *5 NAXSI_FMT: ip=192.168.43.149&server=192.168.43.46&uri=/&vers=0.56&total_processed=5&total_blocked=5&config=block&cscore0=$SQL&score0=4&cscore1=$XSS&score1=8&zone0=ARGS&id0=1008&var_name0=q, client: 192.168.43.149, server: localhost, request: "GET /?q=<script>alert(0);</script> HTTP/1.1", host: "192.168.43.46" 2019/01/23 20:27:47 [error] 28470#0: *5 open() "/usr/html/RequestDenied" failed (2: No such file or directory), client: 192.168.43.149, server: localhost, request: "GET /?q=<script>alert(0);</script> HTTP/1.1", host: "192.168.43.46"

Cantik. Naxsi telah berhasil memblokir percobaan serangan SQLi dan XSS di server web Nginx. Jangan ragu untuk mengeksplorasi lebih banyak tentang NASXI di halaman wiki mereka.

Sejauh ini, kita telah mempelajari cara menginstal dan mengkonfigurasi NAXSI Nginx WAF di Ubuntu 18.04 LTS. Kami berharap ini informatif. Terima kasih telah membaca.