有人恶意攻击我们服务器,可以根据nginx打印出来的访问日志ip,筛选出来访问量过大的ip,给他设置黑名单,设置防火墙,配置ipset,写一个脚本。
新建block_ip.sh
#!/bin/bash
#nginx的日志文件
logfile=/var/log/nginx
last_minutes=1
#过滤出单位之间内的日志并统计最高ip数 一分钟超过两百条的过滤出来
ip=`awk '{print $1}' $logfile/access.log |sort |uniq -c|sort -n | awk '{if($1>200)print $2}'`
# 单位时间[1分钟]内单ip访问次数超过200次的ip通过ipset封锁
echo "start-----------------------------------" >> /data/shell/log/blockip.log
for line in $ip
do
echo "$line" >> /data/app/shell/log/blockip.log
#设置黑名单 blacklist
/usr/sbin/ipset add -exist blacklist $line
#echo $line
done
echo "" > $logfile/access.log
echo "" > $logfile/error.log
echo "stop-----------------------------------" >> /data/shell/log/blockip.log
下面是配置黑名单,白名单的。 因为有些合作方需要回调我们接口。所以还需要加白名单,不能把人家禁止了,所以需要新增白名单