Chào Mọi Người.
Hôm nay mình sẽ hướng dẫn mọi người cài đặt NAXSI Lên Nginx sử dụng hệ điều hành Ubuntu 20.04.
Contents
Giới Thiệu.
NAXSI là viết tắt của Nginx Anti XSS and SQL injection. NAXSI là một module web application firewall (WAF), opensource với hiệu năng cao của Nginx.
NAXSI hoạt động chủ yếu dựa vào việc phân tích tìm kiếm các ký tự đặc biệt hay không mong muốn trong các HTTP GET và POST request.
NAXSI trên Nginx có chức năng tương tự với Modsecurity trên Apache.
Cài Đặt.
Cài Đặt Nginx với NAXSI.
Để cài đặt thì bước đầu tiên sẽ cần cài đặt các gói cần thiết :
apt install libpcre3-dev libssl-dev unzip build-essential daemon libxml2-dev libxslt1-dev libgd-dev libgeoip-dev
Tiếp theo sẽ tiến hành cài đặt NAXSI, tuy nhiên vì NAXSI là module của bên thứ 3 cho nên khi cài đặt Nginx theo thông thường sẽ không có NAXSI.
Vì vậy sẽ cần download Nginx và NAXSI source và compile Nginx với NASXI.
Ở đây mình giả sử là đã được cài đặt Nginx trên Ubuntu và mình sẽ build dựa theo Nginx đã được cài đặt.
Đầu tiên, là cần kiểm tra phiên bản Nginx đang được cài đặt trên hệ điều hành.
nginx -v
Kết quả sẽ được như hình sau :
Tiếp theo truy cập vào trang chủ download của Nginx để download đúng phiên bản Nginx source về:
wget https://nginx.org/download/nginx-1.18.0.tar.gz
Mọi người có thể lấy link download đúng phiên bản tại đây. Sau đó tiến hành download NASXI source về:
wget https://github.com/nbs-system/naxsi/archive/master.zip
Tiến hành giải nén Nginx cũng như NASXI :
tar -zxvf nginx-1.18.0.tar.gz && unzip master.zip
Kiểm tra Nginx được build với những module nào để tiến hành build lại Nginx với những module đó.
nginx -V
Kết quả sẽ như sau :
–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_gunzip_module –with-http_gzip_static_module –with-http_image_filter_module=dynamic –with-http_sub_module –with-http_xslt_module=dynamic –with-stream=dynamic –with-stream_ssl_module –with-mail=dynamic –with-mail_ssl_module
Sau khi đã biết Nginx được build với những module nào, mình sẽ stop Nginx và tiến hành build Nginx :
systemctl stop nginx
cd nginx-1.18.0/
Mọi người sẽ cần thêm “–add-module=/root/naxsi-master/naxsi_src/ –sbin-path=/usr/sbin/nginx” để Nginx sẽ được compile với NASXI.
./configure –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_gunzip_module –with-http_gzip_static_module –with-http_image_filter_module=dynamic –with-http_sub_module –with-http_xslt_module=dynamic –with-stream=dynamic –with-stream_ssl_module –with-mail=dynamic –with-mail_ssl_module –add-module=/root/naxsi-master/naxsi_src/ –sbin-path=/usr/sbin/nginx
Kết quả sẽ như sau :
Cuối cùng tiến hành build Nginx
make && make install
Sau khi compile hoàn tất kiểm tra lại Nginx cũng như khởi động :
Cấu Hình Nginx NAXSI.
Đầu tiên mình sẽ copy file core của NAXSI vào thư mục chứa Nginx.
cp /root/naxsi-master/naxsi_config/naxsi_core.rules /etc/nginx/
Tiếp theo mình tạo file cấu hình của NAXSI.
vi /etc/nginx/naxsi.rules
Với nội dung như sau :
SecRulesEnabled;
DeniedUrl “/block.html”;Check Naxsi rules
CheckRule “$SQL >= 8” BLOCK;
CheckRule “$RFI >= 8” BLOCK;
CheckRule “$TRAVERSAL >= 4” BLOCK;
CheckRule “$EVADE >= 4” BLOCK;
CheckRule “$XSS >= 8” BLOCK;
Giải thích :
- SecRulesEnabled : Bật NASXI Rules. Lưu ý : mọi người có thể set “LearningMode” để NASXI vào chế độ learning tự động tạo whitelist cho các traffic sạch, ở chế độ “LearningMode” thì NASXI sẽ không chặn bất cứ truy cập nào.
- DeniedUrl : Đường link mà NASXI sẽ redirect truy cập tới khi truy cập bị block.
- CheckRule : NASXI sẽ dựa vào các Rule được khai báo mà tiến hành các hành động cần thiết như BLOCK, DROP, LOG, ALLOW.
Tạo file block.html với nội dung tùy thích.
vi /var/www/html/block.html
<html>
<head><title>Blocked By NAXSI</title></head>
<body bgcolor=”white”>
<center><h1>Malicious Request</h1></center>
<hr><center>This Request Has been Blocked By NAXSI</center>
</body>
</html>
Tiếp theo thêm NAXSI vào file config của Nginx.
Cụ thể trong file “/etc/nginx/nginx.conf” tại bên dưới HTTP block the sẽ thêm dòng sau :
include /etc/nginx/naxsi_core.rules;
Tiếp theo trong file vhost ta sẽ thêm dòng sau vào location cần bảo vệ :
include /etc/nginx/naxsi.rules;
Khởi động lại Nginx để các cấu hình được áp dụng:
systemctl restart nginx
Kiểm Tra Hoạt Động Của NASXI.
Để kiểm tra hoạt động của NASXI thì ta sẽ test trên một VPS/Server khác kết nối tới VPS/Server được cài đặt NASXI.
Đầu tiên test thử SQL Injection.
curl 'http://<INSTACE_IP>/?q=1" or "1"="1"'
Nếu các bạn cấu hình đúng thì sẽ nhận được phản hồi với nội dung là file block.html chúng ta đã tạo khi nãy.
Tương tự khi ta thử tiến hành XSS attack:
curl 'http://<INSTACE_IP>/?q="><script>alert(0)</script>'
LFi attack :
curl 'http://103.97.125.161/test.php?search=cat /etc/passwd'
Kiểm tra file log error của Nginx sẽ ghi nhận việc chặn.
Lời Cuối
Như vậy bài viết hướng dẫn cài đặt Nginx với NAXSI trên Ubuntu 20.04 của mình tới đây là hết.
Cảm ơn mọi người đã bỏ thời gian theo dõi. Mọi người có thể tìm hiều thêm về NAXSI tại đây.