Перейти к содержанию

23. Logs

Введение

Логи в Linux играют важную роль в мониторинге, диагностике и обеспечении безопасности систем. Сетевой администратор должен понимать, где находятся журналы, как их анализировать и настраивать, чтобы выявлять потенциальные угрозы и обеспечивать стабильную работу инфраструктуры.

Виды логов в Linux

Системные логи

Системные логи хранят информацию о работе ядра, демонов, аппаратных событий и состояния системы:

  • /var/log/syslog (Debian-based) или /var/log/messages (RHEL-based) – общий системный лог, содержащий информацию от различных сервисов.
  • /var/log/dmesg – сообщения ядра о загрузке системы и аппаратных событиях.

Чтение системных логов:

less /var/log/syslog  # Пролистывание лога
journalctl -k         # Фильтрация логов ядра
journalctl --since "1 hour ago"  # Логи за последний час

Пример строки из /var/log/syslog:

Mar 31 10:15:03 server systemd[1]: Started Cleanup of Temporary Directories.
  • Mar 31 10:15:03 – дата и время события.
  • server – имя хоста.
  • systemd[1] – процесс и его идентификатор.
  • Started Cleanup of Temporary Directories. – сообщение о событии.

Логи аутентификации и безопасности

Эти логи позволяют отслеживать попытки входа в систему и выявлять потенциальные атаки:

  • /var/log/auth.log (Debian-based) или /var/log/secure (RHEL-based) – записи о входах в систему, sudo, SSH и других событиях аутентификации.
  • /var/log/faillog – информация о неудачных попытках входа.
  • /var/log/wtmp, /var/log/btmp – записи о успешных и неудачных входах.

Чтение логов аутентификации:

tail -f /var/log/auth.log  # Мониторинг попыток входа
last -f /var/log/wtmp       # История входов пользователей
journalctl -u sshd --no-pager  # Логи сервиса SSH

Пример записи из /var/log/auth.log:

Mar 31 10:20:15 server sshd[2345]: Failed password for root from 192.168.1.100 port 49876 ssh2
  • Failed password for root – неудачная попытка входа.
  • 192.168.1.100 – IP-адрес источника.
  • port 49876 – порт, с которого выполнена попытка.

Логи сетевых сервисов

Журналы сетевых сервисов позволяют контролировать сетевую активность:

  • /var/log/nginx/access.log и /var/log/nginx/error.log – логи веб-сервера Nginx.
  • `/va`** и ** – логи веб-сервера Apache.
  • `` – логи почтового сервера.

Чтение логов веб-сервера:

tail -n 50 /var/log/nginx/access.log  # Последние 50 записей
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr  # Частота IP-адресов

Пример строки из ``:

192.168.1.101 - - [31/Mar/2025:10:30:45 +0000] "GET /index.html HTTP/1.1" 200 1024
  • `` – IP клиента.
  • `` – HTTP-запрос.
  • `` – статус-код (успешно).
  • `` – размер ответа в байтах.

Работа с логами

Чтение логов

Для анализа логов используются следующие команды:

cat /var/log/syslog        # Вывести весь лог
less /var/log/syslog       # Пролистывание лога
journalctl -xe            # Анализ системного журнала (systemd)
tail -f /var/log/syslog    # Наблюдение за логами в реальном времени
grep "ERROR" /var/log/syslog  # Фильтрация по ключевому слову

Различия между логами

Логи могут различаться по структуре и предназначению:

  • Системные логи содержат сообщения о работе ОС и служб.
  • Логи приложений записывают сообщения конкретных программ.
  • Логи безопасности включают попытки входа, авторизации и подозрительной активности.
  • Логи сетевого трафика фиксируют соединения и маршрутизацию пакетов.

Журнал systemd

Современные дистрибутивы используют systemd-journald для хранения логов:

  • journalctl -f – просмотр в реальном времени.
  • journalctl --since "1 hour ago" – логи за последний час.
  • journalctl -u sshd – логи конкретного сервиса.
  • journalctl -b – логи текущей сессии загрузки.

Логирование сетевых подключений

Для мониторинга сетевого трафика и попыток подключений можно использовать:

tcpdump -i eth0 port 22      # Анализ трафика SSH
iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH_ACCESS: "

Управление логами

Rsyslog

Rsyslog – это системный сервис для логирования, поддерживающий фильтрацию, пересылку и хранение логов.

Пример отправки логов на удаленный сервер:

*.* @192.168.1.100:514  # Отправка всех логов на сервер по UDP

Пример фильтрации логов по уровню критичности:

*.err /var/log/errors.log  # Записывать ошибки и выше в отдельный файл

3.2. Logrotate

Logrotate используется для управления размером лог-файлов и их архивации.

Пример конфигурации ротации логов для Nginx:

/var/log/nginx/access.log {
    weekly
    rotate 4
    compress
    missingok
    notifempty
}

Автоматизация анализа логов

4.1. Использование awk и sed

Пример вывода только IP-адресов из логов SSH:

grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr

Fail2Ban

Fail2Ban отслеживает попытки взлома и автоматически блокирует нарушителей.

Пример настройки Fail2Ban для защиты SSH:

[sshd]
enabled = true
filter = sshd
action = iptables-multiport[name=SSH, port=ssh, protocol=tcp]
logpath = /var/log/auth.log
bantime = 600

Централизованный сбор логов

Graylog

Graylog – это мощная платформа для централизованного сбора, анализа и визуализации логов.

Пример настройки Rsyslog для отправки логов в Graylog:

*.* @@graylog-server:514

ELK Stack (Elasticsearch, Logstash, Kibana)

ELK – это набор инструментов для сбора, обработки и визуализации логов.

Пример конфигурации Logstash для сбора логов из файлов:

input {
  file {
    path => "/var/log/syslog"
    start_position => "beginning"
  }
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
  }
}

Kibana используется для визуализации логов, упрощая анализ данных.

Заключение

Логирование – критически важный элемент работы сетевого администратора. Умение настраивать, фильтровать и анализировать логи позволяет оперативно реагировать на инциденты и обеспечивать безопасность сети.