Dupliquer des paquets Syslog avec nftables sous Linux
- Mise à jour le 20 sept. 2026
J’ai récemment eu besoin d’envoyer les paquets Syslog d’un pare-feu vers deux serveurs différents, principalement pour recueillir des informations sur les blocages effectués par les règles de filtrage. Le problème : le pare-feu ne permettait tout simplement pas de le faire. Sans citer de nom, j’aurais pas mal de reproches à faire à Cisco Firepower… Dans la configuration utilisée, un seul serveur Syslog pouvait être défini.
Il ne restait donc plus beaucoup d’options, à part demander de l’aide à notre ami Linux. Comme nous allons le voir, j’ai ajouté au réseau un serveur Debian qui sert de relais Syslog. Une fois le pare-feu configuré pour envoyer son trafic Syslog vers ce serveur Debian, nftables dupliquera les paquets reçus et transmettra les copies à deux serveurs Syslog différents.
Je me suis largement inspiré de la solution publiée par A.B sur superuser.com. Merci à lui !
Voyons maintenant comment procéder !
Schéma réseau
Comme le montre ce schéma, le pare-feu envoie ses messages Syslog au serveur Debian 10.0.0.200. nftables nous permettra de dupliquer ces paquets et, si nécessaire, de modifier leurs en-têtes IP et UDP. Nous commencerons par dupliquer les paquets et les envoyer à 10.0.0.202 sans modifier l’adresse IP source ni le port UDP de destination. Nous enverrons également une autre copie à l’hôte 10.0.0.201, mais en modifiant cette fois l’adresse IP source et en définissant le port UDP de destination sur 9003, pour explorer cette possibilité et voir comment procéder 😉.
Configurer les règles nftables
Nous allons modifier le fichier /etc/nftables.conf et ajouter des règles au niveau du hook prerouting. Les paquets Syslog entrants seront interceptés avant la décision de routage, dupliqués avec l’instruction dup, puis envoyés à nos deux serveurs de destination.
#!/usr/bin/nft -f
flush ruleset
# Définition des variables
## Relais Syslog
define DST0 = 10.0.0.200
## Serveurs Syslog de destination
define DST1 = 10.0.0.202
define DST2 = 10.0.0.201
## Interface réseau
define INT = "ens18"
# Table de filtrage : tout est autorisé par défaut
table inet filter {
chain input {
type filter hook input priority filter;
}
chain forward {
type filter hook forward priority filter;
}
chain output {
type filter hook output priority filter;
}
}
# Table utilisée pour dupliquer les paquets Syslog
table ip multiply {
chain c {
# Traite les paquets entrants avant la décision de routage
type filter hook prerouting priority -300; policy accept;
# Les paquets Syslog envoyés au relais (10.0.0.200:514)
# sont dirigés vers la chaîne cmultiply
iifname $INT ip daddr $DST0 udp dport 514 counter goto cmultiply
}
chain cmultiply {
# Duplique et modifie les paquets Syslog
jump cdnatdup
# Supprime le paquet original après la création des copies
counter drop
}
chain cdnatdup {
# Première copie : 10.0.0.202:514
# Modifie uniquement l’adresse IP de destination.
# L’adresse IP source et le port UDP de destination d’origine sont conservés.
ip daddr set $DST1 dup to $DST1 device $INT counter
# Deuxième copie : 10.0.0.201:9003
# Remplace l’adresse IP source 10.0.0.1 par 10.0.0.12.
ip saddr 10.0.0.1 ip saddr set 10.0.0.12 counter
# Modifie l’adresse IP et le port UDP de destination,
# puis duplique le paquet obtenu.
ip daddr set $DST2 udp dport set 9003 dup to $DST2 device $INT counter
}
}
- Appliquez ensuite la configuration :
root@10.0.0.200:~# nft -f /etc/nftables.conf
Vérification
Maintenant que nos règles nftables sont appliquées, vérifions que tout fonctionne comme prévu.
- Depuis le relais (
10.0.0.200), commencez par vérifier que les règles sont correctement chargées et surveillez les compteurs de paquets. Appuyez sur Ctrl+C pour arrêter la commande :
root@10.0.0.200:~# watch nft -a list ruleset
- Installez
tcpdumpsur les hôtes10.0.0.201et10.0.0.202:
root@10.0.0.201:~# apt update && apt install tcpdump -y
- Exécutez
tcpdumpsur chaque hôte en utilisant le port UDP correspondant :
root@10.0.0.201:~# tcpdump -nA -i ens18 udp port 9003
root@10.0.0.202:~# tcpdump -nA -i ens18 udp port 514
- Si le pare-feu n’est pas encore configuré, vous pouvez simuler l’envoi d’un message Syslog avec la commande
logger:
root@host:~# logger -n 10.0.0.200 -P 514 -d "std.rocks"
- Les messages Syslog dupliqués doivent apparaître dans la sortie de
tcpdump:
root@10.0.0.201:~# tcpdump -nA -i ens18 udp port 9003
listening on ens18, link-type EN10MB (Ethernet), snapshot length 262144 bytes
20:56:00.089029 IP 10.0.0.12.62522 > 10.0.0.201.9003: SYSLOG user.notice, length: 125
E.....@.=......d.....:......<13>1 2026-09-20T20:56:00.086533+02:00 std.rocks john - - [timeQuality tzKnown="1" isSynced="1" syncAccuracy="968000"] std.rocks
- Sur
10.0.0.202, le paquet conserve son adresse IP source et son port UDP de destination d’origine :
IP 10.0.0.1.62522 > 10.0.0.202.514: SYSLOG user.notice, length: 125
...
- Sur
10.0.0.201, l’adresse IP source a été remplacée par10.0.0.12et le port UDP de destination par9003:
IP 10.0.0.12.62522 > 10.0.0.201.9003: SYSLOG user.notice, length: 125
...