游客发表
你打开服务器日志,网络发现有个IP在十分钟内请求了八千次登录接口。上找这不是到竞p地正常用户能干出来的事。它要么是争i址办脚本小子在跑字典,要么是网络竞品在爬你的数据。不管哪种,上找你都得先把这个IP搞清楚。到竞p地
第一步不是争i址办反击,是网络确认这个IP到底属于谁。直接拿IP去查归属地只能看到机房所在城市,上找比如“美国 加利福尼亚州 圣何塞”。到竞p地这不够。争i址办你需要用whois命令或者网页版工具查ASN(自治系统号)。网络ASN会告诉你这个IP段是上找租给谁的。我遇到过好几次,到竞p地查出来是DigitalOcean或AWS的弹性IP。这意味着对方用的是云服务器,不是家宽。云服务器做攻击,封IP基本没用——他删掉机器再开一台,IP就换了。
如果ASN显示是“CHINANET”或者“CMNET”,那可能是国内家宽。这种IP反而好办,因为家宽IP重播周期长,封了之后对方要等很久才能换。但别急着封。先看请求特征。有一次我注意到某个IP只请求/api/v1/user/login,而且User-Agent是空的。正常浏览器不会这样。我顺手在防火墙上加了一条规则:空UA的请求直接返回403。那个IP再也没出现过。它换IP也没用,因为规则匹配的是行为,不是地址。
另一个坑是CDN。你看到的“竞争IP”可能是Cloudflare的节点。对方把源站藏在CDN后面,你封了CDN的IP,等于把正常用户也封了。怎么判断?用curl -I看响应头里有没有cf-ray或者x-cache。有的话,别封IP,去查X-Forwarded-For或者CF-Connecting-IP。但这两个头可以被伪造。更可靠的办法是看TCP指纹。用p0f或者nmap的-O参数,能看出对方操作系统。如果显示是Linux 5.x,而你的用户全是Windows,那这个IP大概率是脚本。
确认了是恶意IP,下一步不是永久封禁。永久封禁会打草惊蛇。我一般先限速。用iptables的hashlimit模块,把来自那个IP的并发连接数压到2,每秒新建连接限制在1。这样对方还能连上,但速度慢到没法跑字典。他会以为是网络问题,继续挂着。这给了我时间抓包分析他的请求模式。有一次我通过限速拖了对方六个小时,最后抓到了他用的工具是hydra,版本号都从流量特征里认出来了。
如果对方用的是代理池,那单个IP封了没意义。你得看请求里的其他特征。比如Cookie里的session id格式、POST body的JSON字段顺序、甚至TLS握手的JA3指纹。JA3指纹特别有用。同一个工具生成的JA3指纹是一样的,哪怕IP换了。我在Nginx里加了个map,把已知的恶意JA3指纹映射到$blocked变量,然后if ($blocked) { return 444; }。这招封了三个不同的代理池,效果比封IP好得多。
最后说个真事。有个IP连续一周扫描我的SSH端口,每天换一个C段。我烦了,反向扫了它的22端口,发现它自己开着SSH,而且banner写着OpenSSH 7.4。我没做任何攻击,只是把它的IP和banner截图发到了它的whois邮箱里。第二天扫描停了。有时候让对方知道“我看见了”,比封IP更管用。
友情链接