百度云加速的 CDN 回源与 iptables 规则
由于网站前段时间总是遭受 CC 或 DDos 攻击,导致网站无法正常访问。在使用如限制 IP 访问和分析日志屏蔽恶意 IP 的方法失效后,只能背靠大树,用上了百度云加速,这下总算是消停了。但是因为矫枉过正的原因,更大的问题出现了。
在使用百度云加速的时候,发现官方提供了白名单 IP,于是就用 iptables 把除这些之外的 IP 全部 DROP 掉了,也就是说除了云加速之外任何 IP 都无法访问服务器的真实 IP 了。心想这下可以一劳永逸了。
昨天瞥了一眼网站统计,发现流量减少了很多,比较异常。看了下搜索来源,发现向来占大头的百度搜索突然消失了。随后在百度搜索网站名称,首页竟然没有收录了!继续用 Site 命令查询收录情况,只剩下了 3 条!难道网站被 K 了?可是网站并没有什么违规内容或违规 SEO 操作呀。仔细排查了下,证明着又是自己的操作失误。
在设置严格的白名单 iptables 规则时,我忽略了一个问题,那就是 CDN 的回源。之前对 CDN 并不是特别了解,也没有回源这个概念。查了下,虽然没有搜到确切的关于“回源”的介绍,但知道了个大概意思,是指当客户端请求 CDN 节点的时候,会被发回到原始服务器上。百度云加速的免费版是强制开启“搜索引擎自动回源”的,也就是说当搜索引擎的蜘蛛请求抓取页面的时候,会直接抓取源服务器上的内容,而不是 CDN 节点上的缓存内容。
那问题就来了,我的 iptables 使用的是白名单,把除云加速之外的所有 IP 都 DROP 掉了,其中当然也包括所有的百度蜘蛛,它们抓取请求被服务器无情的给丢掉了。如下图所示,我是 19 号设置的 iptables 规则,当天就有 >50% 的蜘蛛抓取请求超时,20、21 号请求超时接近 90%,直到 22 号下午修改了 iptables 规则,抓取超时率下降到了 57%。
▲ 百度蜘蛛抓取统计(7.1-7.6的异常是因为 CC 或 DDos 攻击导致的)
矫枉过正总是会引发更大的麻烦,知道了原因,把原来的 iptables 白名单更改成了 iptables 黑名单,以免误伤。到了晚上在搜索网站名称已经可以搜到了,Site 了一下收录也已经恢复了一页半了。
从这次事故中可以看出百度对网站在线的时效性还是很敏感的,仅仅三四天无法访问,全站的收录就被剔除干净了。总算是吃一堑长一智,经验总是在教训中提炼。