Nginx本身提供了一些基础的HTTP防火墙功能,主要通过配置实现:
location / {
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 405;
}
}
set $block_sql_injections 0;
if ($query_string ~ "union.*select.*\(") {
set $block_sql_injections 1;
}
if ($block_sql_injections = 1) {
return 403;
}
set $block_xss 0;
if ($query_string ~ "<script") {
set $block_xss 1;
}
if ($block_xss = 1) {
return 403;
}
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location / {
limit_req zone=one burst=5;
}
}
对于更高级的防护需求,可以考虑以下专业WAF方案:
ModSecurity是最流行的开源WAF之一:
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
cd ModSecurity
git submodule init
git submodule update
./build.sh
./configure
make
make install
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
load_module modules/ngx_http_modsecurity_module.so;
http {
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
}
NAXSI是专门为Nginx设计的轻量级WAF:
apt-get install nginx-naxsi
http {
include /etc/nginx/naxsi_core.rules;
server {
location / {
SecRulesEnabled;
DeniedUrl "/50x.html";
CheckRule "$SQL >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;
CheckRule "$TRAVERSAL >= 4" BLOCK;
CheckRule "$EVADE >= 4" BLOCK;
CheckRule "$XSS >= 8" BLOCK;
error_log /var/log/nginx/naxsi.log;
}
}
}
分层防护:
规则更新:
监控与日志:
性能考虑:
测试验证:
Q: WAF导致合法请求被拦截怎么办?
A: 1. 检查WAF日志确定拦截原因 2. 添加白名单规则 3. 调整规则敏感度
Q: 如何测试WAF是否生效?
A:
# 测试XSS防护
curl -i "http://example.com/?q=<script>alert(1)</script>"
# 测试SQL注入防护
curl -i "http://example.com/?q=1' OR '1'='1"
Q: WAF性能影响大怎么办?
A: 1. 启用缓存 2. 优化规则(减少正则复杂度) 3. 考虑硬件加速 4. 对静态资源禁用WAF
通过合理配置Nginx的HTTP防火墙和WAF,可以显著提高Web应用的安全性,抵御常见网络攻击。