LibModSecurity là một tường lửa cho dịch vụ web miễn phí và là mã nguồn mở nó 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 (XSS), Trojan và nhiều thứ khác. Nó hoạt động bằng cách giám sát lưu lượng HTTP trong thời gian thực chống lại các lỗ hổng bằng cách sử dụng Bộ quy tắc cốt lõi là ModSecurity của OWASP. Nó có thể được sử dụng với Apache, Nginx và IIS và cũng tương thích với Debian, Ubuntu và 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
Trước khi bắt đầu, hãy cập nhật máy chủ của bạn với phiên bản mới nhất bằng lệnh sau:
Khi máy chủ của bạn được cập nhật, hãy khởi động lại để áp dụng các thay đổi.
Cài đặt kho lưu trữ cần thiết
Đầu tiên, cài đặt kho 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:
Tiếp theo, cài đặt tất cả các phần thư viện bằng lệnh sau
một số thư viện có thể sẽ không được cài đặt nên bạn có thể cài bằng các sử dụng repository powerTool:
Tiếp theo, cài đặt GeoIP bằng kho lưu trữ REMI bằng cách chạy lệnh 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
Trước 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 bạn. Để làm như vậy, chúng ta vào thư mục /opt và tải xuống phiên bản LibModsecurity mới nhất từ kho Git:
Để cho chắc chắn thì chúng ta nên cập nhập nó một lần nữa
Tiếp theo, đị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:
Tại thời điểm 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 sự hỗ trợ của LibModsecurity.
Tải xuống và biên dịch Nginx với Hỗ trợ bảo mật LibModsecurance
Đầu tiên, bạn sẽ cần tạo một người dùng hệ thống và nhóm cho Nginx. Bạn có thể tạo nó bằng lệnh sau:
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.
Để làm như vậy, trước tiên hãy tải xuống trình kết nối ModSecurity-nginx từ kho Git bằng lệnh sau:
Tiếp theo, 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, giải nén tệp đã tải xuống bằng lệnh sau:
Tiếp theo, vào thư mục Nginx và cấu hình nó bằng lệnh sau:
Tiếp theo, cài đặt Nginx bằng lệnh sau:
Tại thời điểm này, Nginx đã được cài đặt với sự hỗ trợ của LibModsecurity. Bây giờ bạn có thể tiến hành cấu hình Nginx.
Confinure 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 sang thư mục cấu hình Nginx.
Bạn có thể sao chép chúng bằng lệnh sau:
Tiếp theo, tạo một symbolic link
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 các thay đổi sau:
Lưu và đóng tệp khi bạn hoàn thành. Sau đó, 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 đầu ra sau:
Tạo tệp Systemd Service cho Nginx
Tiếp theo, bạn sẽ cần tạo một tệp systemd để quản lý dịch vụ Nginx. Bạn có thể tạo nó bằng lệnh sau:
Thêm các dòng sau:
Lưu và đóng tệp khi bạn hoàn thành. 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 khởi động lại hệ thống bằng lệnh sau:
Bạn sẽ thấy đoạn code như sau hiển thị
chúng ta sẽ kiểm tra trạng thái nginx xem đã chạy chưa?
Bạn sẽ thấy đoạn code như sau hiển thị
Tại thời điểm này, Nginx đã được bắt đầu và chạy. Bây giờ bạn có thể tiến hành cấu hình ModSecurity.
Configure ModeSecurity
Theo mặc định, ModSecurity được đặt ở chế độ chỉ phát hiện. Vì vậy, bạn sẽ cần phải bật công cụ quy tắc ModSecurity. Bạn có thể làm điều đó bằng cách chỉnh sửa tệp modsecurity.conf:
Tìm dòng sau:
sửa thành
tìm
Thay thành
Tiếp theo, tải xuống phiên bản mới nhất của Bộ quy tắc lõi ModSecurity từ kho 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, định 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:
nano /usr/local/nginx/conf/modsecurity.conf
thêm các dòng sau
Khởi động lại nginx
Như vậy bạn đã cấu hình thành công bạn có thể kiểm tra nó. chúc bạn thanh công
Yêu cầu
- Một máy chủ chạy CentOS 8
Trước khi bắt đầu, hãy cập nhật máy chủ của bạn với phiên bản mới nhất bằng lệnh sau:
Bash:
dnf update
Khi máy chủ của bạn được cập nhật, hãy khởi động lại để áp dụng các thay đổi.
Cài đặt kho lưu trữ cần thiết
Đầu tiên, cài đặt kho 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:
Bash:
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ần thư viện bằng lệnh sau
Bash:
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ột số thư viện có thể sẽ không được cài đặt nên bạn có thể cài bằng các sử dụng repository powerTool:
Bash:
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:
Bash:
dnf --enablerepo=remi install GeoIP-devel
Tải xuống và biên dịch LibModSecurity
Trước 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 bạn. Để làm như vậy, chúng ta vào thư mục /opt và tải xuống phiên bản LibModsecurity mới nhất từ kho Git:
Bash:
cd /opt/
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
Để cho chắc chắn thì chúng ta nên cập nhập nó một lần nữa
Bash:
cd ModSecurity
git submodule init
git submodule update
Bash:
./build.sh
./configure
Cuối cùng, biên dịch và cài đặt LibModSecurity bằng lệnh sau:
Bash:
make
make install
Tại thời điểm 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 sự hỗ trợ của LibModsecurity.
Tải xuống và biên dịch Nginx với Hỗ trợ bảo mật LibModsecurance
Đầu tiên, bạn sẽ cần tạo một người dùng hệ thống và nhóm cho Nginx. Bạn có thể tạo nó bằng lệnh sau:
Bash:
useradd -r -M -s /sbin/nologin -d /usr/local/nginx nginx
Để làm như vậy, trước tiên hãy tải xuống trình kết nối ModSecurity-nginx từ kho Git bằng lệnh sau:
Bash:
cd /opt
git clone https://github.com/SpiderLabs/ModSecurity-nginx.git
Bash:
wget http://nginx.org/download/nginx-1.17.6.tar.gz
Mã:
tar -xvzf nginx-1.17.6.tar.gz
Bash:
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
Bash:
make
make install
Confinure 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 sang thư mục cấu hình Nginx.
Bạn có thể sao chép chúng bằng lệnh sau:
Bash:
cp /opt/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp /opt/ModSecurity/unicode.mapping /usr/local/nginx/conf/
Bash:
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
Bash:
mkdir /var/log/nginx
Bash:
nano /usr/local/nginx/conf/nginx.conf
NGINX:
user 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;
}
}
}
Bash:
nginx -t
Bash:
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Tạo tệp Systemd Service cho Nginx
Tiếp theo, bạn sẽ cần tạo một tệp systemd để quản lý dịch vụ Nginx. Bạn có thể tạo nó bằng lệnh sau:
Bash:
nano /etc/systemd/system/nginx.service
Bash:
[Unit]
Description=The nginx server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
Tiếp theo, khởi động dịch vụ Nginx và cho phép nó khởi động sau khi khởi động lại hệ thống bằng lệnh sau:
Bash:
systemctl start nginx
systemctl enable --now nginx
Bạn sẽ thấy đoạn code như sau hiển thị
Bash:
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /etc/systemd/system/nginx.service.
chúng ta sẽ kiểm tra trạng thái nginx xem đã chạy chưa?
Bash:
systemctl status nginx
Bạn sẽ thấy đoạn code như sau hiển thị
Bash:
? nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/etc/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2019-12-30 10:20:01 EST; 41s ago
Process: 17730 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 17728 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 17727 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Main PID: 17732 (nginx)
Tasks: 2 (limit: 6102)
Memory: 5.0M
CGroup: /system.slice/nginx.service
??17732 nginx: master process /usr/sbin/nginx
??17733 nginx: worker process
Dec 30 10:20:00 nginx systemd[1]: Starting The nginx HTTP and reverse proxy server...
Dec 30 10:20:00 nginx nginx[17728]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
Dec 30 10:20:00 nginx nginx[17728]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Dec 30 10:20:01 nginx systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Dec 30 10:20:01 nginx systemd[1]: Started The nginx HTTP and reverse proxy server.
Configure ModeSecurity
Theo mặc định, ModSecurity được đặt ở chế độ chỉ phát hiện. Vì vậy, bạn sẽ cần phải bật công cụ quy tắc ModSecurity. Bạn có thể làm điều đó bằng cách chỉnh sửa tệp modsecurity.conf:
Bash:
nano /usr/local/nginx/conf/modsecurity.conf
Bash:
SecRuleEngine DetectionOnly
Bash:
SecRuleEngine On
/var/log/modsec_audit.log
Thay thành
/var/log/nginx/modsec_audit.log
Tiếp theo, tải xuống phiên bản mới nhất của Bộ quy tắc lõi ModSecurity từ kho Git bằng lệnh sau:
Bash:
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
nano /usr/local/nginx/conf/modsecurity.conf
thêm các dòng sau
Bash:
Include owasp-crs/crs-setup.conf
Include owasp-crs/rules/*.conf
systemctl restart nginx
Như vậy bạn đã cấu hình thành công bạn có thể kiểm tra nó. chúc bạn thanh công