本文介绍的是一个自动分析黑名单和白名单的iptables 脚本,即/root/deny_100.sh,脚本实现功能如下:
①此脚本能自动过滤掉企业中通过NAT出去的白名单IP,很多企业都是通过NAT软路由上网,我们可以将一些与我们有往来的公司及本公司的安全IP添加进白名单,以防误剔;
②阀值DEFIIN这里定义的是100,其实这个值应该根据具体生产环境而定,50-100之间较好;
③此脚本原理其实很简单,判断瞬间连接数是否大于100,如果是白名单里的IP则跳过;如果不是,则用iptables -I来自动剔除,这里不能用-A,A是在iptables的规则的最后添加,往往达不到即时剔除的效果;
④此脚本最后更新时间为2010年5月24日,这里衷心感谢3158.com的技术总监唐老师,谢谢您在安全相关的指导;
⑤25是mail端口的,其它可依次类推,比如22,再比如80等,具体看你的服务器的应用;
⑥如有疑问,请联系抚琴煮酒yuhongchun027@163.com。
[root@mail ~]# cat /root/deny_100.sh
#/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分,用下列命令监控时:
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 –nL验证,所以将此安全脚本写进crontab里
*/1 * * * * root /bin/sh /root/deny_100.sh
效果如下:
工作中的Linux防火墙经验心得
一、iptables防火墙并不能阻止DDOS攻击,建议在项目实施中采购硬件防火墙,置于整个系统之前,用于防DDOS攻击和端口映射;如果对安全有特殊要求,可再加上应用层级的防火墙,比如天泰防火墙,其功能强大如此:①天泰WEB应用防火墙基于对数据报文头部和载荷完整的检测,对WEB应用客户端输入进行验证,从而对各类已知的及新兴的WEB应用威胁提供全方位的防护,如SQL注入、跨站脚本、蠕虫、黑客扫描和攻击等;②天泰WEB应用防火墙提供对目前国内比较泛滥的DDOS攻击的防护。针对WEB应用进行的带宽和资源耗尽型DDOS攻击,都可轻松应对。尤其针对应用层的DDOS攻击,提供细粒度的防护,其它优点这里不一一介绍了。
二、在项目实施中建议关闭服务器的iptables防火墙,目的为:①更好的提高后端服务器网络性能;②方便数据流在整个业务系统内部流通,安全方面工作由硬件防火墙来承担。
三、我目前主要将iptables用于内部作NAT防火墙,它的性能和方便管理性确实强悍,经迅雷测试可发现,公司内部的10M带宽能被利用得一丝无余;武汉地区比较常用的软件路由器是海蜘蛛,这个其实也是iptables的二次开发;前二年替朋友网吧布署网吧的路由器,我强烈推荐的是让iptables作NAT路由转发,事实证明效果很好。
四、iptables的L是命令,而-v和-n只是作为选项,它们不能进行组合,如-Lvn;如果要列出防火墙详细规则,可采用iptables -nv -L;
五、如果是使用远程来调试iptables防火墙,最好是设置crontab作业是定时停止防火墙,以防自己被锁定,5分钟停止一次iptables即可,等整个脚本完全稳定后再关闭此crontab作业。
六、如果使用默认禁止一切策略,即应立即使用回环接口lo(因为禁止一切包括了lo);附注:回环接口lo在Linux系统中被用来提供本地、基于网络的服务的专用网络接口,不用把本地数据流通过网络接口驱动器发送,而是采用操作系统通过回环接口发送,采取的捷径,大大提高了性能。
七、如果是电信或双线机房托管的服务器,在没有配置前端硬件防火墙的情况下,Linux主机一定要开启iptables防火墙,windows2003主机开启它自带的系统防火墙,并禁ping。