Nginx日志内发现大量恶意ip自动加入防火墙脚本

前段时间,发现有很多莫名奇妙的ip访问我的博客,十分频繁,量很高,已经不是一个月7天那么简单了(←_← !!)3。多数是访问博客程序的后台地址什么的,总之日志文件几天就上G了,对服务器影响很大。所以写了个简单的脚本把访问的ip加入了防火墙或者禁止让这个ip访问(无含量)。

– 有好脚本的请留下在走 –

拜托

脚本内容

其实只加入防火墙就够了,但我懒得改,自己改吧

最初我是想把这个访问直接在nginx内给deny了,但后来想这样不太好,还是会访问被占用资源。所以…

#!/bin/bash
#_日志位置
_log_Path="/data0/nginx/weblogs/"
#_日志文件名称
_log_FileName="access_blog.kinggoo.com.log"
#_要被屏蔽的ip访问端口,默认80
_port="80"
_nginx_deny="/opt/webserver/nginx/conf/deny.conf"
_nginx_bin="/opt/webserver/nginx/sbin/nginx"
_logfilepath=${_log_Path}${_log_FileName}
#初始化被禁ip变量 
_drop_Ip=""
#检测文件
test -e ${_nginx_deny} || touch ${_nginx_deny} 
for _drop_Ip in $( tail -n50000 "${_logfilepath}" |awk '{print $1,$12}' |grep -i -v -E "google|yahoo|baidu|msnbot|FeedSky|sogou|WordPress" |awk '{print $1}'|sort|uniq -c|sort -rn  |awk '{if($1>1000)print ""$2""}' );
do
         grep  -q  "${_drop_Ip}" ${_nginx_deny} && eg=1 || eg=0 ;
         if (( ${eg}==0 ));then
                echo  "deny ${_drop_Ip};" >> ${_nginx_deny}
                ${_nginx_bin} -s  reload
                iptables -I INPUT -p tcp --dport ${_port} -s ${_drop_Ip} -j DROP
                echo ">>>>> `date '+%Y-%m-%d %H%M%S'` - 发现攻击源地址 ->  ${_drop_Ip} " >> /tmp/nginx_deny.log;
                echo "iptables -I INPUT -p tcp --dport ${_port} -s ${_drop_Ip} -j DROP" >> /tmp/nginx_deny.log
         fi
done

日志图

image

- THE END -
版权声明:
转载原创文章请注明,文章出处:http://kinggoo.com
原文地址:http://kinggoo.com/nginx-deny-ip.htm
发表评论?

0 条评论。

发表评论