自动ban掉对web服务进行暴力扫描的ip

自动ban掉对web服务进行暴力扫描的ip

# cat auto_block_ip.sh
#!/bin/bash

# 定义日志目录路径
LOG_DIR="/var/log/apache2"

# 获取当前时间减去10分钟的时间戳
TEN_MINUTES_AGO=(date -d "10 minutes ago" "+%d/%b/%Y:%H:%M:%S")

# 临时文件用于存储需要阻止的IP地址及其计数
TEMP_FILE=(mktemp)

# 遍历日志目录中的所有日志文件
for LOG_FILE in "LOG_DIR"/*.log; do
    # 检查文件是否存在且是普通文件
    if [[ -f "LOG_FILE" ]]; then
        # 使用awk处理日志文件,找出所有在最近10分钟内的404响应
        # 并按IP地址统计次数
        awk -v date="TEN_MINUTES_AGO" '
        BEGIN { FS=" "; OFS="\t"; }4 >= date && 9 == "404" {
            ip =1;
            count[ip]++;
        }
        END {
            for (ip in count) {
                if (count[ip] > 100) print ip, count[ip];
            }
        }' "LOG_FILE" >> "TEMP_FILE"
    fi
done

# 读取临时文件并使用ufw进行阻止
while IFS='\t' read -r ip count; do
    echo "Blocking IP:ip with count 404 responses."
    sudo ufw insert 2 deny fromip
done < "TEMP_FILE"

# 删除临时文件
rm -f "TEMP_FILE"