Configuration de l'interconnexion Syslog

Lisez ce qui suit pour découvrir comment configurer l'interconnexion Syslog sur l'application LockSelf.

Cette option ne concerne que les configurations en Cloud Privé et On Premises.

Seul le compte Administrateur peut effectuer cette action.

_______________________________________________________________________________________

Pré-requis pour l'interconnexion Syslog

Afin de pouvoir réaliser l'interconnexion Syslog, vous devrez préparer les prérequis suivants : 

  • L'IP du serveur RSyslog
  • Le port du serveur RSyslog
  • Les certificats afin d'activer la TLS entre LockSelf et votre serveur RSyslog
    • Le certificat au format CRT
    • La clé privée relative au certificat
    • La chaine de certification ( certificats intermédiaire + CA Root )

Le mode d'authentification se fera via certificat et fingerprint. Il faudra également nous communiquer le fingerprint du serveur.

Configurer le serveur RSyslog

Package relp pour Rsyslog

L'installation du package se fait comme suit en fonction de votre distribution et de votre gestionnaire de package:

# CentOS & RockyLinux : https://centos.pkgs.org/7/centos-x86_64/rsyslog-relp-8.24.0-55.el7.x86_64.rpm.html
c[_] > sudo yum install rsyslog-relp

# Ubuntu : https://packages.ubuntu.com/bionic/admin/rsyslog-relp
c[_] > sudo apt-get install rsyslog-relp

# Debian : https://packages.debian.org/stretch/rsyslog-relp
c[_] > sudo apt install rsyslog-relp

# Alpine : https://pkgs.alpinelinux.org/package/edge/main/x86/rsyslog-relp
c[_] > sudo apk add rsyslog-relp

Fichier de configuration du serveur:

La configuration qui suit est à adapter en fonction de l'organisation de votre configuration du serveur RSyslog. Nous conseillons toutefois d'ajouter cette configuration dans un nouveau fichier du dossier:

/etc/rsyslog.d/ en le nommant par exemple 1-lockself.conf.

# Load the RELP input module
module(load="imrelp" ruleset="<RULESET_NAME>")

# RELP input module configuration
input(type="imrelp" port="<PORT>"
tls="on"
tls.caCert="<INTERMEDIATE_AND_CA_CHAIN_PATH>"
tls.myCert="<CERTIFICATE_PATH>"
tls.myPrivKey="<PRIVATE_KEY_PATH>"
tls.authMode="<AUTH_MODE>"
tls.permittedpeer=["<PEER_IDENTIFICATOR_1>", "<PEER_IDENTIFICATOR_2>", ...]
)

# Ruleset exemple (output logs get from the RELP input module to '/var/log/relp_log' file)
ruleset (name="<RULESET_NAME>") { action(type="omfile" file="/var/log/relp_log") }
  • <RULESET_NAME> : Le nom de la 'ruleset' qui interprétera ce qui est reçu du module d'input RELP. Vous avez la possibilité d'exploiter autrement ce retour.
  • <PORT> : Le port sur lequel écoutera le module d'input RELP.
  • <INTERMEDIATE_AND_CA_CHAIN_PATH> : Le chemin vers le fichier contenant les certificats intermédiaires et le CA root.
  • <CERTIFICATE_PATH> : Le chemin vers le fichier contenant le certificat.
  • <PRIVATE_KEY_PATH> : Le chemin vers le fichier contenant la clé privée.
  • <AUTH_MODE> : Le mode d'authentification, peut être fingerprint ou name (documentation RSyslog)
  • <PEER_IDENTIFICATOR> : La valeur du champs du certificat qui sera utilisé pour autorisé les connexions si elle est valide, en fonction de votre <AUTH_MODE>
    • tls.authMode="fingerprint" : Le fingerprint SHA1 du certificat, sous la forme: "SHA1:<FINGERPRINT>" .
      Vous pouvez l'obtenir de la manière suivante avec Openssl:
      c[_] > openssl x509 -noout -fingerprint -sha1 -inform pem -in <certificate-file.crt>
    • tls.authMode="name" : Le DNS du serveur RSyslog, sous la forme: "mon.dns.com" ou "*.dns.com". Le DNS doit faire parti de DNS sécurisé par le certificats en tant que DNS principal ou dans les AltNames.

Vérifier que la syntaxe de la configuration est bonne

Pour vous assurer que la configuration RSyslog est bonne vous pouvez utiliser la commande suivante:

c[_] > rsyslogd -N1

# OR

c[_] > rsyslogd -c <path/to/configuration/file>

Appliquer la nouvelle configuration

Pour appliquer la nouvelle configuration vous pouvez soit relancer le service:

# CentOS & RockyLinux :
c[_] > sudo systemctl restart rsyslog.service

# Ubuntu : https://packages.ubuntu.com/bionic/admin/rsyslog-relp
c[_] > sudo systemctl restart rsyslog.service

# Debian : https://packages.debian.org/stretch/rsyslog-relp
c[_] > sudo systemctl restart rsyslog.service

# Alpine : https://pkgs.alpinelinux.org/package/edge/main/x86/rsyslog-relp
c[_] > sudo rc-service rsyslog restart

# OR
c[_] > sudo /etc/init.d/rsyslog restart

Troubleshooting

Dans le cas où la configuration ne semble pas être active, nous vous invitons à regarder les logs du service RSylog:

c[_] > journalctl -u rsyslog.service

Ou de lancer manuellement le serveur avec du debug pour avoir l'ensemble des logs:

c[_] > export RSYSLOG_DEBUG=debug; rsyslogd -d 

# OR

c[_] export RSYSLOG_DEBUG=debug; rsyslogd -d | grep <PORT>

Vérifier également les ports utiliser avec nstat et les règles de votre firewall avec ufw par exemple.

Organisation des logs

Par date, jour, heure ou autre

À la réception des logs sur le serveur RSyslog, vous voudrez peut-être organiser les logs par mois, jours, heures ou autres. Avec RSyslog vous avez la possibilité de rendre le nom du fichier de log dynamique grâce à des templates. 

# Templates
template (name="<TEMPLATE_NAME>" type="string" string="<TEMPLATED_DESTINATION_FILE_NAME>")

# Load the RELP input module
module(load="imrelp" ruleset="<RULESET_NAME>")

# RELP input module configuration
input(type="imrelp" port="<PORT>"
tls="on"
tls.caCert="<INTERMEDIATE_AND_CA_CHAIN_PATH>"
tls.myCert="<CERTIFICATE_PATH>"
tls.myPrivKey="<PRIVATE_KEY_PATH>"
tls.authMode="<AUTH_MODE>"
tls.permittedpeer=["<PEER_IDENTIFICATOR_1>", "<PEER_IDENTIFICATOR_2>", ...]
)

# Ruleset exemple (output logs get from the RELP input module to '<TEMPLATED_DESTINATION_FILE_NAME>' file)
ruleset (name="<RULESET_NAME>") { action(type="omfile" dynaFile="<TEMPLATE_NAME>") }
  • <TEMPLATE_NAME> : nom de la template, il sera appelé par la suite par notre module d'output.
  • <TEMPLATED_DESTINATION_FILE_NAME> : une string construit à partir de caractères et de timereported. Vous pouvez retrouver l'ensemble des variables extractable de timereported ici (de date-unixtimestamp à date-tzoffsdirection, ici timestamp est un alias de timereported). Par exemple <TEMPLATED_DESTINATION_FILE_NAME> peut être :
    /var/log/lockself/%timereported:::date-year%-%timereported:::date-month%-%timereported:::date-day%.log

    qui génèrera par exemple: /var/log/lockself/2023-04-06.log

Configurer le client RSyslog (On-Premises seulement)

Fichier de log LockSelf

Rajouter un point de montage dans le conteneur lockself-api-3

Peu importe la méthode de lancement choisie (docker run, docker compose, docker swarm), vous devrez rajouter le point de montage suivant : 

- <LOG_PATH_ON_HOST>:/usr/local/var/log/lockself/application.log

Le fichier "<LOG_PATH_ON_HOST>" peut être placé à n'importe quel endroit sur le host. Vous devrez donc modifier "<LOG_PATH_ON_HOST>" par le chemin d'accès choisit sur le host.

Activer l'interconnexion

Dans le fichier "env", vous devrez rajouter le paramètre : 

logInFile=1

Une fois ces deux étapes faites, relancer le conteneur lockself-api-3

Installer le package RELP pour Rsyslog

L'installation du package se fait comme suit en fonction de votre distribution et de votre gestionnaire de package:

# CentOS & RockyLinux : https://centos.pkgs.org/7/centos-x86_64/rsyslog-relp-8.24.0-55.el7.x86_64.rpm.html
c[_] > sudo yum install rsyslog-relp

# Ubuntu : https://packages.ubuntu.com/bionic/admin/rsyslog-relp
c[_] > sudo apt-get install rsyslog-relp

# Debian : https://packages.debian.org/stretch/rsyslog-relp
c[_] > sudo apt install rsyslog-relp

# Alpine : https://pkgs.alpinelinux.org/package/edge/main/x86/rsyslog-relp
c[_] > sudo apk add rsyslog-relp

Fichier de configuration du client RSyslog

La configuration qui suit est à adapter en fonction de l'organisation de votre configuration du client RSyslog. Nous conseillons toutefois d'ajouter cette configuration dans un nouveau fichier du dossier:

/etc/rsyslog.d/ en le nommant par exemple 1-lockself.conf.

# Load the file input module
module(load="imfile")

# Load the RELP output module
module(load="omrelp")

# Ruleset to output logs to RSyslog server
ruleset(name="lockselfSendLogsToServer") {
action(type="omrelp" target="<TARGET_IP>" port="<TARGET_PORT>"
tls="on"
tls.caCert="<INTERMEDIATE_AND_CA_CHAIN_PATH>"
tls.myCert="<CERTIFICATE_PATH>"
tls.myPrivKey="<PRIVATE_KEY_PATH>"
tls.authMode="<AUTH_MODE>"
tls.permittedpeer=["<PEER_IDENTIFICATOR_1>", "<PEER_IDENTIFICATOR_2>", ...] )
}

input(type="imfile"
File="<LOG_PATH_ON_HOST>"
Tag="lockself/application.log"
Ruleset="lockselfSendLogsToServer")
  • <TARGET_IP> : l'IP du serveur RSyslog.
  • <TARGET_PORT> : le port du serveur RSyslog
  • <INTERMEDIATE_AND_CA_CHAIN_PATH> : le chemin vers le fichier contenant les certificats intermédiaire et le CA root.
  • <CERTIFICATE_PATH> : le chemin vers le fichier contenant le certificat.
  • <PRIVATE_KEY_PATH> : le chemin vers le fichier contenant la clé privée.
  • <AUTH_MODE> : Le mode d'authentification, peut être fingerprint ou name (documentation rsyslog)
  • <PEER_IDENTIFICATOR> : La valeur du champs du certificat qui sera utilisé pour autorisé les connexions si elle est valide, en fonction de votre <AUTH_MODE>
    • tls.authMode="fingerprint" : Le fingerprint SHA1 du certificat, sous la forme: "SHA1:<FINGERPRINT>" .
      Vous pouvez l'obtenir de la manière suivante avec Openssl:
      c[_] > openssl x509 -noout -fingerprint -sha1 -inform pem -in <certificate-file.crt>
    • tls.authMode="name" : Le DNS du serveur rsyslog, sous la forme: "mon.dns.com" ou "*.dns.com". Le DNS doit faire parti de DNS sécurisé par le certificats en tant que DNS principal ou dans les AltNames.

Vérifier que la syntaxe de la configuration est bonne

Pour vous assurer que la configuration RSyslog est bonne, vous pouvez utiliser la commande suivante:

c[_] > rsyslogd -N1

# OR

c[_] > rsyslogd -c <path/to/configuration/file>

Appliquer la nouvelle configuration

Pour appliquer la nouvelle configuration vous pouvez soit relancer le service:

# CentOS & RockyLinux :
c[_] > sudo systemctl restart rsyslog.service

# Ubuntu : https://packages.ubuntu.com/bionic/admin/rsyslog-relp
c[_] > sudo systemctl restart rsyslog.service

# Debian : https://packages.debian.org/stretch/rsyslog-relp
c[_] > sudo systemctl restart rsyslog.service

# Alpine : https://pkgs.alpinelinux.org/package/edge/main/x86/rsyslog-relp
c[_] > sudo rc-service rsyslog restart

# OR
c[_] > sudo /etc/init.d/rsyslog restart

Troubleshooting

Dans le cas où la configuration ne semble pas être active, nous vous invitons à regarder les logs du service RSylog:

c[_] > journalctl -u rsyslog.service

Ou de lancer manuellement le serveur avec du debug pour avoir l'ensemble des logs:

c[_] > export RSYSLOG_DEBUG=debug; rsyslogd -d

Mise à jour