#!/bin/dash
# 获取当前日期和时间的格式化字符串
DATE=$(date +%d/%b/%Y:%H:%M)
# 日志文件路径和封禁记录文件路径
LOG_FILE="/var/log/nginx/access.log" # 访问日志的改变
DROP_IP_LOG="/tmp/drop_ip.log"
# 获取异常IP地址
ABNORMAL_IP=$(head -n 20 "$LOG_FILE" | awk '{a[$1]++}END{for(i in a) if(a[i]>10) print i}')
# 封禁异常IP地址
# declare -a IP_LIST
for IP in $ABNORMAL_IP
do
if ! iptables -nL | grep -q "$IP" ; then
iptables -I INPUT -s "$IP" -j DROP
echo "$(date +'%F_%T') $IP" >> "$DROP_IP_LOG"
# IP_LIST=("$IP")
fi
done
declare -a IP_LIST=${IP}
# 输出封禁的IP地址
if [ ${#IP_LIST[@]} -gt 0 ]; then
echo "以下IP地址已被封禁:"
printf "%s\n" "${IP_LIST[@]}"
else
echo "没有需要封禁的IP地址。"
fi