WAF (Web Application Firewall) còn gọi là tường lửa ứng dụng web. WAF kiểm tra lượng truy cập và sẽ lọc ra các yêu cầu có mối đe dọa xâm hại đến website trước khi đến ứng dụng web.
Khi các công ty và users ngày càng phụ thuộc vào các ứng dụng web (Web Application), chẳng hạn như email dựa trên web hoặc chức năng e-Commerce, các cuộc tấn công nhằm vào lớp ứng dụng gây ra rủi ro lớn hơn cho năng suất và bảo mật. Do đó, WAF thật sự rất quan trọng nhằm bảo vệ khỏi các mối đe dọa liên quan đến bảo mật web.
Không đứng ngoài nguy cơ bị hack thì cộng đồng caddy cũng có những công cụ phục vụ cho việc chống lại các cuộc tấn công, ở bài số 1 thì chúng ta đã cấu hình cài đặt được một máy chủ caddy server với một phần mềm WAF tuy nhiên chưa được cấu hình gì cả trong bài này chúng ta sẽ cấu hình nó, nếu bạn cài đặt mới hãy xem lại bài số 1 nha
Để cấu hình chúng ta cần dùng 1 block như sau trong Caddyfile
coraza_waf {
directives `
SecAction "id:1,pass,log"
SecRule REQUEST_URI "/test5" "id:2, deny, log, phase:1"
SecRule REQUEST_URI "/test6" "id:4, deny, log, phase:3"
`
include file1.conf
include file2.conf
include /some/path/*.conf
}
Trông nó sẽ như thế này khi hoàn chỉnh
{
order coraza_waf first
}
caddy.manhtuong.net {
coraza_waf {
directives `
SecAction "id:1,pass,log"
SecRule REQUEST_URI "/test5" "id:2, deny, log, phase:1"
SecRule REQUEST_URI "/test6" "id:4, deny, log, phase:3"
`
include /etc/caddy/waf/config.conf
include /etc/caddy/waf/coreruleset/crs-setup.conf.example
include /etc/caddy/waf/coreruleset/rules/*.conf
}
root * /home/caddy/web
php_fastcgi unix//run/php/php7.4-fpm.sock
file_server
log {
output file /home/caddy/caddy.manhtuong.net.log
}
}
Nhớ thay domain caddy.manhtuong.net thành domain của bạn phần order coraza_waf first đó là thành phần bắt buộc để cho phép waf sẽ chạy trước khi dữ liệu vào ứng dụng có như vậy thì waf mới hoạt động hiệu quả được,
Phần config.conf thì chúng at tải file cấu hình tải file này và lưu vào /etc/caddy/waf
root@caddy:~# mkdir -p /etc/caddy/waf
root@caddy:~# cd /etc/caddy/waf
root@caddy:/etc/caddy/waf# wget -O config.conf https://raw.githubusercontent.com/corazawaf/coraza/v2/master/coraza.conf-recommended
Sau đó cũng ta cần tải bộ ModSecurity Core Rule Set để có thể sử dụng
root@caddy:/etc/caddy/waf# git clone https://github.com/coreruleset/coreruleset.git
root@caddy:/etc/caddy/waf# cd /etc/caddy/waf/coreruleset
Sau đó chúng ta cần loại bỏ 3 rule trong bộ rule của crs để có thể hoạt động được
root@caddy:~# cd /etc/caddy/waf/coreruleset/rules
root@caddy:/etc/caddy/waf/coreruleset/rules# rm -rf REQUEST-922-MULTIPART-ATTACK.conf
root@caddy:/etc/caddy/waf/coreruleset/rules# rm -rf REQUEST-949-BLOCKING-EVALUATION.conf
root@caddy:/etc/caddy/waf/coreruleset/rules# rm -rf REQUEST-920-PROTOCOL-ENFORCEMENT.conf
Sau khi xóa song chúng ta tiến hành cấu hình SecRuleEngine để waf có thể hoạt động bằng cách sửa file /etc/caddy/waf/config.conf và đổi cấu hình
# -- Rule engine initialization ----------------------------------------------
# Enable Coraza, attaching it to every transaction. Use detection
# only to start with, because that minimises the chances of post-installation
# disruption.
#
SecRuleEngine DetectionOnly
# -- Request body handling ---------------------------------------------------
Thành
# -- Rule engine initialization ----------------------------------------------
# Enable Coraza, attaching it to every transaction. Use detection
# only to start with, because that minimises the chances of post-installation
# disruption.
#
SecRuleEngine On
# -- Request body handling ---------------------------------------------------
Sau khi cấu hình song chúng ta tiến hành khởi động lại caddy
systemctl start caddy.service
Sau đó chúng ta có thể kiểm tra xem waf đã hoạt động hay chưa bằng cách vào web thêm mấy cái thẻ <script> và nó trả về 403 là đúng
Nếu bạn bị block nhầm hãy đổi cấu hình SecRuleEngine về mặc định là DetectionOnly sau đó tiến hành phân tích log để có hướng xử lý white rule cho ứng dụng. việc whitelist rule cũng tương tự như Modsecurity