针对切割Nginx动态日志自动拉黑脚本

#!/bin/bash

#日志存放目录
LOGS=/data/wwwlogs/
#Nginx目录
NGINX_DIR=/usr/local/nginx/conf/vhost
#阻止IP配置
BLOCKIP=blockip.conf

#判断nginx是否有vhost目录
if [[ ! -d $NGINX_DIR ]];then
  mkdir -p $NGINX_DIR
  echo "$NGINX_DIR 目录创建成功!"
else
  echo "$NGINX_DIR 目录已经存在,无需创建!"
fi
#判断是否有blockip.conf文件
if [[ ! -f $NGINX_DIR/$BLOCKIP ]];then
  touch $NGINX_DIR/$BLOCKIP
  echo "$BLOCKIP 文件创建成功!"
else
  echo "$BLOCKIP 文件已经存在,无需创建!"
fi

#批量查询日志,并显示日志最后1000行中的第1,11,14列
find $LOGS -type f -name "*.com_nginx.log" -exec tail -n1000 {} \; | awk '{print $4,$9,$10}' |
#内部IP,防止把自己给屏蔽导致不能正常访问
grep -Ev "127.0.0.1|localhost" |
#阿里云IP过滤,不知道为什么可能会导致403错误,应该是阿里云的CDN加速
grep -Ev "140.205.253.*|119.23.169.*|123.57.117.*|122.227.164.206" |
#过滤搜索引擎蜘蛛
grep -i -Ev "google|yahoo|baidu|msnbot|FeedSky|sogou|360|bing|soso|403|api" |
#对IP进行统计访问次数与排序
awk '{print $1}' | sort | uniq -c | sort -rn |
#查询1000条内的ip判断超过50次进行拉黑,并输出到nginx配置文件
awk '{if($1>50)print "deny "$2";"}' > $NGINX_DIR/$BLOCKIP
#加载Nginx配置
#/usr/local/nginx/sbin/nginx -s reload
阅读剩余
THE END