自动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"