技术解析
有时候博客会有莫名其妙的人进来,腾云阁看到这个解决方法待试试
收录待用,修改转载已取得腾讯云授权
代码节选:
使用 nginx 封锁
...
-封锁 IP
#!/bin/bash
max=500 #我们设定的最大值,当访问量大于这个值得时候,封锁
confdir=/usr/local/data/nginx/conf/blockip.conf #nginx 封锁配置文件路径
logdir=/usr/local/data/nginx/logs/access_huke88.log #nginx 访问日志文件路径
#检测文件
test -e ${confdir} || touch ${confdir}
dr抗投诉服务器op_ip=""
#循环遍历日志文件取出访问量大于 500 的 ip
for drop_ip in $(cat $logdir | awk '{print $1}' | sort | uniq -c | sort -rn | awk '{if ($1>500) print $2}')
do
grep -q "${drop_Ip}" ${confdir} && eg=1 || eg=0;
if (( ${eg}==0 ));then
echo "deny ${drop_Ip};">>$confdir #把“ deny IP ;”语句写入封锁配置文件中
echo ">>>>> `date '+%Y-%m-%d %H%M%S'` - 发现攻击源地址 -> ${drop_Ip} " >> /usr/local/data/nginx/logs/nginx_deny.log #记录 log
fi
done
service nginx reload
-解锁 IP
#!/bin/bash
sed -i 's/^/#&/g' /usr/local/nginx/conf/
blockip.conf #把 nginx 封锁配置文件中的内容注释掉
service nginx reload #重置 nginx 服务,这样就做到了解锁 IP
使用 iptables 封锁
...
-封锁 IP 脚本
#!/bin/bash
max=500 #我们设定的最大值,当访问量大于这个值得时候,封锁
logdir=/usr/local/data/nginx/logs/access_huke88.log #nginx 访问日志文件路径
port=80
drop_ip=""
#循环遍历日志文件取出访问量大于 500 的 ip
for drop_ip in $(cat $logdir | awk '{print $1}' | sort | uniq -c | sort -rn | awk '{if ($1>500) print $2}')
do
grep -q "${drop_Ip}" ${confdir} && eg=1 || eg=0;
if (( ${eg}==0 ));then
iptables -I INPUT -p tcp --dport ${port} -s ${drop_Ip} -j DROP
echo ">>>>> `date '+%Y-%m-%d %H%M%S'` - 发现攻击源地址 -> ${drop_Ip} " >> /usr/local/data/nginx/logs/nginx_deny.log #记录 log
fi
done
...
加入计划任务每五分钟执行一次
chmod +x /home/scripts/deny_ip.sh
#####nginx 封 ip######
*/5 * * * * /bin/sh /home/scripts/deny_ip.sh >/dev/null 2>&1
原文链接: https://www.qcloud.com/community/article/281027001490538345