由于有的时候服务器会被DDOS攻击,经过几次实际的处理后,我制作了一套防御DDOS的脚本。比起一般的DDOS防御脚本来说,我可以设置白名单,来让自己的IP不受干扰。
此外,这个防御DDOS的脚本还会记录下每个被封的IP的连接数信息,方便后期的分析。被封杀的IP也会有日志记录可查。
这套脚本需要cron的支持,1分钟执行一次,检查当前的连接情况并对超过设置的连接进行屏蔽处理。而屏蔽方面则依赖于iptables。如果Linux Server上安装有这两个支持,那么就可以使用我的这个脚本来进行DDOS防御了。
默认情况下,脚本的防御为连接数超过40个的IP。如果您需要请调整注释处的数字符合您的需求。此外,这套脚本默认放在/usr/local/ddos下,脚本名称为ddos.sh。如果需要更改目录,请对脚本中的路径进行对应的修改即可。
脚本如下:
#!/bin/bash
netstat -an| grep :80 |awk '{ print $5 }' | sort|awk -F: '{print $1}' | uniq -c | awk '$1 >40' | awk '$2 != ""' > /usr/local/ddos/black.txt
netstat -an| grep :80 |awk '{ print $5 }' | sort|awk -F: '{print $4}' | uniq -c | awk '$1 >40' | awk '$2 != ""' >> /usr/local/ddos/black.txt
cnt=0
for i in `awk '{print $2}' /usr/local/ddos/black.txt`
do
if [ ! -z "$i" ];
then
COUNT=`grep $i /usr/local/ddos/black.txt | awk '{print \$1}'`
DEFINE="40"
ZERO="0"
if [ $COUNT -gt $DEFINE ];
then
grep $i /usr/local/ddos/white.txt > /dev/null
if [ $? -gt $ZERO ];
then
IPEX=`iptables -nL | grep "$i"`
if [ -z "$IPEX" ];
then
echo "$COUNT $i"
iptables -I INPUT -s $i -j DROP
echo -e "[`date "+%Y-%m-%d %T"`] IP: $i\tCOUNT: $COUNT" >> /usr/local/ddos/banned.log
fi
fi
fi
((cnt=cnt+1))
fi
done
echo "[`date "+%Y-%m-%d %T"`] Script runned, found $cnt." >> /usr/local/ddos/run.log
|
脚本的设置如下,编辑cron的配置文件/etc/crontab,添加下列信息进去:
*/1 * * * * root /usr/local/ddos/ddos.sh
0 * * * * root iptables --flush
|
第一条是1分钟执行一次防御脚本,第二条是每小时清理一次IP禁止列表。第二条是可选的,主要是为了将已经封杀的IP解禁,避免过多的封杀或者误杀。一个小时的禁止时间也已经足够了。
(责任编辑:IT) |