Cách cài đặt Nginx với ModSecurity trên Ubuntu 15.04

theanh

Administrator
Nhân viên
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.

Đ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.
Tất cả các lệnh bên dưới phải được thực thi dưới dạng root. Chạy:
Mã:
sudo -i
để trở thành người dùng root trên máy chủ của bạn.


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
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.
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/
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:
Mã:
./autogen.sh
./configure --enable-standalone-module --disable-mlogc
make
Bây giờ hãy vào thư mục nginx, biên dịch Nginx và đưa mô-đun ModSecurity vào:
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
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:
Mã:
make
make install
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":
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
Ở dòng đầu tiên, bỏ chú thích dòng "user" và đổi người dùng thành www-data:
Mã:
user 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.
Mã:
ln -s /usr/local/nginx/sbin/nginx /bin/nginx
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:
Mã:
cd /lib/systemd/system/
vi nginx.service
Dán tập lệnh bên dưới:
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
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.
Mã:
systemctl daemon-reload
Kiểm tra cấu hình nginx và khởi động nginx bằng lệnh systemctl:
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ở tệp modsecurity.conf bằng trình soạn thảo vi:
Mã:
cd /usr/Local/nginx/conf/
vi modsecurity.conf
Ở dòng 7, đổi "DetectionOnly" thành "on".
Mã:
SecRuleEngine On
Ở dòng 38, tăng giá trị của "SecRequestBodyLimit" thành "100000000".
Mã:
SecRequestBodyLimit 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.
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/
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.
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
Đi đến thư mục "owasp-modsecurity-crs" và sao chép thư mục "base_rules" vào thư mục nginx.
Mã:
cd owasp-modsecurity-crs
cp -R base_rules/ /usr/Local/nginx/conf/
Chỉnh sửa modsecurity.conf và thêm OWASP CRS.
Mã:
cd /usr/Local/nginx/conf/
vi modsecurity.conf
Vui lòng đi đến cuối tệp và thêm nội dung sau configuration:
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
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".
Mã:
vi conf/nginx.conf
Thêm modsecurity.conf:
Mã:
[.....]

#Enable ModSecurityModSecurityEnabled on;ModSecurityConfig modsecurity.conf;root html;index index.php index.html index.htm;

[.....]
Lưu và thoát.

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

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.


Kết luận​

ModSecurity là WAF (Tường lửa ứng dụng web) mã nguồn mở được phát triển của SpiderLabs của Trustwave để bảo mật các ứng dụng web của bạn. 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, XSS, LFI, RFI, v.v. ModSecurity dễ cài đặt và có sẵn dưới dạng mô-đun cho Apache, Nginx và IIS cho windows.

Tham khảo​

 
Back
Bên trên