Linux服务器自动封禁采访拾分的IP脚本

2019-08-10 17:46 来源:未知

Linux服务器自动封禁访问拾叁分的IP脚本(一)

问题:
前不久发现好多大并发爬大家网址部分接口的爬虫,导致常常性带宽非凡和劳务十一分,为了一时半刻性偷懒,写脚本活动封禁那一个IP。
思路和方法:
因而日志排查,发掘那些爬虫IP比较少,但是出现相当大,基本在10-20并发之间,平常的单IP央求差十分的少非常少有10并发以上的,所以拍卖的思绪正是
采纳iptables有时封禁这个非常IP,封禁准则每5分钟单IP央求量超越三千次,即5分钟内单IP并发当先10,封禁此IP,其余为了防卫封错,脚本自动每 5分钟解除禁令5分钟前封禁的IP地址。
实现:
为了轻松管理,使用shell crontab完毕脚本处理。
脚本:

#!/bin/sh
##Author:bbzsxjj
##Email:[email protected]
##Usage:auto deny ip by iptables
##Ver:1.0
timenow=`date '%H%M00'`
timelast=`date '%H%M00' -d '-5min'`
lastnum=1000000 ##日志的行数,可以根据自己的业务频率选取
limitnum=3000 ##并发限制,300*10
ipbin=/sbin/iptables
NeedDenyiplist=/opt/sbin/ipdeny.list
NeedPurgeiplist=/opt/sbin/ippurge.list
LogFile=/data/logs/haproxy.log
CreateList(){
if [ -f ${LogFile} ]
then
if [ -f ${NeedDenyiplist} ]
then
mv ${NeedDenyiplist} ${NeedPurgeiplist}
fi
tail -n${lastnum} ${LogFile}|awk '{gsub(/:/,"",$3);if($3>='${timelast}' && $3<='${timenow}'){a[$6] }}END{for(i in a){if(a[i]>'${limitnum}'){print $6}}}' >>${NeedDenyiplist} ##这里需要根据日志的格式进行处理,具体的需要根据实际情况修改处理方法
if [ `wc -l ${NeedDenyiplist}|awk '{print $1}'` -eq 0 ]
then
rm -rf ${NeedDenyiplist}
fi
fi

}


DenyIP(){
for Dip in `cat ${NeedDenyiplist}|grep -E -v '^$|#'`
do
${ipbin} -I INPUT -s ${Dip} -p tcp --dport 80 -j DROP
done
}
PurgeIP(){
for Dip in `cat ${NeedPurgeiplist}|grep -E -v '^$|#'`
do
${ipbin} -D INPUT -s ${Dip} -p tcp --dport 80 -j DROP
done
}


main(){
CreateList
if [ -f ${NeedPurgeiplist} ]
then
PurgeIP
fi
if [ -f ${NeedDenyiplist} ]
then
DenyIP
fi
}
main

后来增多crontab:
###denyip
*/5 * * * * /bin/sh /opt/sbin/denyip.sh >/dev/null 2>&1;

) 难题: 近些日子察觉非常多大并发爬大家网址部分接口的爬虫,导致平时性带宽非凡和劳务十二分,为了...

TAG标签: 韦德娱乐1946
版权声明:本文由韦德娱乐1946_韦德娱乐1946网页版|韦德国际1946官网发布于韦德娱乐1946网页版,转载请注明出处:Linux服务器自动封禁采访拾分的IP脚本