问题描述: 最近公司的nginx代理服务器,半夜都流量很高,可能是恶意用户开挂刷新网站页面。 如前段时间新闻上所说的黄牛党开挂刷新火车票网站一样,刷得网站几乎近似瘫了。因为我们公司网站是彩票开奖系统,也怕这样子恶意被刷,亟待解决。 解决办法: 这台服务器就是个nginx代理服务器,因此可以借助nginx的日志查看 cat /opt/webapps/log_nginx/518.access.log|awk -F'?' '{print $1}'|awk '{print $1}'|sort -r| uniq -c |sort -nr |more 撸一下,发现很多ip访问此次搞得离谱了点 因为日志带时间的,设置好时间变量,换个更准的脚来撸撸 cat /opt/webapps/log_nginx/518.access.log|awk "/$tian\/$yue\/$nian/ {print \$1,\$6,\$7}"|awk -F'?' '{print $1}'|sort -r| uniq -c |sort -nr |awk '$1>3000{print $2}' >/opt/webapps/log_nginx/ip."$DATE" 于是呼我就把今天凌晨0点到现在的访问次数超过3000次且做相同件事,(我把访问提一个页面判定成同件事)全虑出来丢到ip."DATE"文件了,接下来就是再iptables添加DROP,让他继续嚣张…… 终极!!!(上脚本) #!/bin/bash tian=`date |awk '{print $3}'` yue=`date |awk '{print $2}'` nian=`date |awk '{print $6}'` YEAR=`date +%Y` MONTH=`date +%m` DAY=`date +%d` HOUR=`date +%H` #MIN=`date +%M` DATE=$YEAR-$MONTH-$DAY-$HOUR cat /opt/webapps/log_nginx/518.access.log|awk "/$tian\/$yue\/$nian/ {print \$1,\$6,\$7}"|awk -F'?' '{print $1}'|sort -r| uniq -c |sort -nr |awk '$1>3000{print $2}' >/opt/webapps/log_nginx/ip."$DATE" awk '{system("iptables -D INPUT -s "$0" -j DROP;iptables -I INPUT -s "$0" -j DROP ")}' /opt/webapps/log_nginx/ip."$DATE" service iptables save service iptables reload #Now, start a truncated 518.access.log, to prepare for the next operation cp /opt/webapps/log_nginx/518.access.log /opt/webapps/log_nginx/518.access.log_"$DATE" echo "Let us go===========================================">/opt/webapps/log_nginx/518.access.log 最后两句是我在截断日志哦,不是百年之后,我的awk就跑不动了,log太大会叫的…… 高大上的可以直接添加到计划任务里,不过可以有的ip并不恶意,人工稍瞥一眼更好 理想的结果还没考虑, 因为iptables规则太多会哭的,我想把每天规则注释上时间,以后每次执行脚了就把多少天前的解封了,免得百年之后全天下都进入我的黑名单了(如果our china人口不那么多) (责任编辑:IT) |