User-Agent识别是Nginx防CC攻击成本最低、见效最快的第一道防线;通过map定义$ua_category分类变量,统一拦截scanner/port-scan/invalid类UA返回444,对harvester/script-client限流,并扩展日志与fail2ban联动实现闭环防护。

Nginx 防 CC 攻击时,用 User-Agent 识别恶意扫描工具是成本最低、见效最快的第一道防线。它不依赖外部模块,也不增加延迟,关键是把“可疑行为特征”转化为可匹配、可记录、可联动的规则。
在 http 块中统一定义 UA 分类变量
避免每个 server 重复写正则,提升性能和可维护性:
map $http_user_agent $ua_category {
default "allowed";
"~*sqlmap|nuclei|nikto|gobuster|acunetix|whatweb" "scanner";
"~*masscan|zmap|nmap|zgrab" "port-scan";
"~*crawler|spider|bot|harvester|scan" "harvester";
"~*(python-requests|curl|wget|httpie|Go-http-client)" "script-client";
"~*(^$|^\s*$|^-$)" "invalid";
}这个变量把 UA 归为语义明确的几类,后续拦截、限流、日志都可直接引用 $ua_category,比单纯 1/0 更易排查和迭代。
在 server 块顶部统一拦截高风险 UA 类型
放在 location / 之前,确保不被 rewrite 或 fastcgi_pass 绕过:
if ($ua_category ~* "scanner|port-scan|invalid") {
return 444; # 直接断连,不发任何响应,降低服务器负载
}对 harvester 和 script-client 可先限流再观察,不一刀切:
limit_req zone=ua_harv burst=3 nodelay;
(需提前在 http 块中定义 limit_req_zone $ua_category$binary_remote_addr zone=ua_harv:10m rate=1r/s;)
自动生成并安排6页TikTok幻灯片,搭配热门开头和图片,关联你的联盟文章,使用NVIDIA FLUX和Postiz。
扩展日志格式,让每次拦截都可追溯
在 log_format 中加入分类和原始 UA:
log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $ua_category $request_time';
这样查日志时,一行就能看出是 sqlmap 还是空 UA 导致拦截,不用来回翻配置。
配合 error.log 提取高频扫描 IP,交给 fail2ban 封禁
在 Nginx 配置里加一条:
error_log /var/log/nginx/attack.log warn;
然后用脚本或 fail2ban 监控 /var/log/nginx/attack.log 中含 "client denied by rule" 或大量 444 的 IP,自动加入 iptables 黑名单——形成“识别→拦截→反制”闭环。
不推荐只靠 UA 拦截就认为防住了 CC,但它能让自动化工具效率骤降、暴露更早、日志更干净。真正有效的防护,是让攻击者花 10 分钟扫到的路径,不如人工点开浏览器看 1 分钟。

















