最有效的三类防火墙策略是直接封IP段、限请求频率、识别异常行为;需放行百度和Google官方爬虫,拦截无UA或伪造UA、单IP每分钟超60次请求、高频访问敏感路径及具备扫描特征的流量。

直接封IP段、限请求频率、识别异常行为,是阻断恶意爬虫最有效的三类防火墙策略。不依赖昂贵WAF设备,普通云服务器配合系统防火墙+Web服务层规则就能落地执行。
明确哪些流量算“恶意爬虫”
不是所有自动化访问都要拦——百度、Google官方爬虫需放行;真正要拦截的是:
- 无User-Agent或UA明显伪造(如
python-requests/2.0、curl/7.0) - 单IP 1分钟内请求超过60次,尤其集中在
/api/、/wp-login.php、/admin/等路径 - 高频访问静态资源但无Referer、Accept头缺失、Accept-Language异常(如全为
zh-CN却来自巴西IP段) - 扫描特征明显:连续请求
/phpmyadmin/、、<code>后立刻遍历<code>和所有<code>
系统级防火墙快速封禁IP段
适用于CentOS/Debian等Linux服务器,用iptables或ufw批量拦截已知高危网段:
- 查日志定位攻击源:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20 - 封单个IP:
sudo ufw deny from 192.168.123.45或sudo iptables -I INPUT -s 192.168.123.45 -j DROP - 封整个C段:
sudo ufw deny from 192.168.123.0/24 - 封ASN网段(如某IDC大量提供代理IP):从ipinfo.io查出AS编号(如AS16276),再用
whois -h whois.radb.net -- '-i origin AS16276'获取IP段,批量导入封禁
Nginx/Apache层做行为级限速与过滤
系统防火墙只能封IP,真正防住高频爬虫靠Web服务层规则:
- Nginx中定义限速区:
limit_req_zone $binary_remote_addr zone=antibot:10m rate=10r/s; - 在server或location块中启用:
limit_req zone=antibot burst=30 nodelay;(允许突发30次,超限返回503) - 屏蔽空UA或可疑UA:
if ($http_user_agent ~ "(python-requests|curl|wget|sqlmap|nikto|masscan)") { return 403; } - 限制非常规请求方法:
if ($request_method !~ ^(GET|HEAD|POST|OPTIONS)$) { return 405; } - 对敏感路径加强防护:
location ^~ /admin/ { limit_req zone=adminburst=5; }
结合日志自动封禁的进阶方案
手动封IP效率低,推荐用fail2ban或CSF实现自动响应:
- 安装fail2ban:
apt install fail2ban(Debian)或yum install epel-release && yum install fail2ban(CentOS) - 配置监控Nginx错误日志中444/499/503状态码(代表被限速或主动拒绝),触发后自动调用
iptables封IP 1小时 - CSF用户可编辑
/etc/csf/csf.conf,开启LF_NGINX_LOGIN并设置LF_NGINX_PERM为永久封禁高频恶意请求IP - 关键提示:务必加白搜索引擎IP段(如Googlebot的
google.com子网)、CDN回源IP、内部运维出口IP,避免误伤


















