Hướng dẫn và Thảo luận  Cài Đặt LibModsecurity với Nginx trên CentOS 8

Mtdev
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.

LibModsecurity.png

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ột máy chủ chạy CentOS 8
Bắt đầ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:

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
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:

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
Tiếp theo, định cấu hình LibModSecurity bằng lệnh sau:

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
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:

Bash:
cd /opt
git clone https://github.com/SpiderLabs/ModSecurity-nginx.git
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:
Bash:
wget http://nginx.org/download/nginx-1.17.6.tar.gz
Sau khi tải xuống, 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, vào thư mục Nginx và cấu hình nó bằng lệnh sau:

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
Tiếp theo, cài đặt Nginx bằng lệnh sau:

Bash:
make
make install
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:

Bash:
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 một symbolic link
Bash:
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:
Bash:
mkdir /var/log/nginx
Tiếp theo, mở tệp cấu hình Nginx bằng lệnh sau:

Bash:
nano /usr/local/nginx/conf/nginx.conf
Thực hiện các thay đổi sau:

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;
        }
    }
}
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:

Bash:
nginx -t
Bạn sẽ thấy đầu ra sau:
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
Thêm các dòng sau:

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
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:

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.
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:

Bash:
nano /usr/local/nginx/conf/modsecurity.conf
Tìm dòng sau:
Bash:
SecRuleEngine DetectionOnly
sửa thành
Bash:
SecRuleEngine On
tìm
/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
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

Bash:
Include owasp-crs/crs-setup.conf
Include owasp-crs/rules/*.conf
Khởi động lại nginx
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