网站被刷流量,先别急着关站或者换服务器,大多数时候不是天塌了,而是有人用脚本或者IP池在搞事。你得先分清三种情况:一种是统计工具被刷,百度统计、GA、CNZZ里数字暴涨,但服务器日志没多少请求;一种是真有人用大量IP访问,服务器CPU、带宽、连接数被拉高,属于CC攻击或者恶意刷量;还有一种是广告联盟的点击被刷,钱被无效点击烧掉。这三种处理方式不一样,乱封IP反而容易误伤正常用户。
先把日志翻出来看。Nginx的access.log里,用命令统计一下单IP请求数,正常访客一天几十到几百个PV,刷量的单IP一分钟就能上百。再看时间分布,如果凌晨两三点突然来一波,UA全是空的,或者写着python-requests、curl、okhttp、Go-http-client,Referer也是空的,只请求首页或者某个固定URL,不加载CSS、JS、图片,那基本能确定是脚本。正常用户访问页面,浏览器会连带请求一堆静态资源,刷量脚本往往只打一个地址。统计后台也能看出问题:跳出率突然从40%到60%变成95%以上,平均停留时间0到3秒,转化率直接归零,地域集中在一个城市或者全是海外机房IP,实时访客里一串相同设备型号,这些都很可疑。
判断清楚之后,高手不会见IP就封。刷量的人手里有几十万IP池,封单个IP封不完。先上CDN和WAF,Cloudflare开Under Attack模式,国内CDN开CC防护,用JS挑战让脚本过不去,正常用户点一下就能进,脚本通常执行不了JS,直接挡掉大半。Nginx可以加限速,单IP每秒限制5到10个请求,突发给20,超过就返回503。并发连接也要限,单IP同时连接数别超过10。iptables配合fail2ban,对短时间内请求超限的IP自动封禁,封几个小时就行,别永久封。对空UA、恶意UA、特定恶意Referer,直接在Nginx里返回403,能省不少资源。
如果是统计被刷,服务器没压力,那就去统计后台加过滤器。百度统计可以屏蔽IP、屏蔽来源域名、屏蔽UA,GA用过滤器排除已知恶意IP和内部流量。广告投放后台设置单IP单日点击上限,屏蔽代理和机房IP,开启点击频率验证。广告联盟一般有反作弊团队,把日志、截图、后台数据整理好,提交申诉,有机会追回无效点击的钱。百度搜索资源平台也能反馈恶意点击,虽然不一定马上处理,但留个记录没坏处。
长期来看,源站IP要藏好,用CDN回源,关闭不必要端口,CMS及时更新,别被挂马变成别人的刷量肉鸡。服务器监控设好阈值,CPU、带宽、连接数一异常就告警,别等网站打不开才发现。API接口加签名和token,登录、搜索、表单加验证码,重要页面用行为验证,比如鼠标轨迹、停留时间、Cookie校验。高手处理刷流量,核心不是把每个IP都干掉,而是让刷量成本变高,让正常用户无感。能过滤的过滤,能限速的限速,能验证的验证,能申诉的申诉。最后记得清洗统计口径,别让刷出来的假数据影响你判断关键词和转化。网站被刷流量不可怕,可怕的是你拿假数据做真决策。
