首页 » Linux » 防DDOS攻击的脚本

防DDOS攻击的脚本

 

一、网上有一个脚本可以用,网址如下:

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攻击的脚本,转载请注明来源!

0