Shell 分析 Nginx 网站日志自动屏蔽频繁访问的 IP
更新时间:2018-10-06 分类:网络技术 浏览量:2675
近来总感觉网站被恶意访问,造成宽带和服务器拖慢,于是决定研究一下之前看到关于分析 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