Модуль 1 • SOC L1 & Hardening

Анализ логов Linux, расследование Brute-Force и настройка Fail2ban

1. Где искать логи аутентификации в Linux?

Мониторинг безопасности и расследование инцидентов начинаются с анализа журналов событий. В зависимости от семейства ОС, логи входа (SSH, sudo, локальные сессии) сохраняются в разных директориях:

  • Debian / Ubuntu: /var/log/auth.log
  • RHEL / AlmaLinux / CentOS: /var/log/secure
  • Системы с systemd-journald: journalctl -u sshd или journalctl -u ssh
Анонимизация: При публикации логов или составлении отчетов всегда заменяйте реальные IP-адреса на служебные диапазона RFC 5737 (например, 203.0.113.10).

2. Анатомия SSH Brute-Force атаки в логах

При подборе паролей автоматизированными ботами в журналах формируются однотипные записи.

Пример успешного входа:

# Вход по SSH-ключу
Accepted publickey for user from 203.0.113.10 port 52341 ssh2: ED25519 SHA256:...

# Вход по паролю
Accepted password for admin from 203.0.113.10 port 52341 ssh2

Пример неудачных попыток (Brute-Force):

Failed password for invalid user admin from 192.0.2.45 port 41232 ssh2
Failed password for root from 192.0.2.45 port 41233 ssh2

3. Инструменты анализа: grep, awk, sort и uniq

Быстрый анализ текстовых логов строится на конвейере (pipeline) из четырех базовых утилит Linux. Разберем роль каждой из них:

1. grep — Фильтрация по шаблону

Ищет строки, содержащие заданный текст или регулярное выражение.

  • -i — игнорировать регистр.
  • -v — инвертировать поиск (показать всё, где нет шаблона).
  • -o — выводить только совпавшую часть строки (например, IP-адрес).
# Поиск всех строк с неудачным входом
grep "Failed password" /var/log/auth.log

2. awk — Обработка колонок и полей

Разбивает каждую строку на столбцы (по пробелам) и позволяет извлекать нужные поля. Переменная $1 обозначает первое поле, $8 — восьмое, а $0 — всю строку целиком.

# Извлечение 8-й колонки (имени пользователя в auth.log)
awk '{print $8}' /var/log/auth.log

3. sort — Сортировка данных

Упорядочивает строки по алфавиту или по значению чисел.

  • -n — сортировать как числа (а не как текст).
  • -r — сортировать по убыванию (от большего к меньшему).
# Сортировка чисел в обратном порядке
sort -nr

4. uniq — Подсчет и удаление дубликатов

Находит и группирует **подряд идущие** одинаковые строки.

Важно: Утилита uniq сравнивает только соседние строки. Для правильного подсчета данные перед ней **обязательно** нужно отсортировать через sort.
  • -c — выводить количество повторений каждой строки.
# Подсчет количества уникальных записей
sort | uniq -c

4. Консольный конвейер SOC-аналитика в действии

Объединяя утилиты через символ конвейера (|), мы получаем готовые сценарии для расследования инцидентов.

Поиск последних попыток подбора паролей:

grep "Failed password" /var/log/auth.log | tail -n 20

Топ-10 атакованных логинов:

grep "Invalid user" /var/log/auth.log | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10

Топ-10 IP-адресов атакующих:

grep "Failed password" /var/log/auth.log | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort | uniq -c | sort -nr | head -n 10

Проверка на компрометацию (успешный вход после перебора):

grep "Accepted" /var/log/auth.log | grep "192.0.2.45"

5. Автоматическая блокировка атак с помощью Fail2ban

Демон Fail2ban считывает логи в реальном времени и блокирует IP-адреса через фаервол при превышении порога ошибочных попыток.

Установка и настройка в Ubuntu:

# Установка пакета
sudo apt update && sudo apt install fail2ban -y

# Создание локальной конфигурации
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Конфигурация джейла /etc/fail2ban/jail.local:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log

# Параметры блокировки
bantime = 1h
findtime = 10m
maxretry = 5

Управление службой и проверка статуса:

# Перезапуск службы
sudo systemctl restart fail2ban

# Проверка заблокированных IP-адресов
sudo fail2ban-client status sshd

# Досрочная разблокировка IP
sudo fail2ban-client set sshd unbanip 192.0.2.45