网站遭受扫描攻击,大量爬虫应对策略
网站的日志里突然有很多访问路径不存在的,有些ip地址也是国外的,而且访问是在深夜且次数非常频繁紧密。判定就是不怀好意的扫描网站寻找漏洞。也有些是爬虫,且是国外的爬虫,有的也是不知道的爬虫爬取网站。网站的真实流量不多,资源都被这些流氓给浪费了。
初始策略
起初发现某个ip,apache、防火墙封禁ip。
这个策略不好用,因为换个ip继续扫描。也不能实时盯着网站日志。
进一步策略
访问不存在的路径的ip,就记录下来,存储到redis,记录次数。
在入口文件检测当前访问的ip在redis里有没有记录,如果次数超过50次,直接返回404。
这个策略确实挡住了很多扫描,但是还是不能减少扫描。花钱购买防护软件不舍得。只能被动的防守。
终极策略
终于找到了反制策略,感谢大神。在此处也给自己记录一下。
反之策略zip炸弹。简单说,zip 炸弹是一种超小的压缩文件,解压之后却会变成一个巨大的文件,能让处理它的系统崩溃。
linux代码
dd if=/dev/zero bs=1G count=10 | gzip -c > /www/10GB.gz
这个命令的作用如下:
- dd:用于拷贝或转换数据;
- if:指定输入文件,这里是 /dev/zero,一个会不断生成零字节数据的特殊设备;
- bs=1G:设置块大小为 1GB,意味着每次处理 1GB 数据;
- count=10:处理 10 个这样的块,总共生成 10GB 的零数据;
- 然后我们将这些数据通过管道传给 gzip,生成一个压缩文件 10GB.gz,压缩后大小大约是 10MB。
//省略从redis获取当前ip的次数,假设$num就是次数
if ($num>50) { header("Content-Encoding: deflate, gzip"); $GB10="/www/10GB.gz";header("Content-Length: " . filesize($GB10)); readfile($GB10); exit;
}
流氓IP访问的时候,就直接返回这个10GB的压缩软件,让它解压缩解到崩溃。