Перейти к содержанию

Отправка журнала с 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:
192.168.1.254   edge-fw
Назначим адрес из этой же подсети на интерфейс eth1 edge, а также зададим статическое сопоставление имени хоста IP-адресу сервера:
1
2
3
# 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
Проверяем доступность (с любой из сторон):
1
2
3
4
5
6
7
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. Для начала сохраним конфигурацию по умолчанию:

1
2
3
4
# cp /etc/ssl/openssl.{cnf,cnf.bkp}
Для секции CA_default отредактируем параметр dir:
[ CA_default ]
dir = ./
Создадим требуемые директории:
1
2
3
4
# 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:
1
2
3
4
5
$ 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
После этого сформируем архив:
1
2
3
4
5
6
7
# tar -cvzf edge-cert.tgz -C edge-cert . 
./
./CACert.crt
./CACert.crl
./EdgeCert.crt
./edgekey.pem
 root@debian:~#

Далее любым удобным для Вас способом доставьте соответствующий архив на edge. В примере осуществляется копирование посредством утилиты scp:

1
2
3
4
# 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 выполним импорт сертификатов командой операционного режима:
1
2
3
4
5
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. Затем скопируем ранее выпущенные сертификаты и ключи в соответствующие директории:
1
2
3
4
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:
1
2
3
4
5
6
$ 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, выполнив команду:
save

Проверка отправки журнала#

По завершении всех действий по настройке перезапустим сервис 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#

1
2
3
4
5
6
7
8
Со стороны 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)'