2 votes

Rsyslog via TLS

J'ai essayé de faire en sorte que rsyslog transmette par TLS, sans succès jusqu'à présent.

Il semble y avoir un problème dans ma configuration, mais je n'arrive pas à le localiser.

Voici le fichier de configuration de mon serveur :

# 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

Et voici mon fichier de configuration client :

# 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

J'ai créé les certificats en suivant ce guide : http://kb.kristianreese.com/index.php?View=entry&EntryID=148

Mon environnement de test ne comporte pas de FQDN, j'ai donc laissé en blanc les champs DN et FQDN et j'ai rempli le champ IP.

5voto

Alejandro T Points 151

Rsyslog 5.8 avec Centos 6.9 fonctionne pour moi

Voici un tutoriel vidéo : https://youtu.be/eb9GlhD8XnY

Créer les certificats sur la CA (autorité de certification)

sudo mkidr /etc/ssl/rsyslog/   
cd /etc/ssl/rsyslog/

Installer gnutls-utils

sudo yum install -y gnutls-utils

Générer la clé privée de l'AC (PROTÉGER CETTE CLÉ !)

sudo certtool --generate-privkey --outfile CA-key.pem
sudo chmod 400 CA-key.pem

Générer la clé publique de l'AC

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

Créer la clé privée du SERVEUR sur l'AC (autorité de certification)

sudo certtool --generate-privkey --outfile SERVER-key.pem --bits 2048

Créer la demande de certificat pour SERVER

sudo certtool --generate-request --load-privkey SERVER-key.pem --outfile SERVER-request.pem 

Common name: SERVER.EXAMPLE.COM

Signer la clé du SERVEUR et permettre à la paire de clés d'être reconnue par les autres serveurs.

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

Créer la clé privée du CLIENT sur le CA (autorité de certification)

sudo certtool --generate-privkey --outfile CLIENT-key.pem --bits 2048

Créer une demande de certificat pour le CLIENT

sudo certtool --generate-request --load-privkey CLIENT-key.pem --outfile CLIENT-request.pem 

Common name: CLIENT.EXAMPLE.ORG

Signer la clé du CLIENT et permettre à la paire de clés d'être reconnue par les autres serveurs.

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

Touches de demande de suppression

sudo rm *-request.pem

Scp la clé privée de SERVER et le CA.pem vers SERVER.EXAMPLE.COM Copiez les certificats avec scp ou une clé USB cryptée.

sudo -u root scp -i ~/.ssh/id_rsa CA.pem SERVER-* root@172.16.9.30:/etc/ssl/rsyslog/

Scp CLIENT private/key et le CA.pem vers CLIENT.EXAMPLE.COM

sudo -u root scp -i ~/.ssh/id_rsa CA.pem CLIENT-* root@172.16.9.40:/etc/ssl/rsyslog/

Installer le pilote gtls sur SERVER et CLIENT

sudo yum install rsyslog-gnutls -y

Configurer le SERVEUR

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

Ouvrez le port 6514 sur votre pare-feu

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

Redémarrer le démon rsyslog

sudo /etc/init.d/rsyslog restart

Configurer le CLIENT

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

Redémarrer le démon rsyslog

sudo /etc/init.d/rsyslog restart

Pour tester sur le SERVEUR, lancez tcpdump et envoyez les logs depuis le CLIENT.

sudo yum install tcpdump -y
sudo tcpdump -i eth0 tcp port 6514 -X -s 0 -nn

3voto

Dash McCallen Points 1

Dans CentOS/RedHat, vous devez également activer le port SSL rsyslog dans SElinux. Quelque chose comme semanage port -a -t syslogd_port_t -p tcp 10514 devrait faire l'affaire.

Vous pouvez vérifier votre port syslog actuel avec sudo semanage port -l| grep syslog

Vous pouvez également essayer d'exécuter rsyslog en mode débogage, pour voir ce qui se passe : Arrêter le démon rsyslog, puis

export RSYSLOG_DEBUGLOG="/path/to/debuglog"

export RSYSLOG_DEBUG="Debug"

maintenant démarrer rsyslog avec :

rsyslogd -dn

Pour vérifier si la syntaxe utilisée est valide, utilisez :

rsyslogd -N 1

1voto

Austin T French Points 10253

Je n'ai pas trouvé de configuration fonctionnelle pour rsyslog 5.8 (à partir des dépôts CentOS).

J'ai installé à la place les dépôts officiels de rsyslog et j'ai pu faire fonctionner rsyslog 7.6.0 en quelques minutes avec cette configuration.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X