利用脚本查看nginx频繁访问IP 不指定

jed , 2010-12-28 09:47 , 服务器技术 , 评论(0) , 阅读(2972) , Via 本站原创 | |
Nginx+iptables屏蔽访问Web页面过于频繁的IP(防DDOS,恶意访问,采集器)

通过分析nginx的日志来过滤出访问过于频繁的IP地址,然后添加到nginx的blockip.conf,并重启nginx
脚本如下:

#!/bin/sh
nginx_home = /Data/app_1/nginx
log_path = /Data/logs
/usr/bin/tail -n50000 $log_path/access.log \
|awk ‘$8 ~/aspx/{print $2,$13}’ \
|grep -i -v -E “google|yahoo|baidu|msnbot|FeedSky|sogou” \
|awk ‘{print $1}’|sort|uniq -c |sort -rn \
|awk ‘{if($1>150)print “deny “$2″;”}’> $nginx_home/conf/vhosts/blockip.conf
/bin/kill -HUP `cat $nginx_home/nginx.pid`

也可以通过分析nginx日志过滤出频繁访问IP,直接用iptables屏蔽这个IP,就用不着重启nginx了,并且屏蔽效果更好。
单个IP的命令是
iptables -I INPUT -s 124.115.0.199 -j DROP

封IP段的命令是
iptables -I INPUT -s 124.115.0.0/16 -j DROP
封整个段的命令是
iptables -I INPUT -s 194.42.0.0/8 -j DROP
封几个段的命令是
iptables -I INPUT -s 61.37.80.0/24 -j DROP
iptables -I INPUT -s 61.37.81.0/24 -j DROP
刚才不小心搞的自己都连不上了-_-!!!
iptables -I INPUT -p tcp –dport 80 -s 124.115.0.0/24 -j DROP
以后用这种只封80端口就行了,不会出问题!
iptables -I INPUT -p tcp –dport 80 -s 124.115.0.0/24 -j DROP
iptables -I INPUT -s 61.37.81.0/24 -j DROP
解封
iptables -F
清空
iptables -D INPUT 数字



方法二:



利用脚本查看nginx频繁访问IP

这个一个统计,那个IP过于频繁的访问您的web服务器,通过分析nginx的日志得到的结果:

#!/bin/bash
#这是一个统计一段时间内访问web的IP的脚本,按照每个IP的访问次数排列
#定义变量
LINE=$1
DIR=$2
tail -n$LINE $DIR>tmp.txt
cut -d” ” -f1 tmp.txt |sort|uniq -c |sort -rn>count_ip.txt
rm -f tmp.txt
exit

最后的count_ip.txt就统计出了nginx 后LINE条记录的ip访问次数。
LINE是你要统计的nginx日志最后行数
DIR是你nginx的日志路径
当然如果是apache日志的话可以更改下cut -d” ” -f1 参数变量。
Tags: ,
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]