Мониторинг VDS и сайтов

404 в access.log: сканеры, не клиенты

Открыл лог — тысячи строк с 404. Паника «сайт сломан» обычно лишняя: это интернет стучится в /wp-admin, /.env и чужие CMS, которых у вас нет. Ниже — как отличить шум сканеров от реальной поломки.

Серия «Периметр VPS»: этот разбор → DNSBLSecurity Headers.

Это не обязательно DDoS

Автоматические боты перебирают популярные пути на каждом публичном IP. На чистом nginx/Bitrix/лендинге 404 на /wp-login.php — нормальный фон, не сигнал «нас взломали».

Тревога другая: сайт отдаёт 502/5xx реальным URL, диск 100%, LA растёт вместе с логом, или снаружи site-check видит недоступность.

Типичные пути сканеров

/.env
/.git/config
/wp-admin/ /wp-login.php /xmlrpc.php
/phpmyadmin/ /admin/ /manager/
/.aws/credentials
/actuator/env

Если эти URL у вас не существуют — 404 ожидаемы. Если существуют и отдают конфиг/логин без защиты — уже другой разговор (закрыть, fail2ban, VPN).

Команды за 2 минуты

Путь к логу чаще /var/log/nginx/access.log (или access в каталоге сайта).

# топ URI с 404 за хвост лога
awk '$9==404 {print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

# топ IP, которые ловят 404
awk '$9==404 {print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -15

# живой хвост только 404
tail -f /var/log/nginx/access.log | awk '$9==404'

Формат combined: поле $9 — статус, $7 — URI, $1 — IP. Если у вас кастомный log_format — поправьте номера полей.

Когда бить тревогу

СитуацияЧто делать
404 на несуществующие wp-*, .envИгнор / опционально fail2ban по nginx
404 на ваши реальные ЧПУ / товарыБитые ссылки, редиректы, sitemap
Всплеск 404 + рост CPU/LAСмотреть нагрузку, rate limit, firewall
200 на /.env или админку без authСрочно закрыть доступ

Связка с fail2ban

Фон 404 не «лечится» мониторингом uptime — это шум периметра. Имеет смысл jail по SSH (и при желании по nginx) — см. fail2ban за 10 минут. Не баньте агрессивно все 404 подряд: можно зацепить легитимных ботов и CDN.

Что смотреть снаружи

Сканеры в логе ≠ «сайт лежит». Снаружи проверяйте главную и критичные URL:

  • site-check — код ответа, SSL, редиректы
  • Алерты Mediops — 5xx / недоступность до звонка клиента