Категория: Обнаружение, реагирование и мониторингОбновлено 2026-10-18

rsyslog (системный журнал syslog)

rsyslog это демон системного журналирования, который используют многие дистрибутивы Linux. Он принимает сообщения ядра, служб и сети и по правилам направляет их в файлы, базы данных или на другие серверы. Правила работают по объекту (facility) и приоритету или по содержимому сообщения, поэтому rsyslog чаще всего и применяют, чтобы отправлять копию логов сервера за его пределы.

Как rsyslog обрабатывает сообщение

rsyslog устроен как конвейер из трёх этапов, он описан в документации по базовой структуре. Входы принимают сообщения, например imuxsock для локального сокета syslog и imtcp для сети. Каждое сообщение попадает в набор правил (ruleset), где правила проверяются сверху вниз, а каждое правило связывает фильтр с действиями, такими как запись в файл или пересылка на сервер. Главный файл это /etc/rsyslog.conf, который обычно подключает фрагменты из /etc/rsyslog.d/. Для новых настроек проект рекомендует синтаксис RainerScript, а старые стили sysklogd и директив с долларом считает устаревшими.

Классический фильтр это селектор вроде authpriv.*. Объект (facility) называет подсистему, которая писала в журнал, например auth, authpriv, cron, daemon, kern, mail и от local0 до local7. Приоритет идёт от debug до emerg. Приоритет в селекторе соответствует этому уровню и всем более серьёзным, а знак = выбирает только указанный уровень. Нумерация следует RFC 5424. Шаблоны определяют, в каком формате сообщение уходит на выход.

Пересылка логов на центральный сервер

Пересылку выполняет встроенный выход omfwd, который отправляет данные по UDP, TCP или TLS. В его документации советуют TCP с TLS вместо простого TCP или UDP и очередь, чтобы недоступный сервер не блокировал локальное журналирование. Пример для отправителя:

global(workDirectory="/var/spool/rsyslog")
action(type="omfwd" target="logs.example.com" port="6514" protocol="tcp"
  StreamDriver="ossl" StreamDriverMode="1"
  StreamDriverAuthMode="x509/name"
  StreamDriverPermittedPeers="logs.example.com"
  StreamDriver.CAFile="/etc/ssl/rsyslog/ca.pem"
  StreamDriver.CertFile="/etc/ssl/rsyslog/client.pem"
  StreamDriver.KeyFile="/etc/ssl/rsyslog/client.key"
  action.resumeRetryCount="-1" queue.type="LinkedList"
  queue.filename="fwd_logs" queue.saveOnShutdown="on")

Порт 6514 выделен в RFC 5425 для syslog поверх TLS. Принимающая сторона загружает imtcp с теми же настройками потокового драйвера и списком PermittedPeer, где перечислены допустимые клиенты. Перед перезапуском службы проверьте файл командой rsyslogd -N1.

Строки очереди важны. action.resumeRetryCount="-1" повторяет попытки без ограничения, а queue.filename позволяет неотправленным сообщениям сбрасываться на диск, когда память заполнена, так что короткий простой лог-хоста не должен приводить к потере сообщений. Проверьте это: остановите приёмник на некоторое время и запустите снова.

Надёжность, доверие и типичные ошибки

Обычный syslog не рассчитан на враждебные сети. В NIST SP 800-92 отмечено, что UDP не гарантирует доставку записей, что в большинстве реализаций нет контроля доступа и любой хост может писать на сервер, и что атакующий может забросать его поддельными данными. Поэтому ограничьте доступ к порту приёмника межсетевым экраном и используйте TLS с PermittedPeer, чтобы принимались только ваши серверы.

TCP лучше UDP, но потерь не исключает. Для подтверждаемой доставки в rsyslog есть RELP через omrelp и imrelp. В документации imrelp сказано, что он намного надёжнее простого TCP, хотя возможен редкий дубль или потеря при остановке. Дисковые очереди помогают при простоях, но queue.saveOnShutdown работает только при штатной остановке, а не при сбое или потере питания.

Ещё две ловушки: короткие устаревшие формы пересылки, начинающиеся с одного или двух символов «коммерческое at», обходят очереди, поэтому пишите явную форму action(), а имена файлов, собранные из значений от отправителя, например имя хоста, требуют опции secpath-replace, чтобы отправитель не выбирал путь.

Почему логи вне сервера важны после взлома

Локальному логу можно доверять ровно настолько, насколько защищён root на машине, где он лежит. В NIST SP 800-92 подчёркнуто, что многие руткиты специально меняют логи и стирают следы своей установки. Тот, кто получил root, может править или удалять файлы в /var/log либо остановить демон. Копия, уже лежащая на другом хосте, сохраняет всё, что произошло до этого момента, а сервер, внезапно замолчавший в центральном журнале, сам по себе сигнал.

Держите лог-хост отдельно от серверов, которые он записывает: свои учётные данные, никаких общих административных аккаунтов и доступ только у тех, кто расследует. В нашем руководстве по мониторингу объясняется, что искать, когда логи собраны в одном месте, а руководство по SIEM для небольшого сервера показывает следующий шаг. Во время инцидента центральная копия это улика, которой ещё можно верить, поэтому используйте её в хронологии реагирования на взлом. Локальный журнал читают через journalctl, записи по командам и файлам даёт auditd, а SIEM сопоставляет объединённый поток.

Связанные термины: journalctl, auditd, SIEM, Реагирование на инциденты, Контроль целостности файлов.

Часто задаваемые вопросы

Для чего нужен rsyslog?

rsyslog принимает сообщения ядра, служб и других хостов и по правилам направляет их в файлы, базы данных или на удалённые серверы. На серверах его чаще всего используют для записи системных логов и пересылки копии на центральный лог-хост.

Что такое объекты и приоритеты syslog?

Объект (facility) называет подсистему, создавшую сообщение, например auth, cron, kern или от local0 до local7. Приоритет это важность сообщения, от debug до emerg, а селектор вроде authpriv.* соответствует выбранному приоритету и всем более серьёзным.

Как переслать логи на удалённый сервер через rsyslog?

Добавьте action() с type="omfwd", адресом сервера, портом и protocol="tcp", а лучше ещё и настройки TLS и очередь. Перед перезапуском rsyslog проверьте файл командой rsyslogd -N1.

Что выбрать для пересылки: UDP, TCP, TLS или RELP?

Документация rsyslog рекомендует TCP с TLS вместо простого TCP или UDP, а RELP когда критична подтверждаемая доставка. UDP не гарантирует, что сообщения дойдут.

Нужен ли rsyslog, если есть журнал systemd?

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

Хотите увидеть, в каком состоянии ваш сервер?

Запустите бесплатную read-only проверку сервера или откройте Security Lab и посмотрите цикл обнаружение, сдерживание, восстановление, проверка в действии.

Получить бесплатную проверку сервераОткрыть Security Lab