#!/bin/bash

# 设置阈值
THRESHOLD=100

while true
do
    # 获取当前时间
    NOW=$(date +"%Y-%m-%d %H:%M:%S")

    # 获取1分钟前的时间
    TIME=$(date -d '1 minute ago' +"%d/%b/%Y:%H:%M")

    # 统计访问次数大于阈值的IP
    IPs=$(awk -v time="$TIME" '$4 > time {print $1}' /var/log/nginx/access.log | sort | uniq -c | awk -v threshold="$THRESHOLD" '$1 > threshold {print $2}')

    # 将IP加入ipset进行封禁
    for IP in $IPs
    do
        ipset add blacklist $IP
        echo "$NOW - $IP is blocked"
    done

    # 等待10秒后重新统计
    sleep 10
done

这个脚本会每10秒钟执行一次,获取当前时间和1分钟前的时间,然后从nginx日志里找出最近1分钟内访问次数大于设定阈值的IP,将它们加入ipset进行封禁,同时输出当前时间和被封禁的IP。

写一个shell脚本,每10秒统计一次nginx日志里最近1分钟每个ip的访问次数,大于100的通过ipset进行封禁

原文地址: https://www.cveoy.top/t/topic/sFK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录