企业实战题6:请用至少两种方法实现!
写一个脚本解决DOS攻击生产案例
提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟。防火墙命令为:iptables -I INPUT -s 10.0.1.10 -j DROP。
答案:
[root@nfs_server scripts]# cat shell6.sh #!/bin/bash function iptables(){ while read line do ip=`echo $line|awk '{print $2}'` count=`echo $line|awk 'print $1'` ip_count=`iptables -L -n |grep $ip|wc -l` if [ $count -gt 100 -a $ip_count -lt 1 ] then iptables -I INPUT -s $ip -j DROP echo "$line is dropped" >>/tmp/droplist.log fi done</tmp/log } function main(){ while true do `grep -v "^$" access_www.log |awk '{print $1}'|sort|uniq -c `>/tmp/log #netstat -an|grep EST|awk -F '[: ]+' '{print $6}'|sort|uniq -c >/tmp/log iptables sleep 180 done } main [root@nfs_server scripts]#
别人的答案:
[root@shell scripts] # vi dos.sh #!/bin/bash log= /tmp/tmp .log [ -f $log ] || touch $log function add_iptables(){ whileread line do ip=` echo $line| awk '{print $2}' ` count=` echo $line| awk '{print $1}' ` if [ $count -gt 100 ] && [`iptables -L -n| grep "$ip" | wc -l` -lt 1 ] then iptables -I INPUT -s $ip -jDROP echo "$line isdropped" >> /tmp/droplist .log fi done <$log } function main(){ whiletrue do #awk '{print $1}' access.log|grep-v "^$"|sort|uniq -c >$log netstat -an| grep EST| awk -F '[:]+' '{print $6}' | sort | uniq -c >$log add_iptables sleep 180 done } main |
原文链接:20道shell第6题,转载请注明来源!