Отправка журнала с Numa Edge на сервер консолидации журналов
Введение
В этом примере будет показана пошаговая настройка схемы отправки системного журнала Numa Edge (далее – edge) на удаленный сервер консолидации журналов (далее – сервер) по защищенному каналу (с использованием TLS).
В тексте используется следующее общепринятое соглашение перед листингом команд:
- команды после символа # выполняются от имени root.
- команды после символа $ выполняются от обычного пользователя.
Подготовительный этап
Задание адресации стенда
В примере, в целях упрощения, не будет рассматриваться организация связности и сервера доменных имён. Будем использовать статическую адресацию на обеих сторонах, а также статическое сопоставление адреса и имени сервера консолидации журналов на edge. Подразумевается, что сеть, в которой находится наш сервер, напрямую доступна через интерфейс eth1.
Со стороны сервера назначаем адрес, например, 192.168.1.100 любым удобным Вам способом:
| # ip a a 192.168.1.100/24 dev ens3
# ip l set up ens3
|
И далее на сервере укажем статическое сопоставление адреса edge и его имени хоста, добавив запись в /etc/hosts:
Назначим адрес из этой же подсети на интерфейс eth1 edge, а также зададим статическое сопоставление имени хоста IP-адресу сервера:
| # set interfaces ethernet eth1 address '192.168.1.254/24'
# set system static-host-mapping host-name log-server inet 192.168.1.100
# commit
|
Проверяем доступность (с любой из сторон):
| admin@edge-fw# ping log-server -c 1
PING log-server (192.168.1.100): 56 data bytes
64 bytes from 192.168.1.100: seq=0 ttl=64 time=0.728 ms
--- log-server ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.728/0.728/0.728 ms
|
На этом настройка связности на стенде завершена.
Создание УЦ и генерация сертификатов
Для выполнения задачи потребуется развернуть УЦ и выписать сертификаты для конечных устройств (хост консолидации журналов и edge). Для простоты будем разворачивать УЦ непосредственно на сервере.
В качестве окружения используется операционная система Debian 12.
Разворачивание УЦ
Прежде чем приступить к разворачиванию УЦ, внесем правки в конфигурацию OpenSSL. Для начала сохраним конфигурацию по умолчанию:
| # cp /etc/ssl/openssl.{cnf,cnf.bkp}
Для секции CA_default отредактируем параметр dir:
[ CA_default ]
dir = ./
|
Создадим требуемые директории:
| # mkdir syslog-CA && cd syslog-CA && mkdir certs crl newcerts private csr csrtmplt
# touch index.txt
# touch index.txt.attr
# echo 1000 > serial
|
Генерация сертификатов
Дальнейшие действия производим в каталоге syslog-CA.
Генерируем закрытый ключ для нашего УЦ:
| $ openssl genrsa -out private/cakey.pem 4096
|
Далее с использованием этого ключа сгенерируем самоподписанный сертификат УЦ:
| $ openssl req -utf8 -new -x509 -key private/cakey.pem -days 1800 -extensions v3_ca -out certs/CACert.crt -subj "/C=RU/ST=SPb/L=SPb/O=Numa, Inc./OU=IT/CN=NUMATECH.com"
|
В процессе генерации сертификата потребуется заполнить ряд полей в режиме интерактивного ввода.
Аналогичным образом генерируем закрытый ключ для сертификата сервера:
| $ openssl genrsa -out private/servkey.pem 4096
|
Далее, создадим шаблоны для формирования файлов запроса на выпуск сертификата для сервера и для edge с указанием необходимых нам полей.
Создадим файлы в ранее созданной папке csrtmplt
Пример – server.conf
| [req]
distinguished_name = req_distinguished_name
req_extensions = req_ext
[req_distinguished_name]
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name (full name)
localityName = Locality Name (eg, city)
0.organizationName = Organization Name (eg, company)
organizationalUnitName = Organizational Unit Name (eg, section)
commonName = Common Name (eg, your name or your server\'s hostname)
emailAddress = Email Address
[req_ext]
subjectAltName = @alt_names
[alt_names]
IP.1 = 192.168.1.100
DNS.1 = log-server
IP-адрес указывается при желании. Также есть возможность указания нескольких имён или адресов.
|
Для edge поступаем аналогично:
Пример – edge.conf
| [req]
distinguished_name = req_distinguished_name
req_extensions = req_ext
[req_distinguished_name]
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name (full name)
localityName = Locality Name (eg, city)
0.organizationName = Organization Name (eg, company)
organizationalUnitName = Organizational Unit Name (eg, section)
commonName = Common Name (eg, your name or your server\'s hostname)
emailAddress = Email Address
[req_ext]
subjectAltName = @alt_names
[alt_names]
IP.1 = 192.168.1.254
DNS.1 = edge-fw
|
Далее сгенерируем запрос на выпуск сертификата с использованием подготовленного шаблона:
| $ openssl req -utf8 -new -key private/servkey.pem -out csr/serv.csr -config csrtmplt/server.conf -subj "/C=RU/ST=SPb/L=SPb/O=Numa, Inc./OU=IT/CN=bob.com"
|
В процессе генерации файла запроса обязательно, во избежание ошибки генерации, потребуется заполнить ряд полей в режиме интерактивного ввода.
И выпускаем сертификат сервера, выполнив команду:
| $ openssl x509 -req -days 365 -in csr/serv.csr -CA certs/CACert.crt -CAkey private/cakey.pem -CAcreateserial -out certs/ServCert.crt -extensions req_ext -extfile csrtmplt/server.conf -subj "/C=RU/ST=SPb/L=SPb/O=Numa, Inc./OU=IT/CN=bob.com"
|
Аналогичные действия повторяем при генерации сертификата для edge:
| $ openssl genrsa -out private/edgekey.pem 4096
$ openssl req -utf8 -new -key private/edgekey.pem -out csr/edge.csr -config csrtmplt/edge.conf -subj "/C=RU/ST=SPb/L=SPb/O=Numa, Inc./OU=IT/CN=jhon.com"
$ openssl x509 -req -days 365 -in csr/edge.csr -CA certs/CACert.crt -CAkey private/cakey.pem -CAcreateserial -out certs/EdgeCert.crt -extensions req_ext -extfile csrtmplt/edge.conf
|
В качестве последнего этапа генерации PKI необходимо выпустить файл списка отзыва сертификатов. Это делается командой:
| openssl ca -keyfile private/cakey.pem -cert certs/CACert.crt -gencrl -out crl/CACert.crl
|
На этом процесс выпуска сертификатов завершен. Но прежде чем перейти к настройке syslog-ng на конечных устройствах, необходимо передать и импортировать сертификат на edge. Для этого сформируем архив, поместив туда сертификат EdgeCert.crt и его закрытый ключ, а также сертификат УЦ:
| # mkdir edge-cert && cp syslog-CA/certs/EdgeCert.crt edge-cert && cp syslog-CA/certs/CACert.crt edge-cert && cp syslog-CA/private/edgekey.pem edge-cert
|
После этого сформируем архив:
| # tar -cvzf edge-cert.tgz -C edge-cert .
./
./CACert.crt
./CACert.crl
./EdgeCert.crt
./edgekey.pem
root@debian:~#
|
Далее любым удобным для Вас способом доставьте соответствующий архив на edge. В примере осуществляется копирование посредством утилиты scp:
| # scp edge-cert.tgz admin@192.168.1.254:
Numa Edge 1.0
(admin@192.168.1.254) Password:
edge-cert.tgz 100% 5042 1.8MB/s 00:00
|
После чего уже непосредственно на edge выполним импорт сертификатов командой операционного режима:
| admin@edge:~$ pki import from edge-cert.tgz
Импортируется сертификат УЦ Syslog CA Cert как CACert
Импортируется сертификат Syslog Edge Cert как EdgeCert
Импортируется ключ для EdgeCert
admin@edge:~$
|
Настройка syslog-ng
Сервер консолидации журналов
В первую очередь рассмотрим настройку пакета агрегатора журналов syslog-ng. Аналогичный пакет используется со стороны Numa Edge. Для начала выполним установку:
| root@log-server:~# apt install -y syslog-ng
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
syslog-ng
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 8,944 B of archives.
After this operation, 23.6 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bookworm/main amd64 syslog-ng all 3.38.1-5 [8,944 B]
Fetched 8,944 B in 0s (49.8 kB/s)
Selecting previously unselected package syslog-ng.
(Reading database ... 48900 files and directories currently installed.)
Preparing to unpack .../syslog-ng_3.38.1-5_all.deb ...
Unpacking syslog-ng (3.38.1-5) ...
Setting up syslog-ng (3.38.1-5) ...
root@log-server:~#
|
Создадим директории для хранения ключей и сертификатов, чтобы в дальнейшем указать их в конфигурации syslog-ng. Затем скопируем ранее выпущенные сертификаты и ключи в соответствующие директории:
| root@log-server:~# mkdir /etc/syslog-ng/ca.d /etc/syslog-ng/cert.d
root@log-server:~# cp syslog-CA/certs/CACert.crt /etc/syslog-ng/ca.d/
root@log-server:~# cp syslog-CA/certs/ServCert.crt /etc/syslog-ng/cert.d/
root@log-server:~# cp syslog-CA/private/servkey.pem /etc/syslog-ng/cert.d/
|
Создадим отдельный файл конфигурации в директории /etc/syslog-ng/conf.d/, описывающий источник сообщений edge и методы их обработки:
Пример – /etc/syslog-ng/conf.d/edge.conf
| ###############
# Описание источника (edge)
###############
source s_edge_tls_source {
syslog(ip(0.0.0.0)) port(6514)
# При желании можно указать конкретный адрес источника, например
# syslog(ip(192.168.1.254) port(6514)
transport("tls")
tls(
ca-dir("/etc/syslog-ng/ca.d/")
key-file("/etc/syslog-ng/cert.d/servkey.pem")
cert-file("/etc/syslog-ng/cert.d/ServCert.crt")
peer-verify(yes)
)
);
};
###############
# Описание параметров хранения передаваемых данных (укажем отдельный текстовый файл для журналов с edge).
###############
destination d_edge_log { file("/var/log/syslog-devices/edge.log"); };
###############
# Описание директивы логирования (получения и сохранения данных журнала).
###############
log { source(s_edge_tls_source); destination(d_edge_log); };
|
Чтобы избежать ошибки при установлении соединения о наличии самоподписанного сертификата (УЦ) в цепочке, выполним следующую команду в директории /etc/syslog-ng/ca.d/:
| # ln -s CACert.crt "$(openssl x509 -noout -hash -in CACert.crt).0"
|
Также необходимо предварительно создать указанную нами в конфигурации директорию:
| # mkdir /var/log/syslog-devices
### Numa Edge
|
Выполним соответствующие настройки по отправке журналов со стороны edge:
| $ set system syslog host LogServ
$ set system syslog host LogServ address log-server
$ set system syslog host LogServ facility all level notice
$ set system syslog host LogServ transport tls
$ set system syslog host LogServ x509-cert EdgeCert
$ commit
|
В рамках данной инструкции не рассматривается подробно настройка со стороны Numa Edge. Часть параметров не указывается и использует значения по умолчанию. Подробнее с возможностями настройки системы журналирования со стороны Numa Edge можно ознакомиться в документе "Numa Edge. Руководство администратора" в разделе "Регистрация событий".
После выполнения всех настроек сохраним текущую конфигурацию edge, выполнив команду:
Проверка отправки журнала
По завершении всех действий по настройке перезапустим сервис syslog-ng на сервере для применения новой конфигурации:
| # systemctl restart syslog-ng.service
|
Далее наблюдаем за системным журналом edge. Попытки подключения совершаются с интервалом 60 секунд. При успешном подключении в журнале появится запись вида:
| 2023-09-08 16:52:36 syslog-ng syslog notice 0 Syslog connection established; fd='17', server='AF_INET(192.168.1.100:6514)', local='AF_INET(0.0.0.0:0)'
|
На сервере появился файл edge.log в директории /var/log/syslog-devices/, который содержит системный журнал edge:
| root@log-server:~# ls -lah /var/log/syslog-devices/edge.log
-rw-r----- 1 root adm 41K Sep 8 16:53 /var/log/syslog-devices/edge.log
root@log-server:~# tail -8 /var/log/syslog-devices/edge.log
Sep 8 16:51:34 192.168.1.254 dnsmasq[3636]: started, version 2.80 cachesize 150
Sep 8 16:51:34 192.168.1.254 dnsmasq: Restart DNS forwarder: ok
Sep 8 16:51:34 192.168.1.254 dnsmasq[3636]: no servers found in /etc/dnsmasq-resolv.conf, will retry
Sep 8 16:51:34 192.168.1.254 fam: Удаление /etc/nologin
Sep 8 16:51:35 192.168.1.254 sshd: Start OpenBSD secure shell: ok
Sep 8 16:51:36 192.168.1.254 syslog-ng[1480]: Syslog connection failed; fd='17', server='AF_INET(192.168.1.100:6514)', error='No route to host (113)', time_reopen='60'
Sep 8 16:52:07 192.168.1.254 fam: Открытие /bin/login.util-linux-ng
Sep 8 16:52:36 192.168.1.254 syslog-ng[1480]: Syslog connection established; fd='17', server='AF_INET(192.168.1.100:6514)', local='AF_INET(0.0.0.0:0)'
root@log-server:~#
|
Таким образом, мы настроили отправку системного журнала с устройства Numa Edge на удаленный сервер с использованием TLS.
Настройка rsyslog
Сервер консолидации журналов
Рассмотрим настройку другого популярного агрегатора журналов – rsyslog. Для начала выполним установку основного пакета rsyslog, а также модуля rsyslog-gnutls:
| root@syslog-ng-serv:~# apt install -y rsyslog rsyslog-gnutls
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
libbson-1.0-0 libdbi1 libesmtp6 libhiredis0.14 libivykis0 libmongoc-1.0-0 libmongocrypt0 librabbitmq4 librdkafka1 libriemann-client0 libsnappy1v5
Use 'apt autoremove' to remove them.
Suggested packages:
rsyslog-mysql | rsyslog-pgsql rsyslog-mongodb rsyslog-doc rsyslog-gssapi rsyslog-relp gnutls-bin
The following NEW packages will be installed:
rsyslog rsyslog-gnutls
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 292 kB/1,016 kB of archives.
After this operation, 2,329 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bookworm/main amd64 rsyslog-gnutls amd64 8.2302.0-1 [292 kB]
Fetched 292 kB in 0s (1,103 kB/s)
Selecting previously unselected package rsyslog.
(Reading database ... 48597 files and directories currently installed.)
Preparing to unpack .../rsyslog_8.2302.0-1_amd64.deb ...
Unpacking rsyslog (8.2302.0-1) ...
Selecting previously unselected package rsyslog-gnutls.
Preparing to unpack .../rsyslog-gnutls_8.2302.0-1_amd64.deb ...
Unpacking rsyslog-gnutls (8.2302.0-1) ...
Setting up rsyslog (8.2302.0-1) ...
Created symlink /etc/systemd/system/syslog.service → /lib/systemd/system/rsyslog.service.
Created symlink /etc/systemd/system/multi-user.target.wants/rsyslog.service → /lib/systemd/system/rsyslog.service.
Setting up rsyslog-gnutls (8.2302.0-1) ...
Processing triggers for man-db (2.11.2-2) ...
|
Создадим резервную копию файла конфигурации по умолчанию:
| # cp /etc/rsyslog.{conf,conf.bkp}
|
Далее внесем небольшие правки в файл конфигурации:
- в секции RULES укажем, что существующие правила являются набором локальных правил и используются по умолчанию;
- создадим набор правил для удаленных хостов;
- зададим параметры подключения для удаленных хостов.
Ниже приведен листинг с внесенными изменениями. Полное перечисление локальных правил опущено.
Пример – /etc/rsyslog.conf
| # В секции MODULES закоментир
овать imtcp.
#################
#### MODULES ####
#################
...
#provides TCP syslog reception
#module(load="imtcp")
#input(type="imtcp" port="514")
...
# В секции RULES добавить строки указанные ниже до троеточия
###############
#### RULES ####
###############
# Set this rules as local ruleset
$RuleSet local
#
# Log anything besides private authentication messages to a single log file
...
#В конце файла добавить строки:
# Make local ruleset default
$DefaultRuleset local
# Remote Logging Rules
$RuleSet remote
*.* ?RemoteHost
###################
#### LISTENERS ####
###################
# Bind listeners for remote ruleset
$InputTCPServerBindRuleset remote
$InputTCPServerRun 6514
|
Создадим отдельный файл конфигурации в директории /etc/rsyslog.d/, описывающий подключение с использованием TLS:
Пример – /etc/rsyslog.d/edge-fw_tls.conf
| # Указываем драйвер gtls по умолчанию и пути до файлов сертификатов и ключей
global(
DefaultNetstreamDriver="gtls"
DefaultNetstreamDriverCAFile="/root/syslog-CA/certs/CACert.crt"
DefaultNetstreamDriverCertFile="/root/syslog-CA/certs/ServCert.crt"
DefaultNetstreamDriverKeyFile="/root/syslog-CA/private/servkey.pem"
)
# Параметры подключения
module(
load="imtcp"
StreamDriver.Name="gtls"
StreamDriver.Mode="1"
StreamDriver.AuthMode="x509/certvalid"
#StreamDriver.PrioritizeSAN="on"
)
# Задаем параметры хранения журналов с удаленных хостов
$template RemoteHost, "/var/log/remote/%HOSTNAME%.log"
*.* ?RemoteHost
# При необходимости, можно ограничить IP-адреса, с которых будем принимать журналы
#$AllowedSender TCP,10.250.10.0/24
Также необходимо создать директорию для хранения файлов журналов, которую мы указали в конфигурационном файле:
# mkdir /var/log/remote
|
Numa Edge
| Со стороны edge шаги по настройке не отличаются. Поэтому мы ограничимся повторным приведением команд конфигурации:
$ set system syslog host LogServ
$ set system syslog host LogServ address log-server
$ set system syslog host LogServ facility all level notice
$ set system syslog host LogServ transport tls
$ set system syslog host LogServ x509-cert EdgeCert
$ commit
$ save
|
Проверка отправки журнала
По завершении всех действий по настройке перезапустим сервис rsyslog на сервере для применения новой конфигурации:
| $ systemctl restart rsyslog.service
|
На сервере появился файл edge-fw.log в директории /var/log/remote/, который содержит системный журнал edge:
| root@syslog-ng-serv:~# cat /var/log/remote/edge-fw.log
2023-09-11T16:00:01+03:00 edge-fw syslog-ng[1482] Syslog connection broken; fd='18', server='AF_INET(192.168.1.100:6514)', time_reopen='60'
2023-09-11T16:00:02+03:00 edge-fw fam Открытие /usr/sbin/xtables-multi
2023-09-11T16:00:02+03:00 edge-fw fam Открытие /sbin/ip.iproute2
2023-09-11T16:00:03+03:00 edge-fw fam Открытие /usr/sbin/xtables-multi
2023-09-11T16:00:03+03:00 edge-fw fam Создание /etc/.shadow-filekD9ERJ
2023-09-11T16:00:03+03:00 edge-fw fam Изменение атрибутов /etc/.shadow-filekD9ERJ
2023-09-11T16:00:03+03:00 edge-fw fam Изменение атрибутов /etc/.shadow-filekD9ERJ
2023-09-11T16:00:03+03:00 edge-fw fam Удаление /etc/shadow-
2023-09-11T16:00:03+03:00 edge-fw auth-test pam_warn(lm:auth): function=[pam_sm_authenticate] flags=0 service=[lm] terminal=[<unknown>] user=[edge-selftest] ruser=[<unknown>] rhost=[<unknown>]
2023-09-11T16:00:03+03:00 edge-fw fam Создание /etc/shadow-
2023-09-11T16:00:03+03:00 edge-fw fam Изменение /etc/.shadow-filekD9ERJ
2023-09-11T16:00:03+03:00 edge-fw fam Перемещение /etc/.shadow-filekD9ERJ
2023-09-11T16:00:03+03:00 edge-fw auth-test pam_warn(lm:account): function=[pam_sm_acct_mgmt] flags=0 service=[lm] terminal=[<unknown>] user=[edge-selftest] ruser=[<unknown>] rhost=[<unknown>]
2023-09-11T16:00:03+03:00 edge-fw fam Перемещение /etc/shadow
2023-09-11T16:00:03+03:00 edge-fw auth-test pam_warn(lm:auth): function=[pam_sm_authenticate] flags=0 service=[lm] terminal=[<unknown>] user=[edge-selftest] ruser=[<unknown>] rhost=[<unknown>]
2023-09-11T16:00:03+03:00 edge-fw auth-test pam_unix(lm:auth): authentication failure; logname= uid=0 euid=0 tty= ruser= rhost= user=edge-selftest
2023-09-11T16:01:01+03:00 edge-fw syslog-ng[1482] Syslog connection established; fd='20', server='AF_INET(192.168.1.100:6514)', local='AF_INET(0.0.0.0:0)'
|