fail2ban — алерт при всплеске банов (атака идёт)
Внезапно много банов в fail2ban — credential-stuffing или enumeration кампания. Хочу узнать про это в первые 5 минут, а не утром по логам.
Рецепт
#!/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.
Похожие рецепты
Apache начал отдавать 502/503 у одного backend, но не у всех. Нужен endpoint с долей 5xx за последние 60 секунд.
Сайт в HSTS preload-листе, но после рефакторинга nginx конфиг заголовок пропал. Через 3 месяца домен будет удалён из preload-листа. Нужен ежедневный чек.
Мисконфигурация name-server открыла AXFR на интернет — все ваши поддомены, MX, TXT (включая SPF DKIM ключи) видны атакующему. Ежедневный чек с алертом.