Назад | Перейти на главную страницу

Использование rsyslog с TLS без создания самоподписанного сертификата

Почти каждое руководство, которое я видел по использованию TLS с rsyslog, включает создание самоподписанного сертификата и его использование. Если ящики уже настроены с законным подписанным сертификатом, как вы настроить клиент и сервер, чтобы просто использовать его?

Нет большой разницы в настройке, если ваш сертификат «законный». Широко доверенный сертификат характеризуется тем, что его якорь доверия (также известный как корневой сертификат или сертификат CA) помещен в хранилище доверенных сертификатов ОС или браузера.

Предположим, у вас есть server.example.com.key и server.example.com.csr. Ваш ЦС отправит вам сертификат, server.example.com.crt, и все, что ведет к вашему сертификату, если цепочка доверия, например ca.crt, intermediate1.crt, intermediate2.crt или все сертификаты, объединенные в один как chain.crt. Некоторые идут для client.crt и client.key. client.crt имеет ту же цепочку доверия, что и сертификат сервера.

Большая разница в настройке самоподписанного сертификата заключается в том, что вам, возможно, придется включить промежуточные сертификаты в файл CA. Если промежуточные продукты присутствуют в хранилище доверенных сертификатов вашей системы, все, что вам нужно сделать, это указать туда rsyslog (/etc/ssl/certs/ca-certificates.crt в Ubuntu, YMMV)

Документы (Вот, Вот и Вот) красиво подытожим, как настроить TLS:

Конфигурация сервера делается так:

# make gtls driver the default
$DefaultNetstreamDriver gtls

# certificate files
$DefaultNetstreamDriverCAFile /path/to/chain.crt
$DefaultNetstreamDriverCertFile /path/to/server.example.com.crt
$DefaultNetstreamDriverKeyFile /path/to/server.example.com.key

$ModLoad imtcp # load TCP listener
$InputTCPServerStreamDriverAuthMode x509/name
$InputTCPServerStreamDriverPermittedPeer *.example.com
$InputTCPServerStreamDriverMode 1 # run driver in TLS-only mode
$InputTCPServerRun 10514 # start up listener at port 10514

Конфигурация клиента должна выглядеть так:

# certificate files
$DefaultNetstreamDriverCAFile /path/to/chain.crt
$DefaultNetstreamDriverCertFile /path/to/client.crt
$DefaultNetstreamDriverKeyFile /path/to/client.key

# set up the action
$DefaultNetstreamDriver gtls # use gtls netstream driver
$ActionSendStreamDriverMode 1 # require TLS for the connection
$ActionSendStreamDriverAuthMode x509/name
$ActionSendStreamDriverPermittedPeer server.example.com
*.* @@(o)server.example.com:10514 # send (all) messages

Если у вас есть собственные легальные сертификаты:

mycompany.ca

mycompany.crt

mycompany.key

На сервере:

Раскомментировать:

$ModLoad imtcp

Добавить:

$DefaultNetstreamDriver gtls
$DefaultNetstreamDriverCAFile /etc/ssl/certs/mycompany.ca
$DefaultNetstreamDriverCertFile /etc/ssl/certs/mycompany.crt
$DefaultNetstreamDriverKeyFile /etc/ssl/certs/mycompany.key
$InputTCPServerStreamDriverAuthMode anon
$InputTCPServerStreamDriverMode 1
$InputTCPServerRun 10514

На клиенте:

$DefaultNetstreamDriver gtls
$DefaultNetstreamDriverCAFile /etc/ssl/certs/mycompany.ca
$ActionSendStreamDriverAuthMode x509/name
$ActionSendStreamDriverPermittedPeer *.mycompany.com
$ActionSendStreamDriverMode 1
*.* @@rsyslog_server.mycompany.com:10514 (or ip)

Перезапустить системный журнал

Чтобы проверить результаты на сервере, запустите:

sudo tcpdump -i eth0 tcp port 10514 -X -s 0 -nn

Проверьте Selinux, Путь к сертификатам, Срок действия сертификатов и разрешения.