====== Centraliser les logs de plusieurs machines sur un syslog central ======
{{tag> debian syslog}}
Nous avons deux machines A (l'entrepot) et B (le client).
B souhaite envoyer ses logs sur A. Voici la configuration:
===== Machine A: l'entrepot =====
A est un serveur sous Debian Lenny sur lequel nous allons dire à syslogd de mettre un port en écoute.
Cela se fait dans **/etc/default/syslogd/**:
10 #
11 # For remote UDP logging use SYSLOGD="-r"
12 #
13 SYSLOGD="-r"
On relance le demo avec le script dans init.d
# /etc/init.d/sysklogd restart
Et on voit ainsi un port UDP en écoute:
# netstat -taupen|grep syslog
udp 0 0 0.0.0.0:514 0.0.0.0:* 0 3847879 2172/syslogd
Ne pas oublier d'ouvrir le firewall pour accepter les paquets entrant vers le port 514 (depuis les sources identifiées évidemment).
===== Machine B: le client =====
Sur le client, on va copier toutes les entrées syslog du fichier **/etc/syslog.conf** et remplacer le fichier de destination par l'adresse de la machine A:
Ca donne, sur Debian Etch, un fichier qui a cette tête là:
############## REMOTE SYSLOG ############################
# copy everything from the above to machineA.reseau.com
#
# First some standard logfiles. Log by facility.
#
auth,authpriv.* @machineA.reseau.com
*.*;auth,authpriv.none -@machineA.reseau.com
daemon.* -@machineA.reseau.com
kern.* -@machineA.reseau.com
lpr.* -@machineA.reseau.com
mail.* -@machineA.reseau.com
user.* -@machineA.reseau.com
uucp.* @machineA.reseau.com
#
# Logging for the mail system. Split it up so that
# it is easy to write scripts to parse these files.
#
mail.info -@machineA.reseau.com
mail.warn -@machineA.reseau.com
mail.err @machineA.reseau.com
# Logging for INN news system
#
news.crit @machineA.reseau.com
news.err @machineA.reseau.com
news.notice -@machineA.reseau.com
#
# Some `catch-all' logfiles.
#
*.=debug;\
auth,authpriv.none;\
news.none;mail.none -@machineA.reseau.com
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -@machineA.reseau.com
De même ici, on ouvre le firewall pour sortir vers le port UDP/514 de machine A.
Reste à relancer syslogd:
# /etc/init.d/sysklogd restart
===== Test de bon fonctionnement =====
De retour **sur la machine A**, utiliser tcpdump pour vérifier que B envoi bien ses logs.
Par exemple, quand je me log en SSH sur la machine B, la machine A reçoit:
# tcpdump -Svni eth0 -s 1500 udp and port 514
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 1500 bytes
11:11:02.039673 IP (tos 0x0, ttl 55, id 0, offset 0, flags [DF], proto UDP (17), length 109) 11.22.33.44.514 > 10.12.88.55.514: SYSLOG, length: 81
Facility auth (4), Severity info(6)
Msg: sshd[27827]: Accepted password for admin from 10.12.88.55 port 35439 ssh2\012
11:11:02.043547 IP (tos 0x0, ttl 55, id 0, offset 0, flags [DF], proto UDP (17), length 97) 11.22.33.44.514 > 10.12.88.55.514: SYSLOG, length: 69
Facility auth (4), Severity info (6)
Msg: sshd[27831]: (pam_unix) session opened for user toto by (uid=0)\012