web-dev-qa-db-fra.com

Comment envoyer un message TLS syslog via la commande logger

Je travaille sur Ubuntu 16.0.4. Existe-t-il un moyen d'envoyer un message TLS syslog à l'aide d'une commande logger?

Merci d'avance pour toute suggestion

1

Non.

logger peut uniquement envoyer des données en clair à un socket UDP, un socket TCP ou un socket de domaine UNIX local (comme /dev/log, qui est la valeur par défaut si logger n'est pas instruit autrement).

Mais.

Je suppose que vous avez configuré rsyslog sur un serveur distant (par exemple syslog-server.mydomain) pour écouter sur TCP port 6514 car il s'agit du port par défaut lorsque vous utilisez Syslog sur TLS . Je suppose en outre que rsyslog sur ce serveur distant est configuré de la manière suivante:

# Certificate configuration for encrypted transmission:
global(
    defaultNetstreamDriver         = "gtls"
    defaultNetstreamDriverCAFile   = "/path/to/root-ca.crt"
    defaultNetstreamDriverCertFile = "/path/to/certificates/server-certificate.crt"
    defaultNetstreamDriverKeyFile  = "/path/to/keys/server-private.key"
)

# Load input module for encrypted TCP to receive messages from the clients:
module(
    load                  = "imtcp" 
    StreamDriver.Name     = "gtls" 
    StreamDriver.Mode     = "1" 
    StreamDriver.AuthMode = "anon"
)

# Ruleset to write externally received messages to a certain file:
ruleset(name="from_remote") {
    action(type="omfile" File="/var/log/messages-from-remote.log")
}

# Bind above ruleset to the TCP listener on port 6514:
input(type="imtcp" port="6514" ruleset="from_remote")

Généralement (si le serveur distant n’était pas configuré pour utiliser Syslog sur TLS ), vous pouvez émettre

logger --tcp --server syslog-server.mydomain --port 6514 -p local1.info "Hello World, $RANDOM"

mais en raison de l'incapacité de logger à gérer TLS, cela ne fonctionne pas. Au lieu de cela, vous devez préparer manuellement un message syslog et l'envoyer via gnutls-cli. Copiez le fichier d'autorité de certification du serveur sur l'ordinateur local, puis lancez:

echo "<142>$HOSTNAME Hello World, $RANDOM" | \
    gnutls-cli syslog-server.mydomain --port=6514 --x509cafile=/path/to/root-ca.crt

Le <142> est la valeur codée pour local1.info, $HOSTNAME est l'hôte source et le texte Hello World, $RANDOM est le message de consignation actuel. gnutls-cli lit cette chaîne à partir de son stdin et l'envoie au serveur et au port donnés à l'aide de l'autorité de certification donnée.

Le message doit apparaître sur le serveur distant dans le fichier /var/log/messages-from-remote.log.

L'outil gnutls-cli fait partie du paquetage gnutls-bin qui peut être installé via Sudo apt install gnutls-bin.


Bien sûr, vous pouvez également configurer votre local rsyslog pour transférer certains messages via TLS sur le serveur distant, puis utilisez logger comme d'habitude, c'est-à-dire que logger envoie les messages au démon local rsyslog (qui est par défaut de toute façon), puis laissez votre rsyslog local transmettre le message chiffré.

1
PerlDuck