①此脚本能自动过滤掉企业中通过NAT出去的白名单IP,很多企业都是通过NAT软路由上网,我们可以将一些与我们有往来的公司及本公司的安全IP添加进白名单,以防误剔;
②阀值DEFIIN这里定义的是100,其实这个值应该根据具体生产环境而定,50-100之间较好;
③此脚本原理其实很简单,判断瞬间连接数是否大于100,如果是白名单里的IP则跳过;如果不是,则用iptables -I来自动剔除,这里不能用-A,A是在iptables的规则的最后添加,往往达不到即时剔除的效果;
④此脚本最后更新时间为2010年5月24日,这里衷心感谢3158.com的技术总监唐老师,谢谢您在安全相关的指导;
⑤25是mail端口的,其它可依次类推,比如22,再比如80等,具体看你的服务器的应用;目前发现子链接过多的Web站点效果不好,我们这个时候可以用iptables的recent模块来解决,其它非Web应用效果还是不错的;
⑥如有疑问,请联系抚琴煮酒yuhongchun027@163.com.com。
脚本内容如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#/bin/bash
netstat
-an|
grep
:80 |
grep
-
v
127.0.0.1 |
awk
'{ print $5 }'
|
sort
|
awk
-F:
'{print $1,$4}'
|
uniq
-c |
awk
'$1 >50 {print $1,$2}'
>
/root/black
.txt
for
i
in
`
awk
'{print $2}'
/root/black
.txt`
do
COUNT=`
grep
$i
/root/black
.txt |
awk
'{print \$1}'
`
DEFINE=
"50"
ZERO=
"0"
if
[ $COUNT -gt $DEFINE ];
then
grep
$i
/root/white
.txt >
/dev/null
if
[ $? -gt $ZERO ];
then
echo
"$COUNT $i"
iptables -I INPUT -p tcp -s $i -j DROP
fi
fi
done
|
2009年3月30日下午14:25分,用下列命令监控时:
1
2
|
netstat
-an|
grep
:25 |
grep
-
v
127.0.0.1 |
awk
'{ print $5 }'
|
sort
|
awk
-F:
'{print $1}'
|
uniq
-c |
awk
'$1 >100'
|
此命令显示结果如下所示:
1122 219.136.163.207
17 61.144.157.236
用http://www.ip138.com一查,发现
ip138.com IP查询(搜索IP地址的地理位置)
您查询的IP:219.136.163.207
本站主数据:广东省广州市 电信(荔湾区)
参考数据一:广东省广州市 电信(荔湾区)
参考数据二:广东省广州市荔湾区 电信ADSL
调用deny_100.sh后将此IP Drop掉,再运行./root/count.sh后无显示,显示成功,可用iptables -nv -L验证,所以将此安全脚本写进crontab里,每10分钟运行一次,结果如下所示:
1
|
*
/10
* * * * root
/bin/sh
/root/deny_100
.sh
|