Skip to content

fail2ban — алерт при всплеске банов (атака идёт)

Внезапно много банов в fail2ban — credential-stuffing или enumeration кампания. Хочу узнать про это в первые 5 минут, а не утром по логам.

Рецепт

bash
#!/usr/bin/env bash
# /etc/cron.d/fail2ban-spike
# */5 * * * * root /opt/fail2ban-spike.sh

LOG=${LOG:-/var/log/fail2ban.log}
WINDOW=300                            # last 5 min
THRESH=${THRESH:-20}                  # alert above 20 bans / window
SINCE=$(date -d "-${WINDOW} seconds" '+%Y-%m-%d %H:%M:%S')

COUNT=$(awk -v since="$SINCE" '
  $0 >= since && /Ban / { c++ }
  END { print c+0 }
' "$LOG")

if [ "$COUNT" -gt "$THRESH" ]; then
  curl -fsS "$HEARTBEAT_URL" --data "bans=$COUNT,window=${WINDOW}s"
  exit 2
fi
echo "OK ($COUNT bans / 5m)"

То же самое в Enterno.io

Привяжите Enterno heartbeat — получите retention 30 дней по ban-rate и узнаете «вчера было 50 банов в час, сегодня 500» без отдельного ELK.

Настроить Heartbeat monitor → ← Все рецепты

Похожие рецепты