自己写的一个防止采集或CC或大量恶意访问的脚本

自己写的一个防止采集或CC或大量恶意访问的脚本

通过日志筛选ip

[root@xxxxx-web sh]# cat firewall_cron.sh
#!/bin/bash
#added by eugene@jjger.com —20240310

#定义脚本处理的ip文件,每天清理一次
firewall_cron_log=’/home/sh/firewall_cron.log’

#定义网站日志文件
logpath=’/data/log/nginx/access/’

arr_line=()
i=0

#while read line
#do
# arr_line[$i]=$line
# i=`expr $i + 1`
#done < $firewall_cron_log
#
#echo ${arr_line[*]}

while read line
do
if [ -z $ips ];then
ips=$line
else
ips=”$ips|$line”
fi
done < $firewall_cron_log

#echo $ips

#查找日志文件中的ip,$ips是已处理过的日志访问ip
if [ -z $ips ];then
max_visit=`grep -v ‘Googlebot’ $logpath/weblog.log | grep -v ‘baidu’ | grep -v ‘127.0.0.1’ |awk ‘{print $2}’ | sort -n | uniq -c | sort -n | tail -n 1`
else
max_visit=`grep -v ‘Googlebot’ $logpath/weblog.log | grep -v ‘baidu’ | grep -v ‘127.0.0.1’ | egrep -v $ips | awk ‘{print $2}’ | sort -n | uniq -c | sort -n | tail -n 1`
fi
#echo $?

#查看筛选出的ip,可注销下面这一行echo
echo $max_visit
#转化成数组后处理,默认处理5个,但后续更改为只处理一个ip,按计划任务轮训处理.
arr_max_visit=($max_visit)

if [ ${arr_max_visit[0]} -gt 2000 ]; then
iptables -L -n -v | grep ${arr_max_visit[1]}
if [ $? -eq 1 ];then
iptables -I INPUT -p tcp -s ${arr_max_visit[1]} -j DROP
echo ${arr_max_visit[1]} >> firewall_cron.log
fi
fi
exit
if [ ${arr_max_visit[2]} -gt 2000 ]; then
iptables -I INPUT -p tcp -s ${arr_max_visit[3]} -j DROP
fi
if [ ${arr_max_visit[4]} -gt 2000 ]; then
iptables -I INPUT -p tcp -s ${arr_max_visit[5]} -j DROP
fi
if [ ${arr_max_visit[6]} -gt 2000 ]; then
iptables -I INPUT -p tcp -s ${arr_max_visit[7]} -j DROP
fi
if [ ${arr_max_visit[8]} -gt 2000 ]; then
iptables -I INPUT -p tcp -s ${arr_max_visit[9]} -j DROP
fi

 

发表回复

您的电子邮箱地址不会被公开。