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 используется для визуализации логов, упрощая анализ данных.
Заключение
Логирование – критически важный элемент работы сетевого администратора. Умение настраивать, фильтровать и анализировать логи позволяет оперативно реагировать на инциденты и обеспечивать безопасность сети.