Я до сих пор безуспешно пытался заставить rsyslog передавать через TLS.
Кажется, что-то не так с моей конфигурацией, но я не могу это точно определить.
это мой файл конфигурации сервера:
# rsyslog v5 configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### MODULES ####
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
$ModLoad immark # provides --MARK-- message capability
$ModLoad imgssapi # provides GSSAPI syslog reception
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 10514
$InputTCPServerStreamDriverMode 1 # run driver in TLS-only mode
$InputTCPServerStreamDriverAuthMode anon # client is NOT authenticated
# make gtls driver the default
$DefaultNetstreamDriver gtls
# certificate files
$DefaultNetstreamDriverCAFile /etc/pki/tls/private/ca-cert.pem
$DefaultNetstreamDriverCertFile /etc/pki/tls/private/rslserver-cert.pem
$DefaultNetstreamDriverKeyFile /etc/pki/tls/private/rslserver-key.pem
# specify senders you permit to access
$AllowedSender TCP, 127.0.0.1, 10.111.1.0/24, *.evoltek.test.com
#add: define logfiles
## /var/log/secure
$template Auth_log,"/var/log/secure.d/%fromhost%/%$year%-%$month%.secure"
## /var/log/messages
$template Msg_log,"/var/log/secure.d/%fromhost%/%$year%-%$month%.messages"
## /var/log/maillog
$template Mail_log,"/var/log/secure.d/%fromhost%/%$year%-%$month%.maillog"
## /var/log/cron
$template Cron_log,"/var/log/secure.d/%fromhost%/%$year%-%$month%.cron"
## /var/log/spooler
$template Spool_log,"/var/log/secure.d/%fromhost%/%$year%-%$month%.spooler"
## /var/log/boot.log
$template Boot_log,"/var/log/secure.d/%fromhost%/%$year%-%$month%.boot.log"
## emergency messages "*.emerg"
$template Emerg_log,"/var/log/secure.d/%fromhost%/%$year%-%$month%.emerg"
#### GLOBAL DIRECTIVES ####
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
#### RULES ####
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none -?Msg_log
# The authpriv file has restricted access.
authpriv.* -?Auth_log
# Log all the mail messages in one place.
mail.* -?Mail_log
# Log cron stuff
cron.* -?Cron_log
# Everybody gets emergency messages
*.emerg -?Emerg_log
# Save news errors of level crit and higher in a special file.
uucp,news.crit -?Spool_log
# Save boot messages also to boot.log
local7.* -?Boot_log
А это мой клиентский файл conf:
# rsyslog v5 configuration file
# certificate files
$DefaultNetstreamDriverCAFile /etc/pki/tls/private/ca-cert.pem
$DefaultNetstreamDriverCertFile /etc/pki/tls/private/rslclient-cert.pem
$DefaultNetstreamDriverKeyFile /etc/pki/tls/private/rslclient-key.pem
$ModLoad imuxsock.so
$ModLoad imklog.so
$ModLoad imtcp
$DefaultNetstreamDriver gtls
$ActionSendStreamDriverAuthMode anon
$ActionSendStreamDriverMode 1
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg *
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
*.* @@10.111.1.151:10514
Я создал сертификаты, следуя этому руководству: http://kb.kristianreese.com/index.php?View=entry&EntryID=148
В моей тестовой среде нет полных доменных имен, поэтому я оставил пустыми поля DN и полные доменные имена, а также заполнил поле IP.
Rsyslog 5.8 с Centos 6.9 у меня работает
Вот видеоурок: https://youtu.be/eb9GlhD8XnY
Создайте сертификаты в CA (центре сертификации)
sudo mkidr /etc/ssl/rsyslog/
cd /etc/ssl/rsyslog/
Установите gnutls-utils
sudo yum install -y gnutls-utils
Сгенерируйте закрытый ключ CA (ЗАЩИТИТЕ ЭТО КЛЮЧ!)
sudo certtool --generate-privkey --outfile CA-key.pem
sudo chmod 400 CA-key.pem
Сгенерировать открытый ключ CA
sudo certtool --generate-self-signed --load-privkey CA-key.pem --outfile CA.pem
Common name: CA.EXAMPLE.COM
The certificate will expire in (days): 3650
Does the certificate belong to an authority? (Y/N): y
Will the certificate be used to sign other certificates? (Y/N): y
Will the certificate be used to sign CRLs? (y/N): y
Создайте закрытый ключ СЕРВЕРА в ЦС (центр сертификации)
sudo certtool --generate-privkey --outfile SERVER-key.pem --bits 2048
Создайте запрос сертификата для СЕРВЕРА
sudo certtool --generate-request --load-privkey SERVER-key.pem --outfile SERVER-request.pem
Common name: SERVER.EXAMPLE.COM
Подпишите ключ СЕРВЕРА и разрешите паре ключей доверять другим серверам
sudo certtool --generate-certificate --load-request SERVER-request.pem --outfile SERVER-cert.pem --load-ca-certificate CA.pem --load-ca-privkey CA-key.pem
The certificate will expire in (days): 1000
Is this a TLS web client certificate? (Y/N): y
Is this also a TLS web server certificate? (y/N): y
Enter a dnsName of the subject of the certificate: SERVER.EXAMPLE.COM
Создайте закрытый ключ КЛИЕНТА в ЦС (центр сертификации)
sudo certtool --generate-privkey --outfile CLIENT-key.pem --bits 2048
Создать запрос сертификата для КЛИЕНТА
sudo certtool --generate-request --load-privkey CLIENT-key.pem --outfile CLIENT-request.pem
Common name: CLIENT.EXAMPLE.ORG
Подпишите ключ КЛИЕНТА и разрешите паре ключей доверять другим серверам
sudo certtool --generate-certificate --load-request CLIENT-request.pem --outfile CLIENT-cert.pem --load-ca-certificate CA.pem --load-ca-privkey CA-key.pem
The certificate will expire in (days): 1000
Is this a TLS web client certificate? (Y/N): y
Is this also a TLS web server certificate? (y/N): y
Enter a dnsName of the subject of the certificate: CLIENT.EXAMPLE.ORG
Удалить ключи запроса
sudo rm *-request.pem
Закрытый / ключ scp SERVER и CA.pem на SERVER.EXAMPLE.COM Скопируйте сертификаты с помощью scp или зашифрованного USB
sudo -u root scp -i ~/.ssh/id_rsa CA.pem SERVER-* root@172.16.9.30:/etc/ssl/rsyslog/
Scp CLIENT private / key и CA.pem для CLIENT.EXAMPLE.COM
sudo -u root scp -i ~/.ssh/id_rsa CA.pem CLIENT-* root@172.16.9.40:/etc/ssl/rsyslog/
Установите драйвер gtls на СЕРВЕР и КЛИЕНТ
sudo yum install rsyslog-gnutls -y
Настроить СЕРВЕР
sudo vi /etc/rsyslog.d/rsyslog-tls.conf
# Add
# Listen for TCP
$ModLoad imtcp
# Set gtls driver
$DefaultNetstreamDriver gtls
# Certs
$DefaultNetstreamDriverCAFile /etc/ssl/rsyslog/CA.pem
$DefaultNetstreamDriverCertFile /etc/ssl/rsyslog/SERVER-cert.pem
$DefaultNetstreamDriverKeyFile /etc/ssl/rsyslog/SERVER-key.pem
# Auth mode
$InputTCPServerStreamDriverAuthMode x509/name
# Only allow EXAMPLE.COM domain
$InputTCPServerStreamDriverPermittedPeer *.EXAMPLE.COM
# Only use TLS
$InputTCPServerStreamDriverMode 1
# Listen on port 6514
# If you want to use other port configure selinux
$InputTCPServerRun 6514
Откройте порт 6514 на вашем брандмауэре
sudo vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6514 -j ACCEPT
sudo /etc/init.d/iptables reload
Перезапустите демон rsyslog
sudo /etc/init.d/rsyslog restart
Настроить КЛИЕНТА
sudo vi /etc/rsyslog.d/rsyslog-tls.conf
# Add
# Set gtls driver
$DefaultNetstreamDriver gtls
# Certs
$DefaultNetstreamDriverCAFile /etc/ssl/rsyslog/CA.pem
$DefaultNetstreamDriverCertFile /etc/ssl/rsyslog/CLIENT-cert.pem
$DefaultNetstreamDriverKeyFile /etc/ssl/rsyslog/CLIENT-key.pem
# Auth mode
$ActionSendStreamDriverAuthMode x509/name
# Only send log to SERVER.EXAMPLE.COM host
$ActionSendStreamDriverPermittedPeer SERVER.EXAMPLE.COM
# Only use TLS
$ActionSendStreamDriverMode 1
# Forward everithing to SERVER.EXAMPLE.COM
# If you use hostnames instead of IP configure DNS or /etc/hosts
*.* @@SERVER.EXAMPLE.COM:6514
Перезапустите демон rsyslog
sudo /etc/init.d/rsyslog restart
Для тестирования на СЕРВЕРЕ запустите tcpdump и отправьте логи от КЛИЕНТА.
sudo yum install tcpdump -y
sudo tcpdump -i eth0 tcp port 6514 -X -s 0 -nn
В CentOS / RedHat вы также должны включить порт SSL rsyslog в SElinux. Что-то вроде semanage port -a -t syslogd_port_t -p tcp 10514
должен сделать свое дело.
Вы можете проверить текущий порт системного журнала с помощью sudo semanage port -l| grep syslog
Также вы можете попробовать запустить rsyslog в режиме отладки, чтобы увидеть, что происходит: Остановите демон rsyslog, затем
export RSYSLOG_DEBUGLOG="/path/to/debuglog"
export RSYSLOG_DEBUG="Debug"
теперь запустите rsyslog с:
rsyslogd -dn
Чтобы проверить правильность используемого синтаксиса, используйте:
rsyslogd -N 1
Мне не удалось найти рабочую конфигурацию для rsyslog 5.8 (из репозиториев CentOS).
Вместо этого я установил официальные репозитории rsyslog и запустил rsyslog 7.6.0 за считанные минуты с этой конфигурацией.