Installer et configurer un serveur Syslog-NG centralisé sur Debian
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/$(commandopenssl 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
- Merci aux développeurs de Syslog-NG.
- Merci à Papertrail pour Configuring remote syslog from Unix/Linux and BSD/OS X.
- Merci à l'Institute for Clinical and Translational Science pour Add TLS Functionality to your syslog-ng setup.