本文详细介绍如何通过识别和屏蔽扫描工具的User-Agent(UA)来提升服务器安全性,涵盖Nginx/Apache配置方法、正则表达式编写技巧以及自动化防御方案,帮助管理员有效阻断恶意扫描行为。
一、为什么需要屏蔽扫描工具UA?
网络扫描工具(如Nmap、Acunetix、Sqlmap等)通常会携带特征明显的User-Agent标识。通过拦截这些UA:
- 减少服务器无效流量消耗
- 降低漏洞探测风险
- 阻止自动化攻击的初步侦查
- 提升日志分析效率
二、常见扫描工具UA特征
典型扫描工具UA示例
Nmap Scripting Engine
sqlmap/1.6stable
Acunetix-Web-Security
Nikto/2.1.6
MetasploitFramework
三、Nginx服务器屏蔽方案
server {
在server段添加以下规则
if ($http_user_agent ~ (nmap|sqlmap|acunetix|nikto|metasploit|wpscan|dirbuster)) {
return 403;
}
更严格的正则匹配
if ($http_user_agent ~ "(?:libwww|wget|python-urllib|hydra|nessus)") {
return 444; 直接关闭连接
}
}
四、Apache服务器屏蔽方案
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (nmap|sqlmap|acunetix) [NC]
RewriteRule ^ - [F,L]
高级匹配模式
RewriteCond %{HTTP_USER_AGENT} ^.(dirbuster|burpsuite|owasp).$ [NC]
RewriteRule ^.$ - [F,L]
</IfModule>
五、进阶防御策略
1. 动态黑名单系统
结合日志分析工具(如Fail2Ban)自动识别并封禁:
fail2ban配置示例
[nginx-scanner]
enabled = true
filter = nginx-scanner
logpath = /var/log/nginx/access.log
maxretry = 1
bantime = 86400
2. Cloudflare防火墙规则
在CF面板创建UA匹配规则:
http.user_agent contains "sqlmap"
动作设置为”Block”
3. 频率限制组合防御
limit_req_zone $http_user_agent zone=scanners:10m rate=1r/m;
六、注意事项
- 定期更新UA特征库(建议每月检查)
- 测试规则时先使用
return 200 "test";
避免误拦截 - 重要业务系统建议配合WAF使用
- 保留完整的访问日志用于审计
通过以上方法可有效拦截90%以上的自动化扫描工具。建议结合IP黑名单和速率限制形成多层防御体系,持续监控并优化规则。
评论