企业实战题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题,转载请注明来源!
