ModSecurity là Tường lửa ứng dụng web (WAF) mã nguồn mở dành cho máy chủ web Apache Nginx và IIS. Tường lửa lớp ứng dụng này được phát triển bởi SpiderLabs của Trustwave và được phát hành theo Giấy phép Apache 2.0. ModSecurity bảo vệ các trang web khỏi tin tặc bằng cách sử dụng một bộ quy tắc biểu thức chính quy để lọc ra các khai thác thường gặp, cho phép giám sát lưu lượng HTTP, ghi nhật ký, phân tích thời gian thực và phát hiện tấn công. Có hơn 16.000 quy tắc có sẵn để phát hiện các cuộc tấn công như SQL Injection, Cross-site Scripting (XSS), Local File Inclusion, Remote File Inclusion và các quy tắc dành riêng cho ứng dụng cho nhiều ứng dụng web như Wordpress, Joomla, Drupal, v.v.
Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách cài đặt mod_security cho máy chủ web Nginx nhanh. Tôi sẽ cấu hình ModSecurity như một mô-đun độc lập và sau đó xây dựng Nginx từ nguồn để bao gồm ModSecurity.
Những gì chúng ta sẽ làm trong hướng dẫn này:
để trở thành người dùng root trên máy chủ của bạn.
Tải xuống Nginx bằng lệnh wget, tôi sẽ sử dụng phiên bản ổn định của Nginx 1.8 ở đây. Nếu bạn muốn sử dụng phiên bản khác, vui lòng truy cập trang tải xuống của Nginx để lấy danh sách tất cả các bản phát hành có sẵn.
Và biên dịch ModSecurity thành mô-đun độc lập trên máy chủ của bạn để chúng ta có thể đưa nó vào Nginx:
Bây giờ hãy vào thư mục nginx, biên dịch Nginx và đưa mô-đun ModSecurity vào:
Giải thích lệnh configure:
Nginx sẽ chạy dưới người dùng và nhóm "www-data" và chúng tôi kích hoạt các mô-đun debug, ipv6 và ssl. Và cuối cùng chúng ta đưa module ModSecurity vào Nginx.
Bây giờ cài đặt Nginx:
Khi lệnh make install hoàn tất, bạn có thể thấy Nginx đã được cài đặt trong thư mục"/usr/local/nginx":
Ở dòng đầu tiên, bỏ chú thích dòng "user" và đổi người dùng thành www-data:
Lưu và thoát.
Tạo liên kết tượng trưng cho tệp nhị phân nginx để chúng ta có thể sử dụng lệnh "nginx" trực tiếp.
Tiếp theo chúng ta sẽ tạo một tập lệnh systemd cho Nginx được sử dụng để khởi động/dừng tiến trình nền Nginx. Vui lòng vào thư mục "/lib/systemd/system/" và tạo một tệp mới "nginx.service" bằng vi:
Dán tập lệnh bên dưới:
Lưu và Thoát.
Bây giờ hãy tải lại systemd-daemon để systemd tải tệp dịch vụ Nginx mới của chúng ta.
Kiểm tra cấu hình nginx và khởi động nginx bằng lệnh systemctl:
Mở tệp modsecurity.conf bằng trình soạn thảo vi:
Ở dòng 7, đổi "DetectionOnly" thành "on".
Ở dòng 38, tăng giá trị của "SecRequestBodyLimit" thành "100000000".
Ở dòng 192, hãy thay đổi giá trị của "SecAuditLogType" thành "Concurrent" và chú thích dòng SecAuditLog và bỏ chú thích dòng 196.
Lưu và thoát.
Bây giờ hãy tạo thư mục mới cho nhật ký kiểm tra ModSecurity và đổi chủ sở hữu thành www-data.
Đi đến thư mục "owasp-modsecurity-crs" và sao chép thư mục "base_rules" vào thư mục nginx.
Chỉnh sửa modsecurity.conf và thêm OWASP CRS.
Vui lòng đi đến cuối tệp và thêm nội dung sau configuration:
Lưu và Thoát.
Bước cuối cùng, thêm tệp modsecurity.conf vào cấu hình Nginx bằng cách chỉnh sửa tệp "nginx.conf".
Thêm modsecurity.conf:
Lưu và thoát.
Khởi động lại Nginx để áp dụng các thay đổi cấu hình:
Sau đây là kết quả:
XSS bị cấm
www.exploit-db.com
Truy cập trình duyệt:
Nhật ký máy chủ:
SQL Injection bị cấm
https://www.exploit-db.com/exploits/37560/
Truy cập trình duyệt:
Nhật ký máy chủ:
Nginx và ModSecurity đã thành công.
Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách cài đặt mod_security cho máy chủ web Nginx nhanh. Tôi sẽ cấu hình ModSecurity như một mô-đun độc lập và sau đó xây dựng Nginx từ nguồn để bao gồm ModSecurity.
Điều kiện tiên quyết
- Máy chủ Ubuntu 15.04, tôi sẽ sử dụng IP ở đây là 192.168.1.106.
- Quyền root
Những gì chúng ta sẽ làm trong hướng dẫn này:
- Cập nhật Hệ thống và Kho lưu trữ Ubuntu 15.04.
- Cài đặt các Phụ thuộc cần thiết để xây dựng Nginx và ModSecurity.
- Tải ModSecurity và Nginx.
- Cài đặt ModSecurity và Nginx.
- Cấu hình Nginx.
- Cấu hình ModSecurity.
- Cấu hình OWASP Core Rule Set (CRS).
- Kiểm tra.
Mã:
sudo -i
1. Cập nhật Hệ thống và Kho lưu trữ
Trước khi bạn bắt đầu cài đặt tất cả các phụ thuộc, vui lòng cập nhật hệ thống của bạn:
Mã:
apt-get update
apt-get upgrade
2. Cài đặt các phụ thuộc xây dựng
Cài đặt tất cả các gói cần thiết để biên dịch Nginx và ModSecurity bằng lệnh apt bên dưới:
Mã:
apt-get install git build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf apache2-prefork-dev libxml2-dev libcurl4-openssl-dev
3. Tải xuống ModSecurity và Nginx
Đi tới thư mục "/usr/src/", sau đó sao chép kho lưu trữ ModSecurity từ Github:
Mã:
cd /usr/src/
git clone https://github.com/SpiderLabs/ModSecurity.git modsecurity
Mã:
wget http://nginx.org/download/nginx-1.8.0.tar.gz
4. Cài đặt ModSecurity và Nginx
Bây giờ là lúc cài đặt ModSecurity, vui lòng vào thư mục /usr/src/modsecurity:
Mã:
cd /usr/src/modsecurity/
Mã:
./autogen.sh
./configure --enable-standalone-module --disable-mlogc
make
Mã:
cd ../nginx-1.8.0
./configure \
--user=www-data \
--group=www-data \
--with-debug \
--with-ipv6 \
--with-http_ssl_module \
--add-module=/usr/src/modsecurity/nginx/modsecurity
Nginx sẽ chạy dưới người dùng và nhóm "www-data" và chúng tôi kích hoạt các mô-đun debug, ipv6 và ssl. Và cuối cùng chúng ta đưa module ModSecurity vào Nginx.
Bây giờ cài đặt Nginx:
Mã:
make
make install
Mã:
cd /usr/local/nginx/
ll
drwxr-xr-x 2 root root 4096 03/10 07:21 conf/
drwxr-xr-x 2 root root 4096 03/10 07:21 html/
drwxr-xr-x 2 root root 4096 03/10 07:21 logs/
drwxr-xr-x 2 root root 4096 03/10 07:21 sbin/
5. Cấu hình Nginx
Chỉnh sửa tệp cấu hình nginx bằng vi/vim và cấu hình nginx để chạy dưới người dùng "www-data".
Mã:
cd /usr/local/nginx/
vi conf/nginx.conf
Mã:
user www-data;
Tạo liên kết tượng trưng cho tệp nhị phân nginx để chúng ta có thể sử dụng lệnh "nginx" trực tiếp.
Mã:
ln -s /usr/local/nginx/sbin/nginx /bin/nginx
Mã:
cd /lib/systemd/system/
vi nginx.service
Mã:
[Service]Type=forkingExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.confExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.confExecReload=/usr/local/nginx/sbin/nginx -s reloadKillStop=/usr/local/nginx/sbin/nginx -s stopKillMode=processRestart=on-failureRestartSec=42sPrivateTmp=trueLimitNOFILE=200000[Install]WantedBy=multi-user.target
Bây giờ hãy tải lại systemd-daemon để systemd tải tệp dịch vụ Nginx mới của chúng ta.
Mã:
systemctl daemon-reload
Mã:
nginx -t
systemctl start nginx
6. Cấu hình ModSecurity
Sao chép tệp cấu hình ModSecurity vào thư mục nginx và đặt tên là"modsecurity.conf":
Mã:
cp /usr/src/modsecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp /usr/src/modsecurity/unicode.mapping /usr/local/nginx/conf/
Mã:
cd /usr/Local/nginx/conf/
vi modsecurity.conf
Mã:
SecRuleEngine On
Mã:
SecRequestBodyLimit 100000000
Mã:
SecAuditLogType Concurrent
#SecAuditLog /var/log/modsec_audit.log
# Chỉ định đường dẫn để ghi nhật ký kiểm tra đồng thời.
SecAuditLogStorageDir /opt/modsecurity/var/audit/
Bây giờ hãy tạo thư mục mới cho nhật ký kiểm tra ModSecurity và đổi chủ sở hữu thành www-data.
Mã:
mkdir -p /opt/modsecurity/var/audit/
chown -R www-data:www-data /opt/modsecurity/var/audit/
7. Cấu hình OWASP Core Rule Set (CRS)
Tải xuống OWASP Core Rule Set từ github.
Mã:
cd /usr/src/
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
Mã:
cd owasp-modsecurity-crs
cp -R base_rules/ /usr/Local/nginx/conf/
Mã:
cd /usr/Local/nginx/conf/
vi modsecurity.conf
Mã:
#DefaultActionSecDefaultAction "log,deny,phase:1"#Nếu bạn muốn tải một quy tắc duy nhất /usr/loca/nginx/conf#Include base_rules/modsecurity_crs_41_sql_injection_attacks.conf#Load all RuleInclude base_rules/*.conf#Disable rule by ID from error message (for my wordpress)SecRuleRemoveById 981172 981173 960032 960034 960017 960010 950117 981004 960015
Bước cuối cùng, thêm tệp modsecurity.conf vào cấu hình Nginx bằng cách chỉnh sửa tệp "nginx.conf".
Mã:
vi conf/nginx.conf
Mã:
[.....]
#Enable ModSecurityModSecurityEnabled on;ModSecurityConfig modsecurity.conf;root html;index index.php index.html index.htm;
[.....]
Khởi động lại Nginx để áp dụng các thay đổi cấu hình:
Mã:
systemctl restart nginx
8. Kiểm tra
Tôi có một trang web WordPress đang chạy trên Nginx và ModSecurity, nó hoạt động tốt. Để thử nghiệm, tôi sẽ cài đặt một plugin mới dễ bị tấn công XSS và SQL Injection.Sau đây là kết quả:
XSS bị cấm

WordPress Plugin NewStatPress 0.9.8 - Multiple Vulnerabilities
WordPress Plugin NewStatPress 0.9.8 - Multiple Vulnerabilities. CVE-2015-4063CVE-2015-4062CVE-122499CVE-122498 . webapps exploit for PHP platform
Truy cập trình duyệt:
Nhật ký máy chủ:
SQL Injection bị cấm
https://www.exploit-db.com/exploits/37560/
Truy cập trình duyệt:
Nhật ký máy chủ:
Nginx và ModSecurity đã thành công.