采集NG日志对渗透攻击的IP加入黑名单
1.主要实现思路是采集Nginx的日志,一般渗透测试都是扫描目录这种暴力做法。通过日志中404或者403的状态且在1分钟内多次这样恶意操作的IP,下面是脚本。
#!/bin/bash
# 定义日志文件和输出文件
LOG_FILE=”/var/log/nginx/xiancitytravel.com_access.log”
OUTPUT_FILE=”/var/log/nginx/blacklist.txt”
# 清空输出文件
> $OUTPUT_FILE
# 提取在1分钟内多次访问404或403的IP
awk ‘$9 == “404” || $9 == “403” {print $1, $4}’ $LOG_FILE | \
sed ‘s/\[//;s/\]//;s/:/ /’ | \
while read ip timestamp; do
# 将时间戳转换为秒,使用正确的日期格式
timestamp_sec=$(date -d “$(echo $timestamp | sed ‘s/\([0-9]*\)\/\([A-Za-z]*\)\/\([0-9]*\) \([0-9:]*\)/\3-\2-\1 \4/; s/Apr/04/; s/May/05/; s/Jun/06/; s/Jul/07/; s/Aug/08/; s/Sep/09/; s/Oct/10/; s/Nov/11/; s/Dec/12/’)” +%s)
echo “$ip $timestamp_sec”
done | sort -k1,1 -k2,2n | \
awk ‘{
if (prev_ip == $1 && ($2 – prev_time) <= 60) { count++ } else { if (count > 15) {
print prev_ip
}
prev_ip = $1
prev_time = $2
count = 1
}
}
END {
if (count > 15) {
print prev_ip
}
}’ >> $OUTPUT_FILE
# 将提取的IP加入防火墙黑名单
while read -r ip; do
iptables -A INPUT -s $ip -j DROP
done < $OUTPUT_FILE
2.用定时器每隔一段时间执行就行,注意的是日志文件不可过大,适合低内存的服务器解决方案。