Cập nhật: Câu trả lời hiện tại đã được cập nhật hoàn toàn.
Theo cuộc thảo luận này, tôi đã tạo ra một kho lưu trữ GitHub có tên WWW Security Assistant . Có một chi nhánh, được gọi ask_ubuntu
, dành riêng cho câu trả lời này. Tất cả các tài liệu tham khảo, trước đây có sẵn ở đây , bị xóa do giới hạn ký tự - chúng có sẵn trên GitHub.
Dưới đây là một số cách được xem quá mức, liên quan đến một cơ chế hoàn chỉnh, cách tăng bảo mật Apache2 trong Ubuntu 16.04.
Mục lục:
- Tập lệnh trợ lý bảo mật WWW (WSAS) ► Iptables
- Iptables - Cấu hình cơ bản - Lưu và khôi phục
- ModEvasive cho Apache2
- ModEvasive ► WSAS ► Iptables
- ModSecurance 2.9 cho Apache2
- ModSecurity Bộ quy tắc cốt lõi OWASP 3.x
- Quy tắc bảo mật
- Quy tắc bảo mật ModS ► WSAS ► Iptables
- Các tệp nhật ký ModSecurity và Apache
- Các tệp nhật ký ModSecurity ► Fail2Ban ► Iptables
- ModSecurance GuardianLog ► Người bảo vệ HTTPD ► WSAS ► Iptables
- ModSecurance GuardianLog ► Phân tích tùy chỉnh HTTPD ► WSAS ► Iptables
Ngoài ra, hãy nói rằng luôn luôn tốt khi sử dụng HTTPS:
Tập lệnh trợ lý bảo mật WWW ► Iptables
Ở đây được trình bày kịch bản www-security-assistant.bash
. Nó có thể giúp bạn xử lý các địa chỉ IP độc hại. Kịch bản có hai chế độ.
Chế độ tự động
Khi một chương trình bên ngoài, như của Apache mod_security
, cung cấp một $IP
địa chỉ độc hại . Trong trường hợp này, cú pháp gọi tập lệnh, nên là:
www-security-assistant.bash <ip-address> Guardian
www-security-assistant.bash <ip-address> ModSecurity
www-security-assistant.bash <ip-address> ModEvasive
www-security-assistant.bash <ip-address> a2Analyst
Trong chế độ này, tập lệnh cung cấp hai giai đoạn hành động và với mỗi hành động, nó sẽ gửi email đến (các) quản trị viên.
Giai đoạn đầu tiên: đối với một số 'hành vi vi phạm' đầu tiên , nguồn $IP
sẽ bị cấm trong một khoảng thời gian bằng với giá trị của $BAN_TIME
. Chế độ này sử dụng lệnh at
.
Giai đoạn thứ hai: khi số lượng vi phạm từ nhất định $IP
trở thành bằng giá trị của $LIMIT
, $IP
địa chỉ này sẽ bị cấm vĩnh viễn thông qua Iptables và sẽ được thêm vào $BAN_LIST
.
Chế độ thủ công
Chế độ này chấp nhận các tùy chọn sau:
www-security-assistant.bash <ip-address>
--DROP "log notes"
Tạo một mục vào tệp /var/www-security-assistant/iptables-DROP.list
và tạo quy tắc như:
iptables -A GUARDIAN -s $IP -j DROP
www-security-assistant.bash <ip-address>
--DROP-CLEAR "log notes"
Tạo một mục vào tệp /var/www-security-assistant/iptables-DROP-CLEAR.list
, xóa quy tắc Iptables nhất định, xóa $IP
khỏi lịch sử và khỏi $BAN_LIST
:
iptables -D GUARDIAN -s $IP -j DROP
www-security-assistant.bash <ip-address>
--ACCEPT "log notes"
Chỉ tạo một mục vào tệp /var/www-security-assistant/iptables-ACCEPT.list
.
www-security-assistant.bash <ip-address>
--ACCEPT-CHAIN "log notes"
Tạo một mục vào tệp /var/www-security-assistant/iptables-ACCEPT.list
và tạo quy tắc như:
iptables -A GUARDIAN -s $IP -j ACCEPT
Phụ thuộc
Kịch bản sử dụng iptables-save.sh
và iptables
chuỗi GUARDIAN
, được giải thích trong phần tiếp theo. Nó sẽ tạo và duy trì một vài tệp trong $WORK_DIR
:
www-security-assistant.history
- chứa dữ liệu cho các vi phạm của IP trước đó.
www-security-assistant.mail
- nội dung của email cuối cùng được gửi bởi tập lệnh.
iptables-ACCEPT.list
; iptables-DROP.list
và iptables-DROP-CLEAR.list
.
Kịch bản cần một cấu hình tối thiểu để gửi email:
sudo apt install s-nail mutt mailutils postfix
sudo dpkg-reconfigure postfix # For General type: Internet Site
echo 'Test passed.' | mail -s Test-Email email@example.com
Nếu có bất kỳ dịch vụ HTTPS nào được cấu hình, chứng chỉ TLS của nó có thể được sử dụng trong dịch vụ Postfix.
Ngoài ra, kịch bản sử dụng at
: sudo apt install at
.
Cài đặt
Tạo thư mục công việc, hãy gọi nó /var/www-security-assistant
. Tải về www-security-assistant.bash
và làm cho nó thực thi:
sudo mkdir /var/www-security-assistant
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/www-security-assistant.bash -O /var/www-security-assistant/www-security-assistant.bash
sudo chmod +x /var/www-security-assistant/www-security-assistant.bash
Cung www-security-assistant.bash
cấp dưới dạng lệnh tùy chỉnh:
sudo ln -s /var/www-security-assistant/www-security-assistant.bash /usr/local/bin/
Cấp quyền để www-data
chạy www-security-assistant.bash
mà không cần mật khẩu thông qua sudo
. Sử dụng lệnh sau để tạo và chỉnh sửa an toàn một tệp mới với sudoers
quy tắc ' ' bổ sung :
sudo visudo -f /etc/sudoers.d/www-security-assistant
Thêm dòng sau vào tệp - lưu tệp và thoát:
www-data ALL=(ALL) NOPASSWD: /var/www-security-assistant/www-security-assistant.bash
Tinh chỉnh www-security-assistant.bash
. Thay đổi ít nhất giá trị của biến $EMAIL_TO
.
Kiểm tra
Đại diện cho chính bạn $AGENT
và kiểm tra xem MODE tự động có hoạt động đúng không:
www-security-assistant.bash 192.168.1.177 Guardian
Sau đó kiểm tra e-mail của bạn, nhập iptables -L GUARDIAN -n
, xem lại các tập tin www-security-assistant.history
và www-security-assistant.mail
. Chạy lệnh trên 5 lần và xem lại các tập tin iptables-DROP.list
và iptables-CURRENT.conf
.
Kiểm tra xem MODE thủ công có hoạt động đúng không - thêm localhost của bạn vào Danh sách trắng:
www-security-assistant.bash 127.0.0.1 --ACCEPT "Server's localhost IP"
Sau đó kiểm tra tập tin iptables-ACCEPT.list
.
Phần còn lại của hướng dẫn này là cách tích hợp www-security-assistant
với hệ thống của bạn.
Iptables - Cấu hình cơ bản - Lưu và khôi phục
Cấu hình cơ bản
Vui lòng đọc hướng dẫn này trước khi thêm các quy tắc sau.
sudo iptables -F
sudo iptables -I INPUT 1 -i lo -j ACCEPT
sudo iptables -I INPUT 2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# This rule may lock you out of the system!
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT
Trước khi bạn thực hiện các hành động tiếp theo, hãy mở kết nối SSH mới và thử đăng nhập vào hệ thống của bạn để kiểm tra xem mọi thứ có hoạt động tốt không!
Lưu và khôi phục
Điều này có thể đạt được thông qua các tập lệnh tùy chỉnh, sẽ lưu và khôi phục lại hình iptables
nón trong quá trình dừng khởi động (hoặc khởi động lại) của hệ thống. (Nếu chúng tôi sử dụng UFW để thiết lập quy tắc Iptables thì bước này không cần thiết.)
printf '#!/bin/sh\n/sbin/iptables-save > /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-save.sh
printf '#!/bin/sh\n/sbin/iptables-restore < /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-restore.sh
sudo chmod +x /var/www-security-assistant/iptables-restore.sh /var/www-security-assistant/iptables-save.sh
sudo ln -s /var/www-security-assistant/iptables-save.sh /etc/network/if-post-down.d/iptables-save
sudo ln -s /var/www-security-assistant/iptables-restore.sh /etc/network/if-pre-up.d/iptables-restore
Tạo chuỗi mới
Tạo chuỗi mới, được gọi GUARDIAN
và chèn nó như số 3 vào INPUT
chuỗi:
sudo iptables -N GUARDIAN
sudo iptables -I INPUT 3 -j GUARDIAN
Kiểm tra
Khởi động lại hệ thống và kiểm tra cấu hình. Vui lòng sử dụng sudo systemctl reboot
(không sử dụng tùy chọn lực lượng reboot -f
). Khi hệ thống hoạt động trở lại, chúng ta có thể kiểm tra xem chuỗi mới được tạo có tồn tại không:
sudo iptables -L GUARDIAN -n
ModEvasive cho Apache2
ModEvasive là một mô-đun cơ động lảng tránh để Apache cung cấp hành động lảng tránh trong trường hợp tấn công HTTP DoS hoặc DDoS hoặc tấn công vũ phu. Đọc thêm...
Cài đặt
Cài đặt và kích hoạt mô-đun:
sudo apt install libapache2-mod-evasive
sudo a2enmod evasive
Tạo thư mục nhật ký và làm cho nó có thể truy cập cho www-data
:
sudo mkdir -p /var/log/apache2_mod_evasive
sudo chown www-data /var/log/apache2_mod_evasive
Điều chỉnh cấu hình cơ bản - bỏ ghi chú và chỉnh sửa các chỉ thị nhất định trong tệp cấu hình:
/etc/apache2/mods-enabled/evasive.conf
Khởi động lại Apache : sudo systemctl restart apache2.service
.
Kiểm tra
- Mở một trang web từ máy chủ của bạn và làm mới cửa sổ trình duyệt nhiều lần (nhấn
F5
) - bạn phải nhận 403 thông báo lỗi Cấm . Vào thư mục nhật ký, sẽ được tạo một tệp khóa mới. Tập tin này nên được xóa để phát hiện vi phạm hơn nữa từ địa chỉ IP này.
ModEvasive ► WSAS ► Iptables
Ở đây chúng tôi sẽ cấu hình mod_evasive
để nói chuyện iptables
thông qua www-security-assistant.bash
, được tạo trong phần trên.
Chỉnh sửa /etc/apache2/mods-available/evasive.conf
theo cách này:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 9
DOSSiteCount 70
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 10
#DOSEmailNotify your@email.foo
DOSLogDir "/var/log/apache2_mod_evasive"
DOSSystemCommand "sudo /var/www-security-assistant/www-security-assistant.bash %s 'ModEvasive' 'AutoMode' >> /var/www-security-assistant/www-security-assistant.execlog 2>&1"
</IfModule>
Tạo tệp nhật ký và Khởi động lại Apache:
sudo touch /var/www-security-assistant/www-security-assistant.execlog && sudo chown www-data /var/www-security-assistant/www-security-assistant.execlog
Để kiểm tra cấu hình này, chúng ta có thể mô phỏng DDOS tấn công thông qua các F5
phương pháp, đã đề cập ở trên, hoặc chúng ta có thể sử dụng một lệnh như ab
, hping3
vv
Chú ý: Hãy cẩn thận vì iptables
quy tắc, được sử dụng trong WSAS, sẽ DROP tất cả các kết nối mới từ nguồn $IP
, bao gồm cả các kết nối SSH của bạn. Thật tốt khi có một cách sao lưu để kết nối với máy chủ trong các thử nghiệm. Bạn có thể thay đổi quy tắc này để chỉ hoạt động với các cổng HTTP / HTTPS.
ModSecurance 2.9 cho Apache2
ModSecurity là một công cụ tường lửa ứng dụng web tự cung cấp rất ít sự bảo vệ. Để trở nên hữu ích, ModSecurity phải được cấu hình với các quy tắc. Để cho phép người dùng tận dụng tối đa lợi thế của ModSecurity, Spider Labs của Trustwave đang cung cấp một bộ quy tắc được chứng nhận miễn phí ... Đọc thêm ...
Cài đặt
Cài đặt và kích hoạt mô-đun:
sudo apt install libapache2-mod-security2
sudo a2enmod security2
Tạo tập tin cấu hình:
sudo cp /etc/modsecurity/modsecurity.conf-recommends /etc/modsecurity/modsecurity.conf
Đọc và chỉnh sửa /etc/modsecurity/modsecurity.conf
cẩn thận! Thêm hoặc thay đổi ít nhất các chỉ thị sau:
# -- Rule engine initialization ----------------------------------------------
SecRuleEngine On
# -- Debug log configuration -------------------------------------------------
SecDebugLogLevel 2
SecDebugLog "/var/log/apache2_mod_security/modsec_debug.log"
# -- Audit log configuration -------------------------------------------------
SecAuditLog "/var/log/apache2_mod_security/modsec_audit.log"
# -- Guardian log configuration -------------------------------------------------
SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
Các tập tin /etc/apache2/mods-enabled/security2.conf
liên quan đến /etc/modsecurity/modsecurity.conf
cấu hình của Apache. Ở giai đoạn này security2.conf
sẽ trông như thế này:
<IfModule security2_module>
SecDataDir /var/cache/modsecurity
IncludeOptional /etc/modsecurity/*.conf
</IfModule>
Tạo thư mục nhật ký:
sudo mkdir -p /var/log/apache2_mod_security
Thiết lập xoay vòng nhật ký. Đầu tiên tạo tập tin cấu hình:
sudo cp /etc/logrotate.d/apache2 /etc/logrotate.d/apache2-modsec
Sau đó chỉnh sửa tệp mới theo cách này:
/var/log/apache2_mod_security/*.log { … }
Khởi động lại Apache.
Kiểm tra
Tạo một tệp cấu hình bổ sung /etc/modsecurity
, gọi nó là ví dụ z-customrules.conf
và thêm quy tắc sau làm nội dung của nó:
# Directory traversal attacks
SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109"
Khởi động lại máy chủ : sudo systemctl restart apache2.service
. Mở trình duyệt của bạn và gõ https://example.com/?abc=../
. Kết quả sẽ là: 403 Cấm . Kiểm tra các tệp nhật ký /var/log/apache2_mod_security
để biết thêm chi tiết.
Để làm cho mọi thứ thú vị hơn, hãy đặt tập lệnh issues.php
vào một vị trí thích hợp trong bạn DocumentRoot
(ở đây tôi giả sử địa điểm này là /var/www/html
):
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/appendix/var/www/html/issues.php -O /var/www/html/issues.php
Sau đó sửa đổi quy tắc trên theo cách sau:
# Directory traversal attacks with redirection (or use URL instead of URI: redirect:'https://example.com/issues.php')
SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109, redirect:'/issues.php'"
Khởi động lại Apache, sau đó mở trình duyệt của bạn và gõ https://example.com/?abc=../
;-) Ý tưởng được mượn từ tập lệnh của SE BotLovin.cs
.
Chỉnh sửa /etc/modsecurity/z-customrules.conf
một lần nữa và nhận xét (vô hiệu hóa) quy tắc - đây chỉ là ví dụ thử nghiệm và nó được bao phủ bởi OWASP CRS, được mô tả trong phần tiếp theo.
Dưới đây là một ví dụ khác, nơi chúng tôi sẽ chuyển hướng tất cả các wp-admin
yêu cầu trang, nhưng ngoại trừ những yêu cầu này từ một số địa chỉ IP nhất định (lưu ý chain
):
# Block wp-admin access
SecRule REQUEST_URI "^/wp-admin" "id:108, log, deny, status:403, t:lowercase, chain, redirect:'/issues.php'"
SecRule REMOTE_ADDR "!@ipMatch 192.168.1.11,99.77.66.12"
Ở đây chúng tôi có hai hành động gây rối: (1) deny, status:403
và (2) redirect:'/issues.php'
. Thật ra chúng ta không cần deny
hành động vì nó sẽ bị ghi đè bởi redirect
hành động.
ModSecurity Bộ quy tắc cốt lõi OWASP 3.x
Trong Ubuntu 16.04, bạn có thể cài đặt CSR 2.x : apt install modsecurity-crs
. Ở đây chúng tôi sẽ cài đặt CSR 3.x , hướng dẫn chi tiết được cung cấp trong Hướng dẫn cài đặt ( git
bắt buộc).
Cài đặt
Sao chép CSR trong thư mục /usr/share/modsecurity-crs.3
:
sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs /usr/share/modsecurity-crs.3
Nâng cấp và tự động làm mới cơ sở dữ liệu GeoIP. (GeoIP DB không còn được bao gồm trong CRS. Thay vào đó, bạn nên tải xuống thường xuyên.) Kịch bản util/upgrade.py
mang chức năng này. Bạn có thể sử dụng nó như sau trong cron - sudo crontab -e
:
0 2 * * * /usr/share/modsecurity-crs.3/util/upgrade.py --geoip --crs --cron >> /var/log/apache2_mod_security/owasp-crs-upgrade.log 2>&1
Tạo tập tin cấu hình:
sudo cp /usr/share/modsecurity-crs.3/crs-setup.conf{.example,}
sudo cp /usr/share/modsecurity-crs.3/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf{.example,}
sudo cp /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf{.example,}
Đọc và chỉnh sửa các tập tin cẩn thận! Uncomment ít nhất là SecGeoLookupDB
chỉ thị:
SecGeoLookupDB util/geo-location/GeoIP.dat
Áp dụng cấu hình của Apache. Chỉnh sửa /etc/apache2/mods-available/security2.conf
theo cách này:
<IfModule security2_module>
SecDataDir /var/cache/modsecurity
IncludeOptional /etc/modsecurity/*.conf
IncludeOptional /usr/share/modsecurity-crs.3/crs-setup.conf
IncludeOptional /usr/share/modsecurity-crs.3/rules/*.conf
</IfModule>
Lưu tệp và sau đó khởi động lại Apache.
Quy tắc bảo mật
Việc làm trắng các Quy tắc bảo mật có thể được thực hiện thông qua các chỉ thị ModSec sau, có thể được sử dụng trên toàn hệ thống hoặc trong cấu hình của máy chủ ảo, trên toàn cầu, cho các thư mục cụ thể hoặc vị trí phù hợp:
SecRuleRemoveById
SecRuleRemoveByMsg
SecRuleRemoveByTag
SecRuleUpdateTargetById
SecRuleUpdateTargetByMsg
SecRuleUpdateTargetByTag
SecRuleUpdateActionById
Vô hiệu hóa mod_security2
cho PhpMyAdmin. Thay đổi /etc/phpmyadmin/apache.conf
theo cách này:
<Directory /usr/share/phpmyadmin>
<IfModule security2_module>
SecRuleEngine Off
</IfModule>
</Directory>
Vô hiệu hóa các quy tắc cụ thể cho thư mục nhất định:
<Directory /var/www/html>
<IfModule security2_module>
SecRuleRemoveById 973301
</IfModule>
</Directory>
Vô hiệu hóa các quy tắc trên toàn cầu. Vì mục đích này, chúng tôi phải thêm các chỉ thị của mình vào đâu đó trong các tệp cấu hình của Apache: /etc/modsecurity/z-customrules.conf
là một nơi tốt.
Vô hiệu hóa các quy tắc trong toàn bộ cấu hình của Apache:
SecRuleRemoveById 973301 950907
Danh sách trắng một địa chỉ IP để nó có thể đi qua ModSecurity:
SecRule REMOTE_ADDR "@ipMatch 192.168.110.1" "phase:1,nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
Vô hiệu hóa các quy tắc trong thư mục khớp:
<Directory /var/www/mediawiki/core>
SecRuleRemoveById 973301 950907
</Directory>
Cập nhật hành động của quy tắc bằng ID của nó trong Vị trí khớp:
<LocationMatch "/index.php.*">
SecRuleUpdateActionById 973301 "pass"
SecRuleUpdateActionById 950907 "pass"
</LocationMatch>
Trong các ví dụ trên, chúng tôi giả định rằng 973301
và 950907
là các ID quy tắc cản trở công việc bình thường của các ứng dụng web của chúng tôi. Chúng ta có thể tìm thấy các quy tắc như thế này bằng cách phân tích modsec_audit.log
.
Quy tắc bảo mật ModS ► WSAS ► Iptables
Dưới đây được đưa ra một vài ví dụ khác về cách tạo SecRules tùy chỉnh, cũng là cách chúng ta có thể gọi WWW Security Assistant Script (WSAS) thông qua chúng.
Thiết lập ban đầu
Chúng tôi cần một kịch bản khởi động bổ sung - modsecurity-assistant.sh
. Lý do là, exec
hành động của ModSecurity có cú pháp quá đơn giản và hạn chế.
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/modsecurity-assistant.sh -O /var/www-security-assistant/modsecurity-assistant.sh
sudo chmod +x /var/www-security-assistant/modsecurity-assistant.sh
Nếu bạn nhìn vào bên trong tập lệnh, bạn sẽ thấy một vài biến được xuất bởi ModSecurity. Đó là: $REQUEST_URI
, $ARGS
, $SERVER_NAME
, $REMOTE_ADDR
, $REMOTE_HOST
và $UNIQUE_ID
. Các biến khác được giải thích bên trong tập lệnh.
Tạo quy tắc tùy chỉnh và gọi các tập lệnh của chúng tôi thông qua nó
Trước tiên, hãy tạo quy tắc sẽ thực thi modsecurity-assistant.sh
(và gọi www-security-assistant.bash
) khi URI yêu cầu chứa một từ được đưa vào danh sách đen của chúng tôi. Mở /etc/modsecurity/z-customrules.conf
và thêm các dòng sau vào dưới cùng:
# REQUEST_URI words blacklist
#
SecRule REQUEST_URI "@pmFromFile /var/www-security-assistant/modsecurity-uri-black.list" \
"id:150, log, t:lowercase, chain, \
drop, deny, status:403, redirect:'/issues.php'"
SecRule REMOTE_ADDR "!@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
"setenv:REMOTE_HOST=%{REMOTE_HOST}, \
setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
REQUEST_URI
- biến này chứa URI đầy đủ từ yêu cầu hiện tại. Quy tắc cống rộng hơn:SecRule REQUEST_URI|ARGS|REQUEST_BODY ...
@pmFromFile
sẽ đọc tệp modsecurity-uri-black.list
chứa danh sách các cụm từ, trong đó mỗi cụm từ hoặc từ cụ thể được đặt vào một dòng mới. Bạn có thể thu thập các từ và cụm từ thú vị từ các tệp nhật ký. Nếu có sự trùng khớp cụ thể giữa REQUEST_URI
và danh sách các mẫu của chúng tôi, quy tắc sẽ được áp dụng. Tệp có thể trống, nhưng bạn phải tạo ( touch
) nó.
Các log
hành động sẽ tạo ra các entry bản ghi trong file log cho quy tắc này với id:150
.
drop
, deny
(với status
) và redirect
các hành động thuộc nhóm hành động gây rối , chúng phải ở đầu quy tắc chain
(nếu có chuỗi). Hành động thứ hai sẽ ghi đè lên hành động thứ nhất và hành động thứ ba sẽ ghi đè lên hành động thứ hai, do đó bạn phải lựa chọn bạn muốn thực hiện và có thể xóa những hành động khác.
chain
hành động sẽ gọi quy tắc tiếp theo của chuỗi, lưu ý rằng quy tắc thứ hai, không có id
.
REMOTE_ADDR
chứa địa chỉ IP của yêu cầu.
@ipMatchFromFile
tập tin modsecurity-ip-white.list
chứa danh sách trắng các địa chỉ IP, được phân tách tại các dòng mới. Các mục CIDR cũng được chấp nhận. Bởi vì hành động gây rối luôn nằm trong quy tắc hàng đầu của chuỗi, nó sẽ được áp dụng, nhưng khi một số IP nhất định nằm trong danh sách trắng này, exec
hành động sẽ không được áp dụng. Tệp có thể trống, nhưng bạn phải tạo ( touch
) nó.
exec
hành động sẽ gọi kịch bản bên ngoài của chúng tôi. Hành động này không gây rối và sẽ được thực thi khi quy tắc hiện tại trở lại đúng. Khi hành động này được áp dụng, IP từ xa sẽ được xử lý thông qua các tập lệnh của chúng tôi.
setenv
hành động này sẽ xuất một số biến nội bộ nhất định =%{...}
dưới dạng envvars, tên được xuất có thể khác với nội bộ. Một số biến phải được xuất thủ công, một số biến khác được xuất tự động - có thể đó là một lỗi nhỏ (trong một số trường hợp, xuất thủ công có cùng tên, chẳng hạn setenv:REQUEST_URI=%{REQUEST_URI}
, sẽ gây ra giá trị trống của biến được xuất).
Kiểm tra
Giả sử bạn không có Joomla trên máy chủ của mình, chỉnh sửa tệp modsecurity-uri-black.list
và thêm một dòng có nội dung /joomla
. Sau đó nhập vào trình duyệt của bạn https://exemple.com/joomla
. Bạn nên được chuyển hướng và chặn thông qua Iptables. Xóa các bản ghi sudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note'
, thêm IP của bạn vào modsecurity-ip-white.list
và làm lại bài tập. Bây giờ bạn nên được chuyển hướng, nhưng không bị chặn.
Kết nối tập lệnh của chúng tôi với Bộ quy tắc cốt lõi OWASP 3.x
Để làm điều đó, chúng tôi sẽ cập nhật hành động mặc định của Quy tắc chế độ dị thường (949110 và 959100). Với mục đích này, chỉnh sửa tệp /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
và thêm các dòng tiếp theo vào dưới cùng:
# -- Anomaly Mode - Update actions by ID -----
#
SecRuleUpdateActionById 949110 "t:none, drop, deny, status:403, redirect:'/issues.php', \
setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
SecRuleUpdateActionById 959100 "t:none, drop, deny, status:403, redirect:'/issues.php', \
setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
# -- Anomaly Mode - Whitelist some URI and IP addresses -----
#
SecRule REQUEST_URI "^/wp-admin/admin-ajax.php*|^/index\.php\?title=.*&action=(submit|raw&ctype=text/javascript|raw&ctype=text/css)$" \
"id:'999010', t:none, phase:1, pass, \
ctl:ruleRemoveById=949110, \
ctl:ruleRemoveById=959100"
SecRule REMOTE_ADDR "@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
"id:'999020', t:none, phase:1, pass, \
ctl:ruleRemoveById=949110, \
ctl:ruleRemoveById=959100"
Kiểm tra
Đừng quên khởi động lại (hoặc tải lại) Apache để áp dụng các thay đổi cấu hình. Đừng quên xóa hồ sơ định kỳ trong các bài kiểm tra, nếu không bạn có thể bị chặn vĩnh viễn :-)
Mô phỏng tấn công truyền tải thư mục:
https://example.com/?abc=../../../ # This should be redirected and blocked
https://example.com/wp-admin/admin-ajax.php?abc=../../../ # This should pass because of the whitelist rule
Mô phỏng cuộc tấn công SQL Injection:
https://example.com/?username=1'%20or%20'1'%20=%20'1&password=1'%20or%20'1'%20=%20'1
https://example.com/index.php?username=1'%20or%20'1'%20=%20'1'))/*&password=foo
Các tệp nhật ký ModSecurity và Apache
Máy chủ web Apache có thể được cấu hình để cung cấp cho quản trị viên máy chủ thông tin quan trọng về cách thức hoạt động của nó ... Con đường chính để cung cấp phản hồi cho quản trị viên là thông qua việc sử dụng các tệp nhật ký. Đọc thêm...
ModSecurity có cơ chế đăng nhập mạnh mẽ. Theo chỉ thị, SecGuardianLog
nó cung cấp một nguồn cấp dữ liệu nhật ký được thiết kế đặc biệt để làm việc với các tập lệnh bên ngoài.
Hiện nay công cụ duy nhất được biết đến làm việc với người giám hộ khai thác gỗ là
httpd-guardian
, đó là một phần của công cụ httpd dự án Apache . Công httpd-guardian
cụ này được thiết kế để bảo vệ chống lại các cuộc tấn công từ chối dịch vụ. Nó sử dụng blacklist tool
để tương tác với một tường lửa ... dựa trên iptables, tự động đưa vào danh sách đen các địa chỉ IP vi phạm. Đọc thêm...
Các tệp nhật ký ModSecurity ► Fail2Ban ► Iptables
Có thể thiết lập Fail2Ban để phân tích dữ liệu các tệp nhật ký của Apache. modsec_audit.log
có lẽ là sự lựa chọn tốt nhất, nhưng cũng xem các phần mà chúng ta nói về SecGuardianLog
.
Hãy quan tâm rằng SecAuditLogRelevantStatus
trong /etc/modsecurity/modsecurity.conf
được nhận xét. Nếu không, mọi người nhận được trang lỗi 404 sẽ bị fail2ban chặn.
SecAuditEngine RelevantOnly
#SecAuditLogRelevantStatus "^(?:5|4(?!04))"
Hiện tại Fail2Ban không được triển khai theo bất kỳ cách nào trong dự án này.
ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables
httpd-guardian
- phát hiện các cuộc tấn công DoS bằng cách theo dõi các yêu cầu Apache Security, Copyright (C) 2005 Ivan Ristic - được thiết kế để giám sát tất cả các yêu cầu máy chủ web thông qua cơ chế ghi nhật ký. Nó theo dõi số lượng yêu cầu được gửi từ mỗi địa chỉ IP ... người giám hộ httpd có thể phát cảnh báo hoặc thực thi tập lệnh để chặn địa chỉ IP ...
Kịch bản này có thể được sử dụng với cơ chế ghi nhật ký Apache2 hoặc với
ModSecurity (tốt hơn).
Cài đặt và thiết lập trong hoàn cảnh hiện tại
Tải về httpd-guardian
và làm cho nó thực thi:
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-guardian.pl -O /var/www-security-assistant/httpd-guardian.pl
sudo chmod +x /var/www-security-assistant/httpd-guardian.pl
Đọc các dòng 98-119
để xem cách tập lệnh được kết nối với tập lệnh WSAS của chúng tôi.
Áp dụng thay đổi sau trong cấu hình của Apache ( /etc/modsecurity/modsecurity.conf
), sau đó khởi động lại nó:
#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
Kiểm tra
Để kiểm tra tập lệnh, hãy tắt ModEvasive ( sudo a2dismod evasive
đừng quên bật nó sau) và khởi động lại Apache. Sau đó, tail
bản ghi thực thi:
tail -F /var/www-security-assistant/www-security-assistant.execlog
Và từ một trường hợp khác thực hiện tấn công DoS, ví dụ sử dụng ab
theo cách này:
for i in {1..20}; do (ab -n 200 -c 10 https://example.com/ &); done
ModSecGuardianLog ► Phân tích tùy chỉnh ► WSAS ► Iptables
Ở đây được trình bày một kịch bản đơn giản, được gọi httpd-custom-analyze.bash
, đó không phải là một cái gì đó đặc biệt nhưng có thể là một ví dụ hay. Các tính năng của nó được mô tả trong cơ thể của tập lệnh.
Cài đặt và cài đặt
Tải về httpd-custom-analyze.bash
và làm cho nó thực thi:
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-custom-analyze.bash -O /var/www-security-assistant/httpd-custom-analyze.bash
sudo chmod +x /var/www-security-assistant/httpd-custom-analyze.bash
Áp dụng thay đổi sau trong cấu hình của Apache ( /etc/modsecurity/modsecurity.conf
) và khởi động lại nó:
#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
#SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
SecGuardianLog "|/var/www-security-assistant/httpd-custom-analyze.bash"
Kịch bản lệnh sẽ gọi WSAS khi đạt đến ngưỡng - đọc dòng 86
và 35
.
Để có được cả hai httpd-
tập lệnh hoạt động đồng thời chỉnh sửa modsecurity.conf
và dẫn SecGuardianLog
đến cả hai.
Để thực hiện kiểm tra, hãy làm theo các mẹo từ phần trên.