当前位置: > Linux服务器 > iptables >

iptables自动屏蔽恶意高流量ip

时间:2014-09-01 21:58来源:linux.it.net.cn 作者:it
问题描述:
最近公司的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)
------分隔线----------------------------