nginx访问ip黑名单

问题场景

继上一篇实现nginx的日志切割之后,需要解决的问题是ip封禁的问题,不然还是可以拖垮系统。

解决方案

定时抽取日志文件中日访问量大于100的ip地址,将他们写入给名单中。具体的代码实现如下:

#!/bin/bash

log_dir=/usr/local/nginx/logs/access.log
nginx_port=82
day=$(date -d '-1 day' '+%Y%m%d')

nginx_deny_file=$(dirname $log_dir)/nginx_deny.log
if [ ! -f $nginx_deny_file ]; then
    touch $nginx_deny_file
fi

# 取出遍历日志文件中访问量>100的ip
for drop_ip in $(grep -v '127.0.0.1' access.log_$day | awk '{print $1}' | sort | uniq -c | sort -rn | awk '{if ($1>10) print $2}'); do
    num=$(grep $drop_ip $nginx_deny_file | wc -l)
    if [ $num -gt 1 ]; then
        continue
    fi
    # 禁止ip访问端口 该方法待验证!!!
    iptables -I INPUT -p tcp –-dport $port -s $drop_ip -j DROP
    echo ">>>>> $(date '+%Y-%m-%d %H:%M:%S') - 发现异常ip -> $drop_ip" >>$nginx_deny_file
done

猜你喜欢

转载自blog.csdn.net/weixin_55768452/article/details/129359927