Ты запустил свой первый сервер, задеплоил приложение — красота. Но однажды ты открываешь логи и видишь сотни строк, которые выглядят как послания с другой планеты. Кто все эти люди? Почему кто-то стучится на /wp-login.php, хотя у тебя даже нет WordPress? И что за POST-запросы в три часа ночи? Давай разбираться.

🔍 Анатомия лог-файла
Возьмём типичную строку из access-лога Nginx:
access.log
185.220.101.42 - - [15/Feb/2026:03:14:22 +0300] "GET /admin HTTP/1.1" 404 162 "-" "Mozilla/5.0"Разберём по кусочкам:
185.220.101.42— IP-адрес того, кто сделал запрос[15/Feb/2026:03:14:22]— дата и времяGET /admin HTTP/1.1— метод, путь и протокол404— код ответа (страница не найдена)162— размер ответа в байтахMozilla/5.0— User-Agent (браузер или бот)
Выглядит безобидно? А теперь представь, что таких строк с одного IP — тысяча за минуту. И все они стучатся по разным путям. Вот тут начинается самое интересное.
🚩 Красные флаги: признаки атак
1 Перебор директорий (Directory Bruteforce)
Бот перебирает стандартные пути в надежде наткнуться на что-то интересное:
185.220.101.42 GET /admin 404185.220.101.42 GET /wp-admin 404185.220.101.42 GET /phpmyadmin 404185.220.101.42 GET /.env 403185.220.101.42 GET /backup.sql 404185.220.101.42 GET /.git/config 200 ⚠️ НАШЁЛ!⚠️ Опасно
Если среди 404-х мелькает 200 — значит, что-то реально доступно. Файлы .env, .git/config, backup.sql никогда не должны отдаваться сервером.
2 Брутфорс авторизации
Десятки неудачных попыток входа — кто-то перебирает пароли:
POST /login 401POST /login 401POST /login 401POST /login 401POST /login 200 ⚠️ ПОДОБРАЛ ПАРОЛЬ!Много 401/403 подряд с одного IP
POST на
/login,/auth,/api/tokenс высокой частотойОдинаковый User-Agent при разных «пользователях»
Запросы идут ночью или в выходные
3 SQL-инъекции в URL
Злоумышленник пробует «сломать» запрос к базе данных:
GET /products?id=1' OR '1'='1
GET /search?q=admin'--
GET /user?name='; DROP TABLE users;--Если в параметрах мелькают OR 1=1, кавычки, --, UNION SELECT, DROP TABLE — это оно.
4 XSS-попытки
Внедрение вредоносного JavaScript через пользовательский ввод:
GET /search?q=<script>alert('xss')</script>
GET /comment?text=<img src=x onerror=alert(1)>Теги <script>, обработчики onerror, onload в параметрах — классика жанра.
5 Подозрительные User-Agent'ы
Нормальный User-Agent — это браузер. А вот эти ребята вызывают вопросы:
sqlmap/1.5 ← сканер SQL-инъекцийnikto/2.1.6 ← сканер уязвимостейpython-requests/2.28.0 ← скрипт на Python() { :; }; /bin/bash -c "..." ← Shellshock-эксплойт!
⚡ Полезные команды для анализа
Не нужно читать логи глазами строку за строкой. Вот набор команд, которые сэкономят часы:
bash
# Топ-20 IP по количеству запросовawk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20
# Все провальные авторизации (401/403)grep -E '" (401|403) ' access.log
# Поиск SQL-инъекций в параметрахgrep -iE "(union|select|drop|insert|or\s+1=1)" access.log
# Поиск XSS-попытокgrep -iE "(<script|onerror|onload|javascript:)" access.log
# Запросы к опасным файламgrep -iE "\.(env|sql|bak|config|yml|git)" access.log
# Активность с 1 до 5 утраawk -F'[/: ]' '$7 >= 1 && $7 <= 5' access.log | head -50🛡️ Что делать, когда нашёл подозрительное
Заблокируй IP Если видишь явную атаку — бань через
iptables,ufwили на уровне Nginx.Настрой fail2ban Автоматически банит IP после N неудачных попыток. Настраивается за 15 минут, спасает от целого класса атак.
Проверь свои эндпоинты Убедись, что конфиденциальные файлы недоступны, формы защищены rate limiting'ом, а ввод экранируется.
Настрой алерты Простой cron-скрипт, который шлёт уведомление при аномалиях — может спасти весь проект.
nginx.conf
# Блокировка IP на уровне Nginxdeny 185.220.101.42;
# Запрет доступа к скрытым файламlocation ~ /\. {
deny all;
return 404;
}bash
# Блокировка через файрволsudo ufw deny from 185.220.101.42🚀 Прокачивай навыки — это лучшая защита
Умение читать логи — это навык, который тренируется практикой. Если хочешь системно расти как разработчик и понимать, как всё устроено под капотом — у нас есть кое-что для тебя.
Приложение «Кодик» — платформа, где программирование учат через практику: не сухая теория, а реальные задачи, которые прокачивают понимание.
А в нашем Telegram-сообществе регулярно выходят полезные посты, разборы и лайфхаки из мира разработки. Читай за утренним кофе и закрепляй знания прямо с телефона.
Логи — это чёрный ящик твоего сервера. Научись их читать, и ты всегда будешь знать, кто приходил, что хотел и стоит ли волноваться.
Безопасность — это не продукт, а процесс.
И он начинается с логов.
