62. 脚本:解决ddos攻击
10. 解决DOS攻击¶
请根据web日志或者网络连接数,监控当某个IP并发链接数或者短时间内PV达到100,即调用防火墙命令封掉对应的IP。
防火墙命令为:iptables -I INPUT -s IP -j DROP
思路分析
1.封IP命令
iptables -I INPUT -s IP -j DROP
2.web日志活网络链接数
netstat -an|grep -i est
3.判断pv或者链接数大于100,取出IP封掉
脚本
#!/bin/bash
awk '{S[$1]++}END{for(key in S) print S[key],key}' access.log |sort -rn |head >/tmp/ip.log
while read line
do
if [ `echo $line |awk '{print $1}'` -gt 100 ];then
iptables -I INPUT -s `echo $line|awk '{print $2}'` -j DROP && \
echo "echo $line |awk '{print $2}'" >>/tmp/drop.log
else
echo "echo $line|awk '{print $2}'" >>/tmp/accept.log
fi
done </tmp/ip.log
改造
#!/bin/bash
awk '{S[$1]++}END{for(key in S) print S[key],key}' access.log |sort -rn |head >/tmp/ip.log
while read line
do
ip=`echo $line |awk '{print $2}'`
count=`echo $line |awk '{print $1}'`
if [ $count -gt 35 -a `grep "$ip" /tmp/drop.log|wc -l` -lt 1 ];then
iptables -I INPUT -s $ip -j DROP && \
echo "$ip" >>/tmp/drop.log
else
echo "$ip" >>/tmp/accept.log
fi
done </tmp/ip.log
方法2
#!/bin/bash
awk '/ESTAB/{print $0}' netstat.log |awk -F "[ :]+" '{print $(NF-3)}' |sort |uniq -c |sort -rn |head >/tmp/ip.log
while read line
do
ip=`echo $line|awk '{print $2}'`
count=`echo $line|awk '{print $1}'`
if [ $count -gt 100 -a `grep "$ip" /tmp/drop.log |wc -l` -lt 1 ];then
iptables -I INPUT -s $ip -j DROP
echo $ip >>/tmp/drop.log
else
echo $ip >>/tmp/accept.log
fi
done</tmp/ip.log
最后更新:
2022-02-19 13:59:07