SMTP — алерт по росту bounce-rate из postfix-логов
Postfix начал bounce-ить часть писем (домен подмочил репутацию) — но видишь это только когда клиенты пишут в support: «не пришло письмо».
Рецепт
#!/usr/bin/env bash
# /etc/cron.d/smtp-bounce-rate
# */5 * * * * root /opt/smtp-bounce.sh
LOG=${LOG:-/var/log/mail.log}
WINDOW=300 # last 5 min
BOUNCE_PCT=${BOUNCE_PCT:-3} # alert above 3 % bounces
SINCE=$(date -d "-${WINDOW} seconds" '+%b %_d %H:%M')
read SENT BOUNCED < <(awk -v since="$SINCE" '
$0 >= since {
if (/status=sent/) s++
if (/status=bounced|status=deferred/) b++
}
END { print s+0, b+0 }
' "$LOG")
TOTAL=$((SENT + BOUNCED))
[ "$TOTAL" -lt 50 ] && exit 0 # not enough volume to judge
PCT=$((BOUNCED * 100 / TOTAL))
if [ "$PCT" -gt "$BOUNCE_PCT" ]; then
echo "smtp-bounce: $BOUNCED / $TOTAL = ${PCT}% (threshold ${BOUNCE_PCT}%)"
curl -fsS "$HEARTBEAT_URL" --data "bounce=${PCT}%"
exit 2
fi
echo "OK (${PCT}% bounces)"
То же самое в Enterno.io
Подключите DMARC RUA-отчёты в Enterno DMARC — увидите не только локальные bounces, но и отчёты от провайдеров (Gmail, Yahoo) с точным указанием причины (DKIM/SPF/policy).
Похожие рецепты
Маркетолог-стажёр меняет DMARC с <code>p=quarantine</code> на <code>p=none</code> ради «исправить bounce» — через час Gmail помечает все рассылки как спам.
Apache начал отдавать 502/503 у одного backend, но не у всех. Нужен endpoint с долей 5xx за последние 60 секунд.
Внезапно много банов в fail2ban — credential-stuffing или enumeration кампания. Хочу узнать про это в первые 5 минут, а не утром по логам.