介绍
脚本使用bash编写,仅作简单防御,增加采集复杂度
原理是通过采集器的特点,请求频率高并只请求关键文件(html,php…),而不请求无关文件(css,js,jp…)来进行筛选并放入iptables
采集者请求的log样例
122.70.137.104 – – [10/Jun/2010:13:11:05 +0800] “GET /chongqingjob/list_1.html HTTP/1.0” 200 24013 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 2.0.93341)” –
122.70.137.104 – – [10/Jun/2010:13:11:05 +0800] “GET /chongqingjob/list_2.html HTTP/1.0” 200 22803 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 2.0.97314)” –
122.70.137.104 – – [10/Jun/2010:13:11:05 +0800] “GET /chongqingjob/list_3.html HTTP/1.0” 200 22397 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 2.0.99305)” –
122.70.137.104 – – [10/Jun/2010:13:11:05 +0800] “GET /yunnanjob/list_1.html HTTP/1.0” 200 23545 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 2.0.2415)” –
122.70.137.104 – – [10/Jun/2010:13:11:05 +0800] “GET /yunnanjob/list_2.html HTTP/1.0” 200 22274 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 2.0.96797)” –
122.70.137.104 – – [10/Jun/2010:13:11:06 +0800] “GET /yunnanjob/list_3.html HTTP/1.0” 200 22222 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 2.0.33279)” –
122.70.137.104 – – [10/Jun/2010:13:11:06 +0800] “GET /guizhoujob/list_1.html HTTP/1.0” 200 23911 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 2.0.34389)” –
122.70.137.104 – – [10/Jun/2010:13:11:06 +0800] “GET /guizhoujob/list_2.html HTTP/1.0” 200 22928 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 2.0.4951)” –
122.70.137.104 – – [10/Jun/2010:13:11:06 +0800] “GET /guizhoujob/list_3.html HTTP/1.0” 200 22232 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 2.0.18697)” –
脚本默认配置
1.每3分钟运行一次
2.检查是否清除iptables中的采集ip
2.取出前3分钟排除百度等蜘蛛后的访问日志
3.取出防问量大于60的前三个ip
4.检查是否是可信任ip
5.检查请求favicon.ico的次数是否大于2
6.将采集ip放入iptable
参数说明
#运行log日志位置
V_DEBUGLOG=./kickleech.log
#apache或nginx的访问日志
V_LOG=/opt/nginx/logs/blog.c1gstudio.com.log
#访问日志临时文件
V_TMPFILE=/opt/nginx/logs/kickleechtmp.log
#ip临时存放位置
V_IPTMPFILE=./kickleechip.log
#最前几分钟的访问日志
V_TIMELIMIT=3
#请求频率,大于此值才会进行审核
V_THRESHOLD=60
#取多少个ip放入iptables中(按请求次数降序)
V_MAXIP=3
#可信任的ip地址
V_SAFEIP=”192.168.0.15 222.147.111.3 222.236.154.162″
#验证字符,如果在${V_TIMELIMI}分钟内请求${V_CODE}少于${V_REQUESTNUM}次将会被认为是采集者
V_CODE=’favicon.ico’
#是否放入iptables中(iptables不作保存,重载或重启会清除之前记录的ip),1=放入,0=仅记录
V_IPTABLES=1
#用于iptables的web访问端口
V_HTTPPORT=80
#清除采集者的时间,当系统为3,12…分会清除采集ip,采集者又可以采了
#需和crontab的时间设定配合,仅仅清空采集相关ip
V_IPTABLESFLUSHTIME=”3 12 21 33 42 51″
V_REQUESTNUM=2
V_CODE参数说明
V_CODE=’favicon.ico’
可以设置成某个css或图片等
这里的配置为favicon.ico,也就是收藏的小图标,浏览器访问时默认会自动请求根目录下此文件,确保存在。
不要设置expires时间,否则日志中不会记录访问请求
以下为nginx设置
location ~(favicon.ico) {
#log_not_found off;
expires -1;
break;
}
这样可以在有缓存时也产生个304请求
222.236.154.162 – – [10/Jun/2010:10:50:37 +0800] “GET /favicon.ico HTTP/1.1” 200 3638 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9 ( .NET CLR 3.5.30729)” –
222.236.154.162 – – [10/Jun/2010:10:52:13 +0800] “GET /favicon.ico HTTP/1.1” 304 0 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9 ( .NET CLR 3.5.30729)” –
kickleech.log日志记录格式
=====Thu Jun 10 13:12:01 CST 2010========
Flush iptables #清空iptables中相关ip
148 122.70.137.104#请求次数和ip
Bad guy 122.70.137.104 #审核为采集者
iptables 122.70.137.104 #放入了iptables
=====Thu Jun 10 13:15:01 CST 2010========
None IP #没有超过指定请求数
=====Thu Jun 10 13:18:01 CST 2010========
165 222.236.154.162
155 125.69.85.71
Safe ip 222.236.154.162 #信任的ip
That’s ok 125.69.85.71 #审核为不是采集者
=====Thu Jun 10 13:18:03 CST 2010========
235 202.102.111.124
That’s ok 202.102.111.124 #审核为不是采集者
安装使用
下载脚本并上传到/opt/shell
chmod 0755 /opt/shell/kickleech.sh
以root身份运行
crontab -e
添加自动运行
*/3 * * * * cd /opt/shell && /bin/sh ./kickleech.sh > /dev/null 2>&1
下载脚本
kickleech.zip
写的很好,顶支持一下