Shell 分析 Nginx 网站日志自动屏蔽频繁访问的 IP

2017年8月9日 2673点热度 0人点赞 2条评论

Shell 分析 Nginx 网站日志自动屏蔽频繁访问的 IP

近来总感觉网站被恶意访问,造成宽带和服务器拖慢,于是决定研究一下之前看到关于分析 Nginx 网站日志,获取频繁访问的 IP 进行自动屏蔽的 Shell 脚本。

一、工作原理

Nginx 配置中,可以通过 allow , deny ip 来进行权限屏蔽。因此,需要创建一个 blockip.conf ,将屏蔽的 IP 保存在里面,并加载至 Nginx 配置中。例子:


allow 1.1.1.1; 
allow 1.1.1.2;
deny all;

全站屏蔽:include blockip.conf; 放到 http {} 语句块。

单站屏蔽:include blockip.conf; 放到对应网站 server{} 语句块。

二、Shell 脚本

注意:相关参数需要自行配置。脚本示例的环境配置是根据 LNMP 安装包而定。


#!/bin/bash
nginxPath=/usr/local/nginx/
wwwPath=/home/wwwlogs/
tail -n50000 $wwwPath/access.log |awk '{print $1,$12}' |grep -i -v -E "google|yahoo|baidu|msnbot|FeedSky|sogou" |awk '{print $1}'|sort|uniq -c|sort -rn |awk '{if($1>1000) print "deny "$2 ";"}' >> $nginxPath/conf/blockip.conf
sort $nginxPath/conf/blockip.conf | uniq -c |awk '{print "deny "$3}' > $nginxPath/conf/blockip.conf
/etc/init.d/nginx reload

三、定时任务

把 Shell 脚本改变权限并添加到定时计划中。


# 比如 Shell 脚本名为 blockip.sh 所在目录为 /root/ 定时任务为每天晚上11点30分执行
30 23 * * * /root/blockip.sh

WPTalk

这个人很懒,什么都没留下