Cài đặt LibModsecurity Web Application Firewall với Nginx trên CentOS 8

theanh

Administrator
Nhân viên
LibModSecurity là tường lửa ứng dụng web miễn phí và mã nguồn mở có thể được sử dụng để bảo vệ máy chủ Nginx khỏi các loại tấn công mạng khác nhau. Nó đi kèm với Bộ quy tắc cốt lõi bao gồm SQL injection, cross-site scripting, Trojan và nhiều loại khác nữa. Nó hoạt động bằng cách giám sát lưu lượng HTTP theo thời gian thực và chống lại các lỗ hổng bằng Bộ quy tắc cốt lõi OWASP ModSecurity. Nó có thể được sử dụng với Apache, Nginx và IIS và cũng tương thích với Debian, Ubuntu, & CentOS.

Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách tải xuống và biên dịch LibModSecurity với hỗ trợ Nginx trên CentOS 8.

Yêu cầu​

  • Máy chủ chạy CentOS 8.
  • Mật khẩu gốc được cấu hình trên máy chủ.

Bắt đầu​

Trước khi bắt đầu, hãy cập nhật máy chủ của bạn lên phiên bản mới nhất bằng lệnh sau:
Mã:
dnf update
Sau khi máy chủ của bạn được cập nhật, hãy khởi động lại máy chủ để áp dụng các thay đổi.

Cài đặt kho lưu trữ và phụ thuộc bắt buộc​

Trước tiên, hãy cài đặt kho lưu trữ EPEL và REMI trên hệ thống của bạn. Bạn có thể cài đặt chúng bằng lệnh sau:
Mã:
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
 dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
Tiếp theo, cài đặt tất cả các phụ thuộc cần thiết bằng lệnh sau:
Mã:
dnf install gcc-c++ flex bison yajl curl-devel zlib-devel pcre-devel autoconf automake git curl make libxml2-devel pkgconfig libtool httpd-devel redhat-rpm-config wget openssl openssl-devel nano
Sau khi tất cả các gói được cài đặt, bạn có thể cài đặt các phụ thuộc khác bằng kho lưu trữ PowerTool:
Mã:
dnf --enablerepo=PowerTools install doxygen yajl-devel
Tiếp theo, cài đặt GeoIP bằng kho lưu trữ REMI bằng cách chạy lệnh sau:
Mã:
dnf --enablerepo=remi install GeoIP-devel
Sau khi tất cả các gói được cài đặt, bạn có thể tiến hành bước tiếp theo.

Tải xuống và biên dịch LibModsecurity​

Đầu tiên, bạn sẽ cần tải xuống nguồn LibModsecurity và biên dịch nó trên hệ thống của mình. Để thực hiện, hãy thay đổi thư mục thành /opt và tải xuống phiên bản mới nhất của LibModsecurity từ kho lưu trữ Git:
Mã:
cd /opt/
 git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
Tiếp theo, hãy thay đổi thư mục thành ModSecurity và tải xuống mã libInjection bằng lệnh sau:
Mã:
cd ModSecurity
 git submodule init
 git submodule update
Tiếp theo, hãy định cấu hình LibModsecurity bằng lệnh sau:
Mã:
./build.sh
 ./configure
Cuối cùng, biên dịch và cài đặt LibModSecurity bằng lệnh sau:
Mã:
make
 make install
Lúc này, LibModsecurity đã được cài đặt trên hệ thống của bạn. Bây giờ bạn có thể tiến hành cài đặt Nginx với hỗ trợ LibModsecurity.

Tải xuống và biên dịch Nginx với hỗ trợ LibModsecurity​

Đầu tiên, bạn sẽ cần tạo người dùng và nhóm hệ thống cho Nginx. Bạn có thể tạo nó bằng lệnh sau:
Mã:
useradd -r -M -s /sbin/nologin -d /usr/local/nginx nginx
Tiếp theo, bạn sẽ cần tải xuống Nginx và biên dịch nó với sự hỗ trợ của LibModsecurity.

Để thực hiện, trước tiên hãy tải xuống trình kết nối ModSecurity-nginx từ kho lưu trữ Git bằng lệnh sau:
Mã:
cd /opt
 git clone https://github.com/SpiderLabs/ModSecurity-nginx.git
Tiếp theo, hãy tải xuống phiên bản ổn định mới nhất của Nginx bằng lệnh sau:
Mã:
wget http://nginx.org/download/nginx-1.17.6.tar.gz
Sau khi tải xuống, hãy giải nén tệp đã tải xuống bằng lệnh sau:
Mã:
tar -xvzf nginx-1.17.6.tar.gz
Tiếp theo, hãy thay đổi thư mục Nginx và cấu hình nó bằng lệnh sau:
Mã:
cd nginx-1.17.6
 ./configure --user=nginx --group=nginx --with-pcre-jit --with-debug --with-http_ssl_module --with-http_realip_module --add-module=/opt/ModSecurity-nginx
Tiếp theo, hãy cài đặt Nginx bằng lệnh sau:
Mã:
make
 make install
Tại thời điểm này, Nginx đã được cài đặt với hỗ trợ LibModsecurity. Bây giờ bạn có thể tiến hành cấu hình Nginx.

Cấu hình Nginx với ModSecurity​

Trước tiên, bạn sẽ cần sao chép tệp cấu hình ModSecurity mẫu từ thư mục nguồn Nginx vào thư mục cấu hình Nginx.

Bạn có thể sao chép chúng bằng lệnh sau:
Mã:
cp /opt/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
 cp /opt/ModSecurity/unicode.mapping /usr/local/nginx/conf/
Tiếp theo, tạo liên kết tượng trưng của tệp nhị phân Nginx tới đường dẫn /usr/sbin/ bằng lệnh sau:
Mã:
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
Tiếp theo, tạo thư mục nhật ký Nginx bằng lệnh sau:
Mã:
mkdir /var/log/nginx
Tiếp theo, mở tệp cấu hình Nginx bằng lệnh sau:
Mã:
nano /usr/local/nginx/conf/nginx.conf
Thực hiện lệnh sau thay đổi:
Mã:
người dùng nginx;worker_processes 1;pid /run/nginx.pid;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name your-server-ip; modsecurity on; modsecurity_rules_file /usr/local/nginx/conf/modsecurity.conf; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }}
Lưu và đóng tệp khi bạn hoàn tất. Sau đó, hãy kiểm tra Nginx xem có lỗi cú pháp nào không bằng lệnh sau:
Mã:
nginx -t
Bạn sẽ thấy kết quả sau:
Mã:
nginx: tệp cấu hình /usr/local/nginx/conf/nginx.conf syntax is oknginx: tệp cấu hình /usr/local/nginx/conf/nginx.conf test is successful
Tại thời điểm này, Nginx đã được cấu hình. Bạn có thể tiến hành tạo tệp dịch vụ systemd cho Nginx.

Tạo tệp dịch vụ Systemd cho Nginx​

Tiếp theo, bạn sẽ cần tạo tệp systemd để quản lý dịch vụ Nginx. Bạn có thể tạo nó bằng lệnh sau:
Mã:
nano /etc/systemd/system/nginx.service
Thêm các dòng sau:
Mã:
[Unit]Description=Máy chủ nginxAfter=network.target remote-fs.target nss-lookup.target[Service]Type=forkingPIDFile=/run/nginx.pidExecStartPre=/usr/bin/rm -f /run/nginx.pidExecStartPre=/usr/sbin/nginx -tExecStart=/usr/sbin/nginxExecReload=/bin/kill -s HUP $MAINPIDKillSignal=SIGQUITTimeoutStopSec=5KillMode=mixedPrivateTmp=true[Install]WantedBy=multi-user.target
Lưu và đóng tệp khi bạn hoàn tất. Sau đó, tải lại daemon systemd bằng lệnh sau:
Mã:
systemctl daemon-reload
Tiếp theo, khởi động dịch vụ Nginx và cho phép nó khởi động sau khi hệ thống khởi động lại bằng lệnh sau:
Mã:
systemctl start nginx
 systemctl enable --now nginx
Bạn sẽ thấy đầu ra sau:
Mã:
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /etc/systemd/system/nginx.service.
Tiếp theo, xác minh dịch vụ Nginx bằng lệnh sau:
Mã:
systemctl status nginx
Bạn sẽ thấy đầu ra sau:
Mã:
? nginx.service - Máy chủ proxy ngược và HTTP nginx Đã tải: đã tải (/etc/systemd/system/nginx.service; đã bật; cài đặt trước của nhà cung cấp: đã tắt) Đang hoạt động: đang hoạt động (đang chạy) kể từ Thứ Hai 2019-12-30 10:20:01 EST; 41 giây trước Tiến trình: 17730 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) Tiến trình: 17728 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) Tiến trình: 17727 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS) PID chính: 17732 (nginx) Nhiệm vụ: 2 (giới hạn: 6102) Bộ nhớ: 5.0M CGroup: /system.slice/nginx.service ??17732 nginx: tiến trình chính /usr/sbin/nginx ??17733 nginx: tiến trình công nhân30 tháng 12 10:20:00 nginx systemd[1]: Đang khởi động HTTP nginx và proxy ngược máy chủ...30/12 10:20:00 nginx nginx[17728]: nginx: cú pháp tệp cấu hình /usr/local/nginx/conf/nginx.conf là ok30/12 10:20:00 nginx nginx[17728]: nginx: tệp cấu hình /usr/local/nginx/conf/nginx.conf đã kiểm tra thành công30/12 10:20:01 nginx systemd[1]: nginx.service: Không phân tích được PID từ tệp /run/nginx.pid: Đối số không hợp lệ30/12 10:20:01 nginx systemd[1]: Đã khởi động máy chủ proxy ngược và HTTP nginx.
Tại thời điểm này, Nginx đã được khởi động và chạy. Bây giờ bạn có thể tiến hành cấu hình ModSecurity.

Cấu hình ModeSecurity​

Theo mặc định, ModSecurity được đặt ở chế độ chỉ phát hiện. Vì vậy, bạn sẽ cần bật công cụ quy tắc ModSecurity. Bạn có thể thực hiện bằng cách chỉnh sửa tệp modsecurity.conf:
Mã:
nano /usr/local/nginx/conf/modsecurity.conf
Tìm dòng sau:
Mã:
SecRuleEngine DetectionOnly
Và thay thế bằng dòng sau:
Mã:
SecRuleEngine On
Ngoài ra, hãy tìm dòng sau:
Mã:
/var/log/modsec_audit.log
Và thay thế bằng dòng sau:
Mã:
/var/log/nginx/modsec_audit.log
Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, tải xuống phiên bản mới nhất của ModSecurity Core Rule Set từ kho lưu trữ Git bằng lệnh sau:
Mã:
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/local/nginx/conf/owasp-crs
Sau khi tải xuống, đổi tên tệp cấu hình ví dụ CRS bằng lệnh sau:
Mã:
mv /usr/local/nginx/conf/owasp-crs/crs-setup.conf.example /usr/local/nginx/conf/owasp-crs/crs-setup.conf
Tiếp theo, cấu hình ModeSecurity để sử dụng các quy tắc này bằng cách chỉnh sửa tệp /usr/local/nginx/conf/modsecurity.conf:
Mã:
nano /usr/local/nginx/conf/modsecurity.conf
Thêm các dòng sau vào cuối tệp:
Mã:
Bao gồm owasp-crs/crs-setup.confBao gồm owasp-crs/rules/*.conf
Lưu và đóng tệp khi bạn hoàn tất. Sau đó, khởi động lại dịch vụ Nginx để triển khai các thay đổi:
Mã:
systemctl restart nginx

Kiểm tra ModSecurity​

ModSecurity hiện đã được cài đặt và cấu hình. Đã đến lúc kiểm tra xem nó có hoạt động hay không.

Để kiểm tra ModSecurity chống lại lệnh tiêm, hãy mở trình duyệt web của bạn và nhập URL http://localhost/index.html?exec=/bin/bash. Bạn sẽ thấy lỗi 403 Forbidden ở trang sau:



Để kiểm tra ModSecurity chống lại tấn công CSS, hãy mở terminal của bạn và chạy lệnh sau:
Mã:
curl http://localhost/?q=">alert(1)"
Bạn sẽ nhận được kết quả sau:
Mã:
403 Forbidden[HEADING=1]403 Forbidden[/HEADING]nginx/1.17.6

Kết luận​

Xin chúc mừng! Bạn đã tải xuống và biên dịch thành công LibModSecurity với Nginx. Máy chủ của bạn hiện đã được bảo vệ khỏi nhiều cuộc tấn công khác nhau. Để biết thêm thông tin, bạn có thể truy cập tài liệu ModSecurity tại Tài liệu ModSecurity.
 
Back
Bên trên