Chào Mọi Người.
Hôm nay mình sẽ hướng dẫn mọi người cài đặt ModSecurity Lên Nginx sử dụng hệ điều hành Ubuntu 20.04.
Contents
Giới Thiệu.
Modsecurity là phần mềm Web Application Firewall ( WAF ) opensource nổi tiếng nhất, cung cấp khả năng chống lại các cuộc tấn công Layer 7 như SQL Injection, LFI, XSS,… dựa trên HTTP request và response khác với các Firewall khác như Iptables, UFW, Firewalld,.. hoạt động chủ yếu trên Layer 3, 4, Modsecurity cho phép theo dõi lưu lượng HTTP, ghi log và phân tích realtime….
Modsecurity hỗ trợ nhiều webserver như Nginx, Apache, IIS. Trong bài viết này thì mình sẽ hướng dẫn cài đặt Modsecurity trên Nginx.
Cài Đặt.
Cài Đặt ModSecurity.
Để cài đặt thì bước đầu tiên sẽ cần cài đặt các gói cần thiết :
apt-get install -y apt-utils autoconf automake build-essential git libcurl4-openssl-dev libgeoip-dev liblmdb-dev libpcre++-dev libtool libxml2-dev libyajl-dev pkgconf wget zlib1g-dev
Tiếp theo sẽ tiến hành cài đặt ModSecurity, tuy nhiên vì ModSecurity 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ó ModSecurity.
Tiến hành download ModSecurity source về:
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
Tiến hành biên dịch và cài đặt ModSecurity:
cd ModSecurity
git submodule init
git submodule update
./build.sh
Ở bước này mọi người có thể thể thấy lỗi “fatal: No names found, cannot describe anything” như hình dưới đây, nhưng mọi người có thể cho qua nhé.
./configure
make -j2 && make install
Lưu ý : Mọi người có thể thay -j2 thành -jx với x là số core trên VPS/Server của mọi người để tăng tốc độ biên dịch.
Cài Đặt Module Modsecurity-nginx
Để kết nối được Modsecurity với Nginx thì ta cần module Modsecurity-nginx.
Ở đâ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à download Module Modsecurity-nginx.
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
Tiếp theo 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.
Tiến hành giải nén Nginx :
tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0/
Cấu hình Nginx build module ModSecurity-nginx
./configure --with-compat --add-dynamic-module=/root/ModSecurity-nginx
make module
Sau đó copy module vừa được biên dịch vào thư mục của Nginx.
cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules/modules
Cấu Hình Mod Security trên Nginx.
Ta thêm sẽ dòng sau trong file config của nginx. Dòng cấu hình để giúp Nginx load module Modsecurity.
load_module modules/ngx_http_modsecurity_module.so;
vi /etc/nginx/nginx.conf
Tiếp theo để ModSecurity hoạt động thì ta cần khai báo Rule để phát hiện và chặn tấn công. Đối với người mới bắt đầu như chúng ta thì sẽ dễ dàng nến chúng ta sử dụng OWASP Core Rule Set (CRS). Đây là một bộ quy tắc tiêu chuẩn của Modsecurity.
Đầu tiên download OWASP CRS từ Gitbuh.
wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.2.0.tar.gz
Tiến hành giải nén
tar -zxvf v3.2.0.tar.gz
Tạo thư mục “/etc/nginx/modsec” rồi chuyển thư mục OWSP vừa giải nén vào thư mục modsec.
mv owasp-modsecurity-crs-3.2.0 /etc/nginx/modsec/owasp-modsecurity-crs
Kích hoạt các file cấu hình và Rule của OWSP.
cd /etc/nginx/modsec/owasp-modsecurity-crs
mv crs-setup.conf.example crs-setup.conf
mv rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
Ta cũng cần copy các file cấu hình của Modsecurity vào thư mục “/etc/nginx/modsec”.
cp /root/ModSecurity/unicode.mapping /etc/nginx/modsec/
cp /root/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf
Chỉnh sửa lại file cấu hình của modsecurity.
vi /etc/nginx/modsec/modsecurity.conf
Trong đó ta chỉnh 2 dòng sau:
Từ
SecRuleEngine DetectionOnly
SecAuditLog /var/log/modsec_audit.log
Thành
SecRuleEngine On
SecAuditLog /var/log/nginx/modsec_audit.log
Tạo một file main.conf với nội dung như sau:
vi /etc/nginx/modsec/main.conf
Tới đây, ta đã hoàn tất việc cài đặt, ta chỉ cần chỉnh lại config của vhost để bật modsecurity cho website ta muốn bảo vệ bằng thêm 2 dòng sau vào block server.
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
Kiểm Tra Hoạt Động Của ModSecurity.
Để 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 audit của Nginx ta khai báo khi nãy 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 Modsecurity 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ề Mosecurity tại đây.