Используемые термины: CentOS, Ubuntu, Linux.
Централизованный сервер логов может помочь с анализом событий на компьютерах в нашей инфраструктуре. Настроить их сбор с журналов можно разными способами — мы разберем использование journald. В качестве сервера и клиентов могут выступать различные системы на базе Linux. Для примера, будем собирать логи NGINX.
Для работы нам понадобятся следующие компоненты — systemd-journal-gateway, systemd-journal-remote, systemd-journal-upload.
Их установку нужно выполнить из репозитория на всех компьютерах (как на сервере, так и клиентах).
а) если используем систему Red Hat / CentOS:
yum install systemd-journal-gateway
а) если используем систему Debian / Ubuntu:
apt-get install systemd-journal-remote
На сервере необходимо настроить систему безопасности и запуск journal-remote.
При использовании брандмауэра, необходимо открыть TCP-порты 19531 и 19532.
1. Если используем firewalld:
firewall-cmd –permanent –add-port={19531,19532}/tcp
firewall-cmd –reload
2. Если используем iptables:
iptables -A INPUT -p tcp –dport 19531:19532 -j ACCEPT
Если в нашей системе используется SELinux либо его корректно настраиваем, либо отключаем командами:
setenforce 0
sed -i ‘s/^SELINUX=.*/SELINUX=disabled/g’ /etc/selinux/config
Для запуска серверной части необходимо стартовать компонент сбора логов — systemd-journal-remote. Но при попытке это сделать, мы получим ошибку, так как необходимо подготовить сервер к запуску.
Создаем каталог для хранения логов:
mkdir -p /var/log/journal/remote
Задаем владельца для созданного каталога:
chown systemd-journal-remote:systemd-journal-remote /var/log/journal/remote
Создаем каталоги для хранения сертификатов безопасности (если их нет):
mkdir /etc/ssl/{private,certs,ca}
Генерируем ключ центра сертификации (CA):
openssl genrsa -out /etc/ssl/ca/trusted.key 4096
Создаем сертификат центра сертификации:
openssl req -x509 -new -nodes -key /etc/ssl/ca/trusted.key -sha256 -days 1825 -out /etc/ssl/ca/trusted.pem -subj “/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=journal-server.local”
* где journal-server.local — имя (hostname) нашего journal сервера.
Генерируем приватный ключ для нашего сервера journal:
openssl genrsa -out /etc/ssl/private/journal-remote.pem 2048
Создаем файл запроса сертификата:
openssl req -new -key /etc/ssl/private/journal-remote.pem -out /etc/ssl/certs/journal-remote.csr -subj “/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=journal-server.local”
Наконец, создаем сертификат для journald на основе запроса и CA:
openssl x509 -req -in /etc/ssl/certs/journal-remote.csr -CA /etc/ssl/ca/trusted.pem -CAkey /etc/ssl/ca/trusted.key -CAcreateserial -out /etc/ssl/certs/journal-remote.pem -days 1825 -sha256
Наконец, разрешаем запуск systemd-journal-remote и стартуем его:
systemctl enable systemd-journal-remote
systemctl start systemd-journal-remote
Проверим, что сервис стартанул:
systemctl status systemd-journal-remote
* если возникли проблемы, то анализируем лог /var/log/messages (RPM) или /var/log/syslog (deb).
Перед тем, как переходить к настройке клиента, с сервера копируем ключи для CA на клиента. Это можно сделать, например, с помощью scp:
scp /etc/ssl/ca/trusted.{key,pem} [email protected]:/tmp
* в данном примере мы скопировали два ключа для CA на компьютер 192.168.0.11. Подключение идет от пользователя user, который должен быть на клиенте.
Теперь переходим к компьютеру, который должен отправлять свои логи на сервер. Для его настройки нам нужно также сгенерировать сертификаты, а также настроить и запустить компонент systemd-journal-upload.
Создаем каталоги для сертификатов:
Копируем наши ключи для CA из каталога /tmp в /etc/ssl/ca:
cp /tmp/trusted.{key,pem} /etc/ssl/ca/
Теперь генериируем сертификат с помощью ключей CA:
openssl genrsa -out /etc/ssl/private/journal-upload.pem 2048
openssl req -new -key /etc/ssl/private/journal-upload.pem -out /etc/ssl/certs/journal-upload.csr -subj “/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=journal-upload”
openssl x509 -req -in /etc/ssl/certs/journal-upload.csr -CA /etc/ssl/ca/trusted.pem -CAkey /etc/ssl/ca/trusted.key -CAcreateserial -out /etc/ssl/certs/journal-upload.pem -days 1825 -sha256
Открываем файл для настройки journal-upload:
vi /etc/systemd/journal-upload.conf
Добавляем:
URL=https://journal-server.local:19532
* где journal-server.local — имя сервера логов, которое мы использовали при генерировании сертификата сервера. Обращение к серверу должно идти по имени, которое мы указали в сертификате, в противном случае, мы получим ошибку при запуске сервиса. Таким образом, данное имя должно быть либо в локальном DNS, либо в файле hosts.
Разрешаем автозапуск демона
systemctl enable systemd-journal-upload
systemctl start systemd-journal-upload
Проверяем, что он корректно запустился:
systemctl status systemd-journal-upload
Возвращаемся на сервер и проверяем, что в каталоге /var/log/journal/remote появился каталог, соответствующий удаленному компьютеру:
ll /var/log/journal/remote
В моем случае, это был remote-192.168.0.10.journal, где 192.168.0.10 — IP-адрес удаленной машины.
Чтение лога можно запустить командой:
journalctl -D /var/log/journal/remote –follow
Пробуем перезапустить какую-нибудь службу на удаленном компьютере — мы должны увидеть событие на сервере логов.
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies