360Spider假蜘蛛IP识别与屏蔽:教你踢掉假冒360蜘蛛省流量
上周帮一个做外贸B2B的哥们看服务器,他的Linode机器CPU天天拉满90%,本以为是海外业务量暴涨,翻了Nginx访问日志才发现,满屏全是UA写着“360Spider”的请求在疯狂扫他的产品库。对于常年折腾服务器的运维和老站长来说,360Spider假蜘蛛IP识别与屏蔽属于每个建站人都绕不开的必修课。很多人以为改个User-Agent就是蜘蛛,任由这些打着搜索引擎旗号的垃圾爬虫把服务器带宽和内存吃光,今天我就把平时在生产环境上跑得最稳的识别逻辑和封杀方案掏出来,不讲虚概念,直接给命令和配置。
为什么总有假蜘蛛盯着你的站?
说白了就是两点:低成本采集和逃避防护。
很多搞灰产、恶意扫描漏洞、全网扒文章做站群的脚本小子,最喜欢干的事就是把爬虫的请求头伪造成百度(Baiduspider)、360(360Spider)或者谷歌(Googlebot)。因为很多站长配的安全插件或者防火墙,默认会对搜索引擎蜘蛛放行。
真360蜘蛛就算抓取频率再激进,它的请求也是有节制的,并且只对内容页面感兴趣。而假蜘蛛通常有这几个典型特征:
- 死命怼动态接口:狂刷搜索接口、分页参数或者后台登录页(比如
/wp-login.php)。 - 频率高得反常:一秒钟几十个并发,根本不在乎服务器死活。
- 只抓不遵守robots:很多根本不读你的
robots.txt,拿个Python requests库加个伪造Header就开跑。
第一步:用正反向DNS解析抓现行
别看日志里User-Agent写得天花乱坠,IP地址是骗不了人的。官方搜索引擎蜘蛛的IP,一定能通过反向DNS(PTR记录)解析回官方域名。这也是目前最权威、最靠谱的辨别手段。
随便从日志里抓一个自称是360Spider的IP,假设是 180.163.220.15,登录你的Linux终端,直接用 host 或 dig 命令验证:
# 1. 先做反向DNS解析
host 180.163.220.15
如果返回的主机名后缀是 *.so.com 或者 *.360.cn,别急,还没完,因为PTR记录理论上也能被人伪造(如果你用的公共DNS被劫持)。你必须拿解析出来的域名再做一次正向解析:
# 2. 正向解析刚才拿到的域名
host crawl.360.cn
如果最终正向解析出来的IP,跟你日志里抓到的IP完全一致,这才是真360蜘蛛。
但凡遇到下面这几种情况,直接判死刑,100%是假爬虫:
- 反向解析返回的是机房名字、宽带运营商(比如电信、联通、海外IDC服务商)。
- 反向解析直接提示
Host not found(NXDOMAIN)。 - 解析出来的域名根本不是360官方的根域。
第二步:排查近期日志中的假蜘蛛
如果你想看看这几天到底有多少假李鬼在霍霍你的VPS,可以用下面这行Shell脚本。它会过滤出访问日志中UA包含360Spider的IP,并自动进行双向解析验证,把假IP挑出来:
#!/bin/bash
# 抓取日志中访问量前20的360Spider IP并验证
LOG_FILE="/var/log/nginx/access.log"
awk -F'"' '($6 ~ /360Spider/) {print $1}' $LOG_FILE | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 20 | while read count ip; do
domain=$(host $ip | awk '{print $NF}' | sed 's/\.$//')
if [[ "$domain" =~ (360\.cn|so\.com)$ ]]; then
# 二次核对正向解析
check_ip=$(host $domain | awk '{print $NF}')
if [ "$check_ip" == "$ip" ]; then
echo "[真实蜘蛛] IP: $ip (请求次数: $count)"
else
echo "[假冒蜘蛛] IP: $ip (请求次数: $count) -> 假域名"
fi
else
echo "[假冒蜘蛛] IP: $ip (请求次数: $count) -> 宿主: $domain"
fi
done
跑完这个脚本,你心里就有数了。如果是纯外贸站(目标市场完全在欧美),说实话360甚至百度蜘蛛来不来都无所谓;但如果是中文站,就要把真蜘蛛留下,把假蜘蛛全拍死。
第三步:实战屏蔽方案,哪种最痛快?
识别出来假IP之后,不要用WordPress那些拖慢性能的安全插件去拦,一定要在系统底层或者Web服务器层直接掐断。
方案一:Nginx 层面直接打入冷宫(推荐)
如果你的站点用了Nginx,可以在配置里写个轻量级的规则。对于这种假借UA之名、四处刺探漏洞的IP,直接返回403或444(444连HTTP头都不回,直接断开TCP连接,最省机器流量)。
在 nginx.conf 的 http 块中加入映射逻辑,结合IP名单做过滤:
# 建立一个假蜘蛛封禁名单
geo $fake_360_spider {
default 0;
# 这里放你抓出来的恶意假蜘蛛网段/IP
123.151.42.0/24 1;
114.119.128.0/24 1;
45.154.255.88 1;
}
server {
listen 80;
server_name yourdomain.com;
# 如果命中恶意IP,并且UA还在伪装360
if ($fake_360_spider) {
return 444;
}
# ... 其他原有配置
}
方案二:Linux 内核级拦截(ipset + iptables)
如果某些扫描器IP死缠烂打,哪怕Nginx返回444也在疯狂消耗你的并发连接数,那就用Linux底层的 ipset。把几百上千个假IP扔进集合里,系统内核直接在网络层丢弃数据包(DROP),机器负载几乎不受影响。
# 1. 安装ipset并创建黑名单集合
sudo apt install ipset -y # CentOS用 yum install ipset -y
sudo ipset create fake_spiders hash:net
# 2. 把假IP或网段加进去
sudo ipset add fake_spiders 45.154.255.88
sudo ipset add fake_spiders 185.220.101.0/24
# 3. 绑定到iptables规则中(输入链直接DROP)
sudo iptables -I INPUT -m set --match-set fake_spiders src -j DROP
只要监控日志发现新的毒瘤IP,直接执行 ipset add fake_spiders x.x.x.x,秒级生效。
方案三:Cloudflare WAF 规则(最省心)
现在做站基本都在CF后面,免费版的 Cloudflare 就能把假蜘蛛治得服服帖帖。
直接进 CF 控制台 -> 安全性(Security) -> WAF -> 自定义规则(Custom Rules):
- 规则名称:Block Fake 360Spider
- 匹配条件:
User Agent包含360Spider- AND
Verified Bot等于Off(即不是CF官方认证的合规爬虫)
- 执行操作:直接选择 Block(阻止) 或者 Managed Challenge(托管质询)
因为Cloudflare会自动帮我们做PTR反向核验,如果对方自称是360Spider,但在CF的数据库里没通过反查验证,Verified Bot 就是关闭状态。只要这一条规则推下去,全球CDN节点直接帮你把假蜘蛛挡在门外,你的VPS连它的一个数据包都不会收到。
运维老鸟的踩坑提醒
做运维和SEO这么多年,千万记住:封IP可以手快,但不要图省事封整个大段。有时候某个假IP来自国内某个机房,如果你脑子一热把 180.163.0.0/16 整个C段或B段全干掉,真360或者其他正常用户的访问可能也被你顺手送走了。
针对纯外贸独立站,国内的搜索引擎蜘蛛(神马、360、百度)如果对你业务毫无价值,在Nginx里根据UA匹配一刀切拦截没有任何毛病,还能省下一大笔服务器流量费。但如果你做的是国内站或者多语言站,一定要走一遍上面的“反查域名”流程,分清楚是真抓取还是黑客扫描,宁可错放一个,也别手抖封掉真蜘蛛让自己的权重往下掉。把这套防护流程理顺了,服务器起码能降温一半。

