Docker部署Nginx遇Botnet扫描:无文件返回200及防护咨询
问题2:如何防护此类Botnet扫描/攻击?
结合你的现有配置,给出以下具体优化方案:
1. 直接拦截敏感路径请求
在主域名的server块里,location /之前添加专门的规则,拦截常见的敏感路径:
# 拦截所有隐藏文件(除了ACME验证的路径) location ~ /\.(?!well-known).* { return 444; } # 拦截特定的敏感扫描路径 location ~* ^/(\.env|\.git|config.json|telescope|META-INF) { return 444; }
return 444会直接关闭连接,比403更节省服务器资源。
2. 补充User-Agent拦截规则
你的block_user_agent映射里没有包含扫描用的Go-http-client/1.1,把它加进去:
map $http_user_agent $block_user_agent { default 0; ~*LWP::Simple 1; ~*BBBike 1; ~*wget 1; ~*msnbot 1; ~*scrapbot 1; ~*(nmap|nikto|wikto|sf|sqlmap|bsqlbf|w3af|acunetix|havij|appscan) 1; ~*Go-http-client 1; # 新增这条 }
3. 强化请求频率限制
你已经配置了limit_req,可以根据情况调整参数,比如把rate从1r/s降到0.5r/s,或者在主server块里添加并发连接限制:
limit_conn slimits 2;
limit_conn_zone已经在nginx.conf里定义,直接使用即可。
4. 配合Fail2Ban封禁恶意IP
如果是Docker部署,可以搭建Fail2Ban容器,监控Nginx的access.log,当同一个IP在短时间内发起多次敏感请求时,自动封禁该IP。
5. 避免SPA fallback暴露敏感路径(可选)
如果你的应用不是纯SPA,可以修改try_files规则,让不存在的文件返回404:
try_files $uri $uri/ =404;
但如果是React SPA,这条不能改,否则路由会失效,所以优先用前面的路径拦截方案。
内容的提问来源于stack exchange,提问作者dians1s
相关产品推荐
相关产品推荐

