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.
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.
Tiếp theo, cài đặt tất cả các phụ thuộc cần thiết bằng lệnh sau:
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:
Tiếp theo, cài đặt GeoIP bằng kho lưu trữ REMI bằng cách chạy lệnh sau:
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.
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:
Tiếp theo, hãy định cấu hình LibModsecurity bằng lệnh sau:
Cuối cùng, biên dịch và cài đặt LibModSecurity bằng lệnh sau:
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.
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:
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:
Sau khi tải xuống, hãy giải nén tệp đã tải xuống bằng lệnh sau:
Tiếp theo, hãy thay đổi thư mục Nginx và cấu hình nó bằng lệnh sau:
Tiếp theo, hãy cài đặt Nginx bằng lệnh sau:
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.
Bạn có thể sao chép chúng bằng lệnh sau:
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:
Tiếp theo, tạo thư mục nhật ký Nginx bằng lệnh sau:
Tiếp theo, mở tệp cấu hình Nginx bằng lệnh sau:
Thực hiện lệnh sau thay đổi:
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:
Bạn sẽ thấy kết quả sau:
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.
Thêm các dòng sau:
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:
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:
Bạn sẽ thấy đầu ra sau:
Tiếp theo, xác minh dịch vụ Nginx bằng lệnh sau:
Bạn sẽ thấy đầu ra sau:
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.
Tìm dòng sau:
Và thay thế bằng dòng sau:
Ngoài ra, hãy tìm dòng sau:
Và thay thế bằng dòng sau:
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:
Sau khi tải xuống, đổi tên tệp cấu hình ví dụ CRS bằng lệnh sau:
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:
Thêm các dòng sau vào cuối tệp:
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:
Để 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:
Bạn sẽ nhận được kết quả sau:
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
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
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
Mã:
dnf --enablerepo=PowerTools install doxygen yajl-devel
Mã:
dnf --enablerepo=remi install GeoIP-devel
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
Mã:
cd ModSecurity
git submodule init
git submodule update
Mã:
./build.sh
./configure
Mã:
make
make install
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
Để 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
Mã:
wget http://nginx.org/download/nginx-1.17.6.tar.gz
Mã:
tar -xvzf nginx-1.17.6.tar.gz
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
Mã:
make
make install
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/
Mã:
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
Mã:
mkdir /var/log/nginx
Mã:
nano /usr/local/nginx/conf/nginx.conf
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; } }}
Mã:
nginx -t
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ạ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
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
Mã:
systemctl daemon-reload
Mã:
systemctl start nginx
systemctl enable --now nginx
Mã:
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /etc/systemd/system/nginx.service.
Mã:
systemctl status nginx
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.
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
Mã:
SecRuleEngine DetectionOnly
Mã:
SecRuleEngine On
Mã:
/var/log/modsec_audit.log
Mã:
/var/log/nginx/modsec_audit.log
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
Mã:
mv /usr/local/nginx/conf/owasp-crs/crs-setup.conf.example /usr/local/nginx/conf/owasp-crs/crs-setup.conf
Mã:
nano /usr/local/nginx/conf/modsecurity.conf
Mã:
Bao gồm owasp-crs/crs-setup.confBao gồm owasp-crs/rules/*.conf
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)"
Mã:
403 Forbidden[HEADING=1]403 Forbidden[/HEADING]nginx/1.17.6