自己写的一个防止采集或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