Поиск по сайту:

Установите централизованный сервер журналов с помощью Rsyslog в Debian 9


Это руководство существует для этих версий ОС

  • Debian 11 (Bullseye)
  • Debian 9 (Stretch)

На этой странице

  1. Настроить Rsyslog как сервер
  2. Настроить Rsyslog в качестве клиента

В Linux файлы журналов — это файлы, содержащие сообщения о системных функциях, которые используются системными администраторами для выявления возможных проблем на машинах. Журналы помогают администраторам визуализировать события, которые происходили в системе с течением времени. Обычно все файлы журналов хранятся в каталоге /var/log в Linux. В этом месте есть несколько типов файлов журнала для хранения различных сообщений, таких как файл журнала для записи системных событий, файл журнала для сообщений, связанных с безопасностью, другие файлы журнала, предназначенные для ядра, пользователей или заданий cron. Основная цель файлов журнала — устранение неполадок в системе. Большинство файлов журналов в Linux контролируются службой rsyslogd. В более новых выпусках дистрибутивов Linux файлы журналов также контролируются и управляются системной службой journald, которая является частью программы инициализации systemd. Журналы, хранящиеся демоном журнала, записываются в двоичном формате и в основном являются энергозависимыми, хранятся в ОЗУ и в кольцевом буфере в /run/log/journal/. Однако службу журнала также можно настроить для постоянного хранения сообщений системного журнала.

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

Демон Rsyslog можно настроить для одновременной работы в качестве клиента и сервера. Настроенный для работы в качестве сервера, Rsyslog будет прослушивать порт 514 TCP и UDP по умолчанию и начнет собирать сообщения журнала, которые отправляются по сети удаленными системами. В качестве клиента Rsyslog будет отправлять по сети внутренние сообщения журнала на удаленный сервер Ryslog через те же порты TCP или UDP.

Rsyslog будет фильтровать сообщения системного журнала в соответствии с выбранными свойствами и действиями. Фильтры rsyslog следующие:

  1. Заявители, предоставляющие услуги или приоритетные
  2. Фильтры на основе свойств
  3. Фильтры на основе выражений

Фильтр объекта представлен внутренней подсистемой Linux, которая создает журналы. Они классифицируются, как представлено ниже:

  • auth/authpriv = сообщения, создаваемые процессами аутентификации.
  • cron= журналы, относящиеся к задачам cron
  • daemon = сообщения, связанные с запущенными системными службами.
  • kernel = сообщения ядра Linux.
  • mail = сообщения почтового сервера
  • syslog = сообщения, относящиеся к системному журналу или другим демонам (сервер DHCP отправляет сюда журналы).
  • lpr = принтеры или сообщения сервера печати
  • local0 – local7 = настраиваемые сообщения под контролем администратора

 Уровни приоритета или серьезности назначаются ключевому слову и номеру, как описано ниже.

  • emerg = экстренный – 0
  • alert = Оповещения – 1
  • err = ошибки – 3
  • warn = предупреждения – 4
  • уведомление = уведомление – 5
  • info = Информация – 6
  • debug = Отладка – 7 высший уровень

Также доступны некоторые специальные ключевые слова Rsyslog, такие как знак звездочки (*) для определения всех
средств или приоритетов, ключевое слово none, которое не указывает приоритетов, знак равенства (=), который выбирает только этот приоритет, и восклицательный знак ( !) что сводит на нет приоритет.

Часть действия системного журнала представлена оператором назначения. Назначение сообщения журнала может быть файлом, хранящимся в файловой системе, файлом в системном пути /var/log/, вводом другого локального процесса через именованный канал или FIFO. Сообщения журнала также могут быть направлены пользователям, отброшены в черную дыру (/dev/null) или отправлены на стандартный вывод или на удаленный сервер системного журнала по протоколу TCP/UDP. Сообщения журнала также могут храниться в базе данных, такой как MySQL или PostgreSQL.

Настройте Rsyslog как сервер

Демон Rsyslog автоматически устанавливается в большинстве дистрибутивов Linux. Однако, если Rsyslog не установлен в вашей системе, вы можете выполнить одну из приведенных ниже команд, чтобы установить службу> вам потребуются привилегии root для запуска команд.

В дистрибутивах на базе Debian:

sudo apt-get install rsyslog

В дистрибутивах на основе RHEL, таких как CentOS:

sudo yum install rsyslog

Чтобы проверить, запущен ли демон Rsyslog в системе, выполните следующие команды, в зависимости от версии вашего дистрибутива.

В новых дистрибутивах Linux с systemd:

systemctl status rsyslog.service

В более старых версиях Linux с инициализацией:

service rsyslog status
/etc/init.d/rsyslog status

Чтобы запустить демон rsyslog, введите следующую команду.

В более старых версиях Linux с инициализацией:

service rsyslog start
/etc/init.d/rsyslog start

В последних дистрибутивах Linux:

systemctl start rsyslog.service

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

sudo vi /etc/rsyslog.conf

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

$ModLoad imudp 
$UDPServerRun 514

Поскольку протокол UDP не является надежным для обмена данными по сети, вы можете настроить Rsyslog для вывода сообщений журнала на удаленный сервер по протоколу TCP. Чтобы включить протокол приема TCP, откройте файл /etc/rsyslog.conf и раскомментируйте следующие строки, как показано ниже. Это позволит демону rsyslog связываться и прослушивать сокет TCP на порту 514.

$ModLoad imtcp 
$InputTCPServerRun 514

Оба протокола можно включить в rsyslog для одновременной работы.

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

$AllowedSender TCP, 127.0.0.1, 10.110.50.0/24, *.yourdomain.com

Вам также потребуется создать новый шаблон, который будет анализироваться демоном rsyslog перед получением входящих журналов. Шаблон должен указать локальному серверу Rsyslog, где хранить входящие сообщения журнала. Определите шаблон сразу после строки $AllowedSender, как показано в примере ниже.

$template Incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
*.*  ?Incoming-logs
& ~

Чтобы регистрировать только сообщения, созданные средством kern, используйте приведенный ниже синтаксис.

kern.*   ?Incoming-logs

Полученные журналы анализируются по приведенному выше шаблону и будут храниться в локальной файловой системе в каталоге /var/log/ в файлах, названных в честь клиентского средства имени хоста клиента, создавшего сообщения: %HOSTNAME% и %PROGRAMNAME% переменные.

Приведенное ниже правило перенаправления & ~ настраивает демон Rsyslog для сохранения входящих сообщений журнала только в указанные выше файлы, указанные именами переменных. В противном случае полученные журналы будут дополнительно обработаны, а также сохранены в содержимом локальных журналов, таких как файл /var/log/syslog.

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

mail.* ~

Другие переменные, которые можно использовать для вывода имен файлов: %syslogseverity%, %syslogfacility%, %timegenerated%, %HOSTNAME%, %syslogtag%, %msg%, %FROMHOST-IP%, %PRI%, %MSGID%, %APP-NAME%, %TIMESTAMP%, %$год%, %$месяц%, %$день%

Начиная с Rsyslog версии 7, для объявления шаблона на сервере Rsyslog можно использовать новый формат конфигурации.

Образец шаблона версии 7 может выглядеть так, как показано в строках ниже.

template(name="MyTemplate" type="string"
         string="/var/log/%FROMHOST-IP%/%PROGRAMNAME:::secpath-replace%.log"
        )

Другой режим, в котором вы можете написать вышеуказанный шаблон, также может быть таким, как показано ниже:

template(name="MyTemplate" type="list") {
    constant(value="/var/log/")
    property(name="fromhost-ip")
    constant(value="/")
    property(name="programname" SecurePath="replace")
    constant(value=".log")
    }

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

sudo service rsyslog restart
sudo systemctl restart rsyslog

Чтобы проверить, какие сокеты rsyslog в состоянии прослушивания открыты в системе Debian Linux, вы можете выполнить команду netstat с привилегиями root. Передайте результаты через утилиту фильтрации, такую как grep.

sudo netstat –tulpn | grep rsyslog

Имейте в виду, что вы также должны открыть порты Rsyslog в брандмауэре, чтобы разрешить установку входящих соединений.

В дистрибутивах на основе RHEL с активированным Firewalld введите следующие команды:

firewall-cmd --permanent --add-port=514/tcp
firewall-cmd --permanent --add-port=514/tcp
firewall-cmd –reload

В дистрибутивах на основе Debian с активным брандмауэром UFW выполните следующие команды:

ufw allow 514/tcp
ufw allow 514/udp

Правила межсетевого экрана Iptables:

iptables -A INPUT -p tcp -m tcp --dport 514 -j ACCEPT
iptables -A INPUT -p udp --dport 514 -j ACCEPT

Настройте Rsyslog в качестве клиента

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

*. *  @IP_REMOTE_RSYSLOG_SERVER:514
*. *  @FQDN_RSYSLOG_SERVER:514

Эта строка позволяет службе Rsyslog выводить все внутренние журналы на удаленный сервер Rsyslog через UDP-порт 514.

Для отправки журналов по протоколу TCP используйте следующий шаблон:

*. *  @@IP_reomte_syslog_server:514

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

cron.* @ IP_reomte_syslog_server:514

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

$ActionQueueFileName queue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1

Чтобы применить приведенные выше правила, необходимо перезапустить демон Rsyslog, чтобы он мог действовать как клиент.