Vous êtes ici : Accueil / Debian GNU/Linux / Serveurs / Syslog / Installer et configurer un serveur Syslog-NG centralisé sur Debian

Installer et configurer un serveur Syslog-NG centralisé sur Debian

Par Pierre-Yves Landuré Dernière modification 11/04/2013 03:52

Syslog-NG est un logiciel de journalisation des événements systèmes. Il est réputé pour sa grande flexibilité. Parmi les possibilités offertes se trouvent la journalisation des journaux sur un serveur centralisé et le stockage des événements dans une base de données. Ce guide présente la mise en place d'un serveur de journalisation Syslog-NG centralisé pour gérer l'enregistrement des journaux de plusieurs hôtes clients.

Ce guide est testé sur:

  • Debian 6.0 Squeeze

Prérequis

Ce guide nécessite un serveur Syslog-NG disposant d'une configuration modulaire, telle que décrite par Créer une configuration modulaire pour Syslog-NG.

Ce guide recommande la création d'un certificat SSL / TLS auto-signé pour chiffrer les connections au serveur Syslog-NG

Paramètres

Renseignez le nom de domaine du certificat SSL à utiliser:

DOMAIN="$(command hostname --fqdn)"

Obtenez les noms de fichier des clefs du certificats:

KEY_FILE="/etc/ssl/private/${DOMAIN}.key"
CERT_FILE="/etc/ssl/certificates/${DOMAIN}.crt"

Installation

Configuration du serveur Syslog-NG

Détectez l'adresse IP du serveur:

NET_DEV="eth0"
NET_IP=$(command ifconfig "${NET_DEV}" \
| command grep "inet " \
| command sed -e 's/^.*inet [^:]*:\([^ ]*\) .*$/\1/')
echo "${NET_IP}"

Configurez l'écoute sur le port TCP 540, chiffré si possible:

if [ -f "${KEY_FILE}" -a -f "${CERT_FILE}" ]; then
echo "# Allow for clients to send theirs logs over TCP.
source s_net { tcp(ip(${NET_IP}) port(540) max_connections(50)
tls( key_file("${KEY_FILE}")
cert_file("${CERT_FILE}")
peer_verify(optional-untrusted))); };" \
> '/etc/syslog-ng/conf.d/102-sources_net.conf'
else
echo "# Allow for clients to send theirs logs over TCP.
source s_net { tcp(ip(${NET_IP}) port(540) max_connections(50)); };" \
> '/etc/syslog-ng/conf.d/102-sources_net.conf'
fi

Remarque: Si vous avez plus de 50 hôtes clients, augmentez la valeur de l'option max_connections.

Configurez l'enregistrement des messages en provenance de la source s_net dans un sous-dossier de "/var/log/by-host":

for FILE in "103-destinations-by_host.conf" "105-logs-s_net.conf" "106-logs-s_net-by_host.conf" "107-logs-s_src-by_host.conf"; do
command wget "https://raw.github.com/biapy/howto.biapy.com/master/syslog-ng/conf.d/${FILE}" \
--quiet --no-check-certificate --output-document="/etc/syslog-ng/conf.d/${FILE}"
done

Configurez la rotation des journaux présents dans "/var/log/by-host":

command wget "https://raw.github.com/biapy/howto.biapy.com/master/syslog-ng/syslog-ng-by_host.logrotate-d" \
--quiet --no-check-certificate --output-document="/etc/logrotate.d/000-syslog-ng-by_host"

Si nécessaire, préparez la clef publique du certificat SSL utilisé pour gérer l'identification des clients:

if [ -f "${CERT_FILE}" ]; then
command mkdir --parent '/etc/syslog-ng/cert.d'
command cp "${CERT_FILE}" "/etc/syslog-ng/cert.d/$(command basename "${CERT_FILE}")"
command ln -s "$(command basename "${CERT_FILE}")" \
"/etc/syslog-ng/cert.d/$(command openssl x509 -noout -hash -in "${CERT_FILE}").0"
fi

Configurez l'enregistrement des messages dans le backend MySQL si nécessaire:

if [ -e '/etc/syslog-ng/conf.d/mysql-backend.conf' ]; then
echo "# Log net messages to MySQL:
log { source(s_net); destination(d_mysql); };" > '/etc/syslog-ng/conf.d/mysql-backend-s_net.conf'
fi

Rechargez la configuration:

/etc/init.d/syslog-ng restart

Ajout d'un hôte client

Renseignez l'adresse IP du serveur Syslog-NG:

SYSLOG_IP="xx.xx.xx.xx"

Si nécessaire, obtenez le certificat SSL du serveur:

command scp -pr root@${SYSLOG_IP}:"/etc/syslog-ng/cert.d" "/etc/syslog-ng"

Générez la configuration:

TLS_CONFIG=""
if [ -d '/etc/syslog-ng/cert.d' ]; then
TLS_CONFIG='tls(ca_dir("/etc/syslog-ng/cert.d"))'
fi
CONFIG="# Destination: ${SYSLOG_IP}
destination d_net { tcp(\"${SYSLOG_IP}\" port(540) ${TLS_CONFIG} log_fifo_size(1000)); };
# Send s_src to d_net.
log { source(s_src); destination(d_net); };"

Configurez l'envoi des informations au serveur Syslog-NG:

if [ -d '/etc/syslog-ng/conf.d' ]; then
echo "${CONFIG}" > '/etc/syslog-ng/conf.d/d_net.conf'
else
echo "${CONFIG}" >> '/etc/syslog-ng/syslog-ng.conf'
fi

Rechargez la configuration:

/etc/init.d/syslog-ng restart; command tail -f '/var/log/syslog'

Remerciements