在Nginx反向代理环境中,可以通过多种安全插件和模块来增强安全性。以下是关键方案和推荐工具:
ModSecurity
nginx
load_module modules/ngx_http_modsecurity_module.so;
server {
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
}
ngx_http_ssl_module
nginx
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
Limit Requests (ngx_http_limit_req_module)
nginx
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
location / {
limit_req zone=req_limit burst=20;
}
NAXSI
--add-module=/path/to/naxsi
。nginx
SecRulesEnabled;
DeniedUrl "/50x.html";
CheckRule "$SQL >= 8" BLOCK;
Headers More Module
nginx
more_clear_headers 'Server' 'X-Powered-By';
Lua-Nginx-Module (OpenResty)
lua
access_by_lua_block {
if ngx.var.remote_addr == "1.2.3.4" then
ngx.exit(ngx.HTTP_FORBIDDEN)
end
}
Fail2Ban
ini
[nginx-badbots]
enabled = true
filter = nginx-badbots
action = iptables-multiport[name=nginx, port="80,443"]
logpath = /var/log/nginx/access.log
Certbot (Let's Encrypt)
bash
certbot --nginx -d example.com
地理IP封锁
map $remote_addr $block_country {
default 0;
include /etc/nginx/geoip_block.conf;
}
server {
if ($block_country) { return 403; }
}
动态证书加载 (SSL Stapling)
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 valid=300s;
反向代理隐藏真实后端
proxy_hide_header X-AspNet-Version;
proxy_pass http://backend;
user nginx;
)。nginx
if ($request_method !~ ^(GET|POST|HEAD)$ ) {
return 405;
}
通过组合上述方案,可显著提升Nginx反向代理的安全性,同时保持高性能。根据实际需求选择模块,并定期测试防护规则的有效性。