一、网上有一个脚本可以用,网址如下:
wget http://www.inetbase.com/scripts/ddos/install.sh
下载下来,sh install.sh会自动安装,安装在/usr/local/ddos下面,安装之后目录如下:
[root@7-node1 ddos]# ls
ddos.conf ddos.sh ignore.ip.list LICENSE
[root@7-node1 ddos]# pwd
/usr/local/ddos
[root@7-node1 ddos]#
ddos.conf配置文件,ddos.sh是命令,ignore.ip.list相当于白名单
我查看了一下ddos.sh其实也就是一个脚本命令,还不适用于centos7,要想适用于centos7,做一下改动就可以了。安装的时候会自动创建一个定时任务在/etc/cront.d/ddos。
默认是150次会自动封ip。
二、以下是自己写的脚本:
根据访问日志来的
以下是针对centos6.*的,
#!/bin/bash
function abc() {
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" -ge 100 -a "$ip_count" -lt 1 ]
then
iptables -I INPUT -s "$ip" -j DROP
echo "$line is dropped" >>./droplist.log
fi
done<./ip.txt
}
function main(){
while true
do
tail -2000 /root/access-m.log-20160831|grep -v "^$" |awk -F '"' '{print $8 }'|sort|uniq -c |sort -rn|head > ./ip.txt
abc
sleep 120
done
}
main
centos7
#/bin/bash
function abc() {
while read line
do
ip=`echo $line|awk '{print $2}'`
count=`echo $line|awk '{print $1}'`
ip_count=`firewall-cmd --list-all |grep "$ip"|wc -l`
if [ "$count" -gt 100 -a "$ip_count" -lt 1 ]
then
firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address="$ip" drop" >/dev/null && \
firewall-cmd --reload >/dev/null
echo "$line is dropped" >>./droplist.log
fi
done<./ip.txt
}
function main(){
while true
do
tail -2000 /root/access-m.log-20160831|grep -v "^$" |awk -F '"' '{print $8 }'|sort|uniq -c |sort -rn|head > ./ip.txt
abc
sleep 120
done
}
main
解除ip:
centos7的脚本如下:判断条件可以自行修改,以下是当2000条记录里少于10次访问且已经有封的ip就给予开启访问。也可以放在定时任务,直接把while去掉就可以,也可以放在后台运行,就不需要去掉,看时间间隔,1分钟以内放在后台比较好,超过1分钟最好是用定时任务。
[root@7-node3]/home/clc/scripts# cat visit_ip_drop_to_recovery.sh
#!/bin/bash
function recovery() {
while read line
do
ip1=`echo $line|awk '{print $2}'`
count1=`echo $line|awk '{print $1}'`
ip_count1=`firewall-cmd --list-all |grep "$ip1"|wc -l`
if [ "$count1" -lt 10 -a "$ip_count1" -ge 1 ]
then
firewall-cmd --permanent --remove-rich-rule="rule family=ipv4 source address="$ip1" drop" >/dev/null && \
firewall-cmd --reload >/dev/null
echo "$line is recovery" >>./iprecoverylist.log
fi
done<./ipcount.txt
}
function main(){
while true
do
tail -2000 /root/access-m.log-20160831|grep -v "^$" |awk -F '"' '{print $8 }'|sort|uniq -c |sort -rn > ./ipcount.txt
recovery
sleep 120
done
}
main
centos6下的脚本如下:
[root@node-test4 scripts]# cat visit_ip_drop_to_recovery.sh
#!/bin/bash
function recovery() {
while read line
do
ip1=`echo $line|awk '{print $2}'`
count1=`echo $line|awk '{print $1}'`
ip_count1=`iptables -L -n|grep "$ip1"|wc -l`
if [ "$count1" -lt 10 -a "$ip_count1" -ge 1 ]
then
iptables -D INPUT -s "$ip1" -j DROP
echo "$line is recovery" >>./drop_recovery_list.log
fi
done<./ipcount.txt
}
function main(){
while true
do
tail -2000 /root/access-m.log-20160831|grep -v "^$" |awk -F '"' '{print $8 }'|sort|uniq -c |sort -rn > ./ipcount.txt
recovery
sleep 120
done
}
main
原文链接:防DDOS攻击的脚本,转载请注明来源!