`

iptables 拉黑ip

阅读更多

封单个ip命令

iptables -I INPUT -s 211.1.0.0 -j DROP

 

封ip段

iptables -I INPUT -s 211.1.0.0/16 -j DROP 

整个ip段

iptables -I INPUT -s 211.0.0.0/8 -j DROP

 

使用shell脚本执行后台程序线程,10s执行一次过滤非法ip

 

filter_blackip.sh脚本

#!/bin/bash

#Desc:Auto filter and deny black ip script.

#取得参数$1为最大访问参数,若留空则默认允许单IP最大N并发

if [[ -z $1 ]];then

        num=N

else 

        num=$1

fi

 

#进入到脚本工作目录(当前执行的shell文件所在的路径及文件名)

cd $(cd $(dirname $BASH_SOURCE) && pwd)

 

#请求检查、判断及拉黑主功能函数

function check(){

        iplist=`netstat -an |grep ^tcp.*:80|egrep -v 'LISTEN|127.0.0.1'|awk -F"[ ]+|[:]" '{print $6}'|sort|uniq -c|sort -rn|awk -v str=$num '{if ($1>str){print $2}}'`

        if [[ ! -z $iplist ]];

                then

                >./black_ip.txt

                for black_ip in $iplist

                do

                        #白名单过滤中已取消IP段的判断功能,可根据需要自行修改以下代码(请参考前天写的脚本)

                        #exclude_ip=`echo $black_ip | awk -F"." '{print $1"."$2"."$3}'`

                        #grep -q $exclude_ip ./white_ip.txt

                        grep -q $black_ip ./white_ip.txt

                        if [[ $? -eq 0 ]];then

                                echo "$black_ip (white_ip)" >>./black_ip.txt

                        else

                                echo $black_ip >>./black_ip.txt     

                                iptables -nL | grep $black_ip ||(iptables -I INPUT -s $black_ip -j DROP & echo "$black_ip  `date +%Y-%m-%H:%M:%S`">>./deny.log & echo 1 >./sendmail)

                        fi

                done

                #存在并发超过阈值的单IP就发送邮件

                if [[ `cat ./sendmail` == 1 ]];then sendmsg;fi

        fi

}

 

#发邮件函数

function sendmsg(){

        netstat -nutlp | grep "sendmail" >/dev/null 2>&1 || /etc/init.d/sendmail start >/dev/null 2>&1

        echo -e "From: 发邮件地址@qq.com\nTo:收邮件地址@qq.com\nSubject:Someone Attacking your system!!\nIts Ip is" >./message

        cat ./black_ip.txt >>./message

        /usr/sbin/sendmail -f 发邮件地址@qq.com -t 收邮件地址@qq.com -i <./message

        >./sendmail

}

 

#间隔10s无限循环检查函数

while true

do 

        check

        #每隔10s检查一次,时间可根据需要自定义

        sleep 10

 

done

 

 

 

进入到脚本文件所在目录,执行脚本

 

nohup ./deny_blackip.sh 50 &
 
ps aux 查看后台进程
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics