一个简单的封ip规则

一个简单通过nginx日志封ip规则(仅仅自己方便使用)

#!/bin/bash
#Version:1.0
#Date:2016-08-09
#作用:防刷IP地址,解封蜘蛛,解封5天前封的IP地址

function deny ()
{
Date=$(date +"%F-%H-%M")
Date2=$(date +%s)
#awk '{a[$1]++};END {for(i in a) print i,a[i]}' /usr/local/nginx/logs/access.log|sort -rnk 2 | head -n 15 >/home/scripts/denyip.txt
grep -v -i 'ajax' /usr/local/nginx/logs/access.log | awk '{a[$1]++};END {for(i in a) print i,a[i]}' | sort -rnk 2 | head -n 15 >/home/scripts/denyip.txt
DEFINE="5000"
while read IP NUM
do
        if [ $NUM -gt $DEFINE ];then
                        grep -w "$IP" /home/scripts/white_list.txt > /dev/null
                        if [ $? != 0 ];then
                                grep -w "$IP" /home/scripts/black_list.txt > /dev/null
                                if [ $? != 0 ];then
                                        /sbin/iptables -A INPUT -p tcp --dport 80 -s $IP -j DROP
                                        echo "$Date2 $Date kill $IP" >> /home/scripts/black_list.txt
                                fi
                        fi
        fi
done</home/scripts/denyip.txt
}

function minute ()
{
Date=`date +"%H:%M:%S"`
Date2=`date +"%H:%M:%S" -d "$(date -d '-1minute')"`
Date3=$(date +%s)
Date4=$(date +"%F-%H-%M")
#awk '{a[$1]++};END {for(i in a) print i,a[i]}' /usr/local/data/nginx/logs/access.log|sort -rnk 2 | head -n 15 >>/home/scripts/denyip.txt
sed -n "/$Date2/,/$Date/p" /usr/local/data/nginx/logs/access.log | grep -v 'jQuery' | awk '{a[$1]++};END {for(i in a) print i,a[i]}' |sort -rnk 2 |head -n 15 >/home/scripts/minuteip.txt

DEFINE="60"
while read IP NUM
do
        if [ $NUM -gt $DEFINE ];then
                        grep -w "$IP" /home/scripts/white_list.txt > /dev/null
                        if [ $? != 0 ];then
                           grep -w "$IP" /home/scripts/black_list.txt > /dev/null || grep -w "$IP" /home/scripts/minute_black_list.txt > /dev/null
                           if [ $? != 0 ];then
                               /sbin/iptables -A INPUT -p tcp --dport 80 -s $IP -j DROP
                               echo "$Date3 $Date4 kill $IP" >> /home/scripts/minute_black_list.txt
                           fi
                        fi
        fi
done</home/scripts/minuteip.txt
}

function unlock ()
{
UNLOCK_DAY=`date +%s -d '-5 days'`
while read A B C D 
do
    if [ $A -lt $UNLOCK_DAY ]
    then											
	sed -n "/$D/p" /home/scripts/black_list.txt >> /home/scripts/black_list_long_time.txt
        /sbin/iptables -D INPUT -p tcp --dport 80 -s $D -j DROP
        sed -i "/$D/d" /home/scripts/black_list.txt
    fi
done</home/scripts/black_list.txt
}

function spider ()
{
#/sbin/service iptables status > /home/scripts/iptables_list.txt
#sleep 5
#IP_LIST=`grep "DROP" /home/scripts/iptables_list.txt | awk '{print $5}'`
IP_LIST=`awk '{print $NF}' /home/scripts/black_list.txt`
for i in $IP_LIST
do
    nslookup $i | grep -E "msn|googlebot|baiduspider|yahoo"
    if [ `echo $?` -eq 0 ]
    then
        echo $i >> /home/scripts/white_list.txt
        /sbin/iptables -D INPUT -p tcp --dport 80 -s $i -j DROP
        sed -i "/$i/d" /home/scripts/black_list.txt
    fi
done
MINUTE_IP_LIST=`awk '{print $NF}' /home/scripts/minute_black_list.txt`
for i in $MINUTE_IP_LIST
do
    nslookup $i | grep -E "msn|googlebot|baiduspider|sogouspider"
    if [ `echo $?` -eq 0 ]
    then 
        echo $i >> /home/scripts/white_list.txt
        /sbin/iptables -D INPUT -p tcp --dport 80 -s $i -j DROP
        sed -i "/$i/d" /home/scripts/minute_black_list.txt 
    fi  
done
}

function help ()
{
	echo -e "\033[31mUsage: \033[32m$0 deny|minute|unlock|spider|help\033[0m"
}

case $1 in
deny)
	deny
	;;
unlock)
	unlock
	;;
spider)
	spider
	;;
help)
	help
	;;
*)
	echo -e "\033[31mUsage: \033[32m$0 deny|minute|unlock|spider|help\033[0m"
	;;
esac

 

 

转载于:https://my.oschina.net/2726276586/blog/792464

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值