{}const=>[]async()letfn</>var
ОсновыРазработкаПрофессия

«Кто стучится в мой сервер?» — читаем логи и ловим хакеров за руку

Разбираем access-логи по косточкам: как выглядят брутфорс, SQL-инъекции и сканирование уязвимостей в реальных логах, какие команды помогут найти атаку за минуту и что делать, когда нашёл подозрительное.

К

Кодик

Автор

3 мин чтения

Ты запустил свой первый сервер, задеплоил приложение — красота. Но однажды ты открываешь логи и видишь сотни строк, которые выглядят как послания с другой планеты. Кто все эти люди? Почему кто-то стучится на /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 — тысяча за минуту. И все они стучатся по разным путям. Вот тут начинается самое интересное.

🔥 100 000+ учеников уже с нами

Устал читать теорию?
Пора кодить!

Кодик — приложение, где ты учишься программировать через практику. AI-наставник, интерактивные уроки, реальные проекты.

🤖 AI 24/7
🎓 Сертификаты
💰 Бесплатно
🚀 Начать учиться
Присоединились сегодня

🚩 Красные флаги: признаки атак

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

🛡️ Что делать, когда нашёл подозрительное

  1. Заблокируй IP Если видишь явную атаку — бань через iptables, ufw или на уровне Nginx.

  2. Настрой fail2ban Автоматически банит IP после N неудачных попыток. Настраивается за 15 минут, спасает от целого класса атак.

  3. Проверь свои эндпоинты Убедись, что конфиденциальные файлы недоступны, формы защищены rate limiting'ом, а ввод экранируется.

  4. Настрой алерты Простой cron-скрипт, который шлёт уведомление при аномалиях — может спасти весь проект.

nginx.conf

# Блокировка IP на уровне Nginxdeny 185.220.101.42;

# Запрет доступа к скрытым файламlocation ~ /\. {
    deny all;
    return 404;
}

bash

# Блокировка через файрволsudo ufw deny from 185.220.101.42

🚀 Прокачивай навыки — это лучшая защита

Умение читать логи — это навык, который тренируется практикой. Если хочешь системно расти как разработчик и понимать, как всё устроено под капотом — у нас есть кое-что для тебя.

Приложение «Кодик» — платформа, где программирование учат через практику: не сухая теория, а реальные задачи, которые прокачивают понимание.

А в нашем Telegram-сообществе регулярно выходят полезные посты, разборы и лайфхаки из мира разработки. Читай за утренним кофе и закрепляй знания прямо с телефона.

Логи — это чёрный ящик твоего сервера. Научись их читать, и ты всегда будешь знать, кто приходил, что хотел и стоит ли волноваться.

Безопасность — это не продукт, а процесс.
И он начинается с логов.

🎯Хватит откладывать

Понравилась статья?
Пора применять на практике!

В Кодик ты не просто читаешь — ты сразу пишешь код. Теория + практика = реальный скилл.

Мгновенная практика
🧠AI объяснит код
🏆Сертификат

Без регистрации • Без карты