ufw配合ip段封禁可高效拦截恶意爬虫:先用日志分析与fail2ban识别可疑ip,再通过whois确认cidr网段,最后用sudo ufw deny from x.x.x.0/y批量封禁;需注释规则、定期清理,并结合web层限流与cdn防护。

UFW(Uncomplicated Firewall)是 Ubuntu 系统上轻量、易用的防火墙工具,配合 IP 段封禁策略,能有效拦截高频恶意爬虫,缓解带宽压力和服务器负载。关键不在于“全封”,而在于“精准识别 + 快速响应 + 可维护性”。
快速识别恶意爬虫IP段
先通过日志定位异常行为,再聚合为网段封禁更高效:
- 用 awk + sort + uniq 统计访问频次:
awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -50(Nginx 日志路径为/var/log/nginx/access.log) - 结合 fail2ban 自动识别爬虫特征(如大量 404、User-Agent 异常、无 referer 的 POST 请求),并输出可疑 IP 列表
- 对高频单 IP 进一步查其归属网段:用
whois 192.168.1.1或在线工具(如 ipinfo.io)确认 ASN 和 CIDR 范围,避免误伤正常用户
用UFW批量封禁IP段(CIDR格式)
UFW 原生支持 CIDR,比逐条封禁单 IP 更简洁、性能更好:
- 封禁整个 C 段(如 192.168.1.0/24):
sudo ufw deny from 192.168.1.0/24 - 封禁 B 段(如 172.16.0.0/16)需谨慎,建议先确认该段是否含可信服务(如 CDN 回源、监控探针)
- 所有规则默认插入到链首,若需调整顺序,可加
insert 1显式指定位置:sudo ufw insert 1 deny from 203.0.113.0/24
规则持久化与日常维护
UFW 规则重启后自动保留,但需注意以下细节:
- 启用前务必确认 UFW 已开启且默认策略合理:
sudo ufw status verbose查看状态,sudo ufw default deny incoming是推荐起点 - 封禁规则建议加注释便于回溯:
sudo ufw deny from 198.51.100.0/24 comment 'aggressive scraper AS12345' - 定期清理过期规则:用
sudo ufw status numbered查编号,再sudo ufw delete [编号]删除;或导出规则sudo ufw show raw审计
补充防护建议(非UFW但强相关)
单靠 IP 封禁不够,需组合手段提升实效:
- 在 Web 服务器层(Nginx/Apache)配置 limit_req 限制单 IP 请求频率,防漏网之鱼
- 用 mod_evasive(Apache)或 ngx_http_limit_conn_module(Nginx)做请求级防护
- 对静态资源启用 CDN 并配置 Bot Management(如 Cloudflare WAF),将爬虫拦截前置到边缘节点,减轻源站压力










