Skip to content

sshd — алерт по росту auth-fail (до бана fail2ban)

fail2ban банит источники по threshold — но кампания идёт с тысячи IP по 1 attempt каждый. Каждый IP не попадает в ban, но общий шум на ssh-порту огромный.

Рецепт

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

WINDOW=${WINDOW:-5min}
THRESH=${THRESH:-100}                 # fails / 5 min

COUNT=$(journalctl -u ssh --since "$WINDOW ago" --no-pager 2>/dev/null \
  | grep -cE 'Failed password|Invalid user|maximum authentication attempts')

if [ "${COUNT:-0}" -gt "$THRESH" ]; then
  UNIQUE=$(journalctl -u ssh --since "$WINDOW ago" --no-pager 2>/dev/null \
    | grep -oE 'from [0-9.]+' | sort -u | wc -l)
  curl -fsS "$HEARTBEAT_URL" --data "ssh_fails=$COUNT,unique_ips=$UNIQUE"
  exit 2
fi
echo "OK ($COUNT auth-fails / 5m)"

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

Заверните в Enterno heartbeat — увидите кампанию distributed-bruteforce раньше, чем она «прокликает» одну ослабленную ssh-учётку.

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

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