先看现象。源站上了 fail2ban,CDN 回源节点因为一次目录扫描被连续封禁。用户访问时 CDN 返回 522,蜘蛛拿到的是连接超时,抓取量一天掉了七成。试过重启防火墙,规则又自动加回来。
原因不止一个,得分开看。fail2ban 按请求频率封 IP,CDN 回源地址段被当成攻击源。还有一种是回源 IP 不固定,封一个段等于把所有节点都挡在外面。
少数情况下是CDN 侧只看到 522,源站日志里连请求都没有。
不容易想到的是,封禁时长叠加,恢复后仍有一批节点在黑名单里。
先在源站看 522 时段的连接
tail -200 /var/log/nginx/access.log | awk '$9==522' | wc -l
随后查当前被封的地址段
fail2ban-client status nginx-http-auth
接着把 CDN 回源段加入白名单
fail2ban-client set nginx-http-auth unbanip 198.51.100.0/24
从边缘节点复验回源
curl -sI https://www.example.com/ | grep -i 'cf-ray\|x-cache'
改完先别撤,确认这几项。回源段解封后,CDN 的 522 归零,蜘蛛抓取量在一天内恢复到封禁前水平。
这里还有个坑。源站防护要先把 CDN 回源段列白名单,再谈频率限制,否则最先被挡的永远是自己人。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
