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

Rsyslog — это мощная, безопасная и высокопроизводительная система обработки логов, которая собирает данные из разных источников (систем/приложений) и выводит их в несколько форматов.

Rsyslog эволюционировал из обычного демона syslog до полнофункциональной системы ведения логов уровня предприятия. Rsyslog разработан в двух моделях (клиент/сервер), поэтому его можно настроить как клиент и/или как центральный сервер ведения логов для других серверов, сетевых устройств и удаленных приложений.

 

Испытательная среда

Для целей данной статьи мы будем использовать следующие хосты:

  • Сервер: 192.168.241.140
  • Клиент: 172.31.21.58

Как установить и настроить сервер Rsyslog?

Большинство дистрибутивов Linux поставляются с предустановленным пакетом rsyslog. Если он не установлен, вы можете установить его с помощью вашего менеджера пакетов Linux, как показано ниже:

[code]$ sudo yum update && yum install rsyslog #CentOS 7
$ sudo apt update && apt install rsyslog #Ubuntu 16.04, 18.04[/code]

 

После установки rsyslog вам нужно запустить службу, включить автозапуск при загрузке и проверить статус с помощью команды systemctl:

[code]$ sudo systemctl start rsyslog
$ sudo systemctl enable rsyslog
$ sudo systemctl status rsyslog[/code]

 

Основной файл конфигурации rsyslog находится в каталоге /etc/rsyslog.conf, который загружает модули, определяет глобальные директивы, содержит правила для обработки сообщений журнала, а также включает все файлы конфигурации в /etc/rsyslog.d/ для различных приложений/служб:

[bash]$ sudo vim /etc/rsyslog.conf[/bash]

 

По умолчанию rsyslog использует модули imjournal и imusock для импорта структурированных сообщений логов из журнала systemd и для приема сообщений syslog из приложений, запущенных в локальной системе через сокеты Unix, соответственно:

Rsyslog-Modules-for-Logging

 

 

Чтобы настроить rsyslog как сетевой/центральный сервер протоколирования, вам необходимо установить протокол (UDP, либо TCP, либо оба), который он будет использовать для удаленного приема syslog, а также для порта, который он прослушивает.

Если вы хотите использовать UDP-соединение, которое является более быстрым, но менее надежным, выполните поиск и раскомментируйте приведенные ниже строки (замените 514 на порт, который вы хотите прослушать, значение должно соответствовать адресу порта, на который отправляются сообщения клиентов).

[code]$ModLoad imudp
$UDPServerRun 514[/code]

 

Чтобы использовать TCP-соединение (которое медленнее, но надежнее), выполните поиск и раскомментируйте приведенные ниже строки:

[code]$ModLoad imtcp
$InputTCPServerRun 514[/code]

 

В нашем случае мы хотим одновременно использовать как UDP, так и TCP-соединения.

Configure-Rsyslog-Logging-Server

 

 

Затем вам нужно определить набор правил для обработки удаленных логов в следующем формате:

[bash]facility.severity_level destination (where to store log)[/bash]

 

Где:

  • facility: это тип сообщения о процессе/приложении, к которому относятся auth, cron, daemon, kernel, local0..local7. Использование «*» означает все объекты.
  • severity_level: это тип сообщения журнала: out-0, alert-1, crit-2, err-3, warn-4, notice-5, info-6, debug-7. Использование «*» означает все уровни severity, а «none» означает ни одного уровня severity.
  • destination: локальный файл, либо удаленный сервер rsyslog (определенный в форме IP:порт).

 

Мы будем использовать следующий набор правил для сбора логов с удаленных хостов, используя шаблон RemoteLogs. Обратите внимание, что эти правила должны применяться до любых правил обработки локальных сообщений, как показано на скриншоте ниже:

 

[code]$template RemoteLogs,»/var/log/%HOSTNAME%/%PROGRAMNAME%.log»
*.* ?RemoteLogs
& ~[/code]

 

Define-Ruleset-for-Rsyslog-Logging

 

 

Глядя на вышеприведенный набор правил, первое правило:

[code]$template RemoteLogs,”/var/log/%HOSTNAME%/%PROGRAMNAME%.log”[/code]

 

В директиве $template говорится, что демон rsyslog собирает и записывает все полученные удаленные сообщения в различные журналы в /var/log на основе имени хоста (имя клиентского компьютера) и средства удаленного клиента (программа/приложение), которые генерируют сообщения как определенные по правилам, присутствующим в шаблоне RemoteLogs.

Вторая строка «*.*?RemoteLogs» означает запись сообщений со всех объектов на всех уровнях severity с использованием конфигурации шаблона RemoteLogs.

Последняя строка «&~» указывает rsyslog прекратить обработку сообщений после их записи в файл. Если вы не укажете «&~», сообщения будут записаны в локальные файлы.

Есть много других шаблонов, которые вы можете использовать, для получения дополнительной информации, загляните в справочную страницу конфигурации rsyslog (man rsyslog.conf) или обратитесь к онлайн-документации Rsyslog.

Это вся настройка сервера rsyslog. Сохраните и закройте файл конфигурации. Чтобы применить последние изменения, перезапустите демон rsyslog с помощью следующей команды:

[bash]$ sudo systemctl restart rsyslog[/bash]

 

Теперь проверьте сетевые сокеты rsyslog. Используйте команду ss (или netstat с теми же флагами) и передайте вывод grep для фильтрации соединений rsyslogd:

[bash]$ sudo ss -tulnp | grep «rsyslog»[/bash]

 

Check-Rsyslog-Network-Status

 

 

Далее, в CentOS 7, если вы включили SELinux, запустите следующие команды, чтобы разрешить трафик rsyslog сгруппированный  по типу сетевого сокета:

[code]$ sudo semanage -a -t syslogd_port_t -p udp 514
$ sudo semanage -a -t syslogd_port_t -p tcp 514 [/code]

 

Если в системе включен брандмауэр, вам необходимо дать доступ через порт 514, чтобы разрешить оба соединения UDP/TCP с сервером rsyslog:

[code]————- On CentOS ————-
$ sudo firewall-cmd —permanent —add-port=514/udp
$ sudo firewall-cmd —permanent —add-port=514/tcp
$ sudo firewall-cmd —reload[/code]

 

 

[code]————- On Ubuntu ————-
$ sudo ufw allow 514/udp
$ sudo ufw allow 514/tcp
$ sudo ufw reload[/code]

 

 

Как настроить клиент Rsyslog для отправки логов на сервер Rsyslog?

Теперь в клиентской системе проверьте, запущена ли служба rsyslog с помощью следующей команды:

[bash]$ sudo systemctl status rsyslog[/bash]

 

Если он не установлен, установите его и запустите службу, как показано ранее:

[code]$ sudo yum update && yum install rsyslog #CentOS 7
$ sudo apt update && apt install rsyslog #Ubuntu 16.04, 18.04[/code]

 

[code]$ sudo systemctl start rsyslog
$ sudo systemctl enable rsyslog
$ sudo systemctl status rsyslog[/code]

 

После запуска службы rsyslog откройте основной файл конфигурации, в котором вы будете выполнять изменения для конфигурации по умолчанию:

[bash]$ sudo vim /etc/rsyslog.conf[/bash]

 

Чтобы заставить демон rsyslog действовать как клиент журнала и перенаправить все локально созданные сообщения логов на удаленный сервер rsyslog, добавьте это правило пересылки в конец файла, как показано на следующем скриншоте:

[bash]*. * @@192.168.100.10:514[/bash]

 

Configure-Rsyslog-Client

 

 

Вышеупомянутое правило будет отправлять сообщения со всех объектов и на всех уровнях severity. Чтобы отправлять сообщения из определенного объекта, например auth, используйте следующее правило:

[bash]auth. * @@192.168.100.10:514[/bash]

 

Сохраните изменения и закройте файл конфигурации. Чтобы применить вышеуказанные настройки, перезапустите демон rsyslog.

[bash]$ sudo systemctl restart rsyslog[/bash]

 

Как отслеживать удаленное ведение логов на сервере Rsyslog?

Последний шаг — проверить, действительно ли rsyslog принимает и регистрирует сообщения от клиента /var/log в форме hostname/programname.log.

Запустите команду ls для вывода полного списка каталога родительских журналов и проверьте, есть ли каталог с именем ip-172.31.21.58 (или каким-либо именем хоста вашего клиентского компьютера).

[bash]$ ls -l /var/log/[/bash]

 

Check-Rsyslog-Client-Logging

 

 

Если каталог существует, проверьте файлы логов внутри него, выполнив:

[bash]$ sudo ls -l /var/log/ip-172-31-21-58/[/bash]

 

Check-Rsyslog-Client-Logs

 

Итоги

Rsyslog — это высокопроизводительная система обработки логов, разработанная в архитектуре клиент/сервер. Мы надеемся, что вы сможете установить и настроить Rsyslog в качестве центрального/сетевого сервера веления логов, как показано в этой статье.

 

 

Спасибо за уделенное время на прочтение статьи!

Если возникли вопросы, задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Ciscoкурсы по кибербезопасности,  полный курс по кибербезопасности от Академии Ciscoкурсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

Меню