nginx — алерт когда rate-limit-zone забивается
Атакующий упёрся в `limit_req_zone` — все легитимные запросы тоже начали получать 429. Логи показывают это, но никто не следит.
Рецепт
#!/usr/bin/env bash
# Counts 429s in the last minute against a rolling threshold.
LOG="${ACCESS_LOG:-/var/log/nginx/access.log}"
THRESHOLD="${THRESHOLD:-50}"
CNT=$(awk -v from="$(date -d '1 min ago' '+%d/%b/%Y:%H:%M')" '
$0 ~ from && $9 == 429 { c++ } END { print c+0 }
' "$LOG")
[ "$CNT" -ge "$THRESHOLD" ] && echo "high $CNT/min" || echo "ok $CNT/min"
То же самое в Enterno.io
Endpoint + Enterno HTTP-монитор с keyword "ok" покажет атаку через 60 сек. Параллельно Security Scanner подскажет, не зашит ли rate-limit слишком жёстко.
Похожие рецепты
Сервер начал отвечать 503/504 — но это пропускает обычный uptime-мониторинг (главная отдаёт 200, ошибки в API).
Контроль квоты сторонних API
pythonStripe, GitHub, Twilio возвращают X-RateLimit-Remaining в заголовках. Если бэкенд не отслеживает порог — внезапно пойдёт 429, биллинг встанет.
Сайт в HSTS preload-листе, но после рефакторинга nginx конфиг заголовок пропал. Через 3 месяца домен будет удалён из preload-листа. Нужен ежедневный чек.