iptables est un logiciel open source inclus dans la plus partie des distributions Linux pour configurer le pare-feu Linux (netfilter).
Vous créer des règles de pare-feu pour protéger votre VPS, serveur dédié, cloud ou bare metal.
Pour mieux surveiller l’activité réseau et détecter les instruisons, il convient de mettre en place les logs iptables.
Notamment, il est possible d’enregistrer dans les journaux Linux tous les paquets bloqués via syslog.
Enfin les journaux sont aussi utiles pour ajuster ses règles iptables.
Dans ce tutoriel, je vous guide pour configurer les LOG sur iptables avec les explications et exemples.

Table des matières
Comment configurer les LOG sur iptables
iptables -N LOG
iptables -A INPUT/OUTPUT -j LOG
iptables -A LOG -m limit --limit 2/min -j LOG --log-prefix "IPTables: " --log-level 4
iptables -A LOG -j DROP
Dans l’exemple ci-dessus, il fait ce qui suit :
- iptables -N LOG : Créer une nouvelle chaîne appelée LOG
- iptables -A INPUT -j LOG : Tous les paquets entrants restants sauteront vers la chaîne LOG
- ligne#3 : Enregistrer les paquets entrants dans syslog (/var/log/messages). Cette ligne est expliquée en détail ci-dessous
- iptables -A LOG -j DROP : Enfin, abandonne tous les paquets qui arrivent sur la chaîne LOGGING. C’est-à-dire que maintenant, il abandonne vraiment les paquets entrants
Dans la ligne#3 ci-dessus, il a les options suivantes pour enregistrer les paquets abandonnés :
- -m limit : Ceci utilise le module de correspondance des limites. En utilisant ce module, vous pouvez limiter la journalisation en utilisant l’option -limit
- -limit 2/min : Ceci indique le taux de correspondance moyen maximum pour la journalisation. Dans cet exemple, pour les paquets similaires, la journalisation sera limitée à 2 par minute. Vous pouvez également spécifier 2/seconde, 2/minute, 2/heure, 2/jour. Ceci est utile lorsque vous ne voulez pas encombrer vos messages de journal avec des messages répétés des mêmes paquets abandonnés
- -j LOG : Ceci indique que la cible pour ce paquet est LOG. c’est-à-dire écrire dans le fichier journal.
- -log-prefix « IPTables: « Vous pouvez spécifier n’importe quel préfixe de journal, qui sera ajouté aux messages de journal qui seront écrits dans le fichier /var/log/messages
- -log-level 4 : Il s’agit des niveaux syslog standard. 4 correspond à un avertissement. Vous pouvez utiliser un nombre compris entre 0 et 7. 0 correspond à l’urgence et 7 au débogage. Reportez vous à la fin de ce tutoriel
Comment configurer les LOG sur iptables avec exemples
Log des paquets DROP
iptables -N LOGGING
iptables -A OUTPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "[IPTABLES DROP]: " --log-level 4
iptables -A LOGGING -j DROP
Log des paquets DROP et ACCEPT
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A OUTPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "[IPTABLES]: " --log-level 4
iptables -A LOGGING -j DROP
Log la table mangle
iptables -t mangle -N LOG_MANGLE
iptables -t mangle -A LOG_MANGLE -j LOG --log-prefix '[IPTABLES MANGLE DROP]: '
iptables -t mangle -A LOG_MANGLE -j DROP
Log des ping
iptables -A INPUT -p icmp --icmp-type echo-request -j LOG --log-level info --log-prefix "ping "
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
Comment voir les logs iptables
Vous pouvez utiliser la commande dmesg.
Bien sûr il est aussi possible d’utiliser la commande tail pour lire les dernières modifications des journaux.
Par exemple :
tail -200 /var/log/kern.log
Enfin vous pouvez aussi utiliser la commande journalctl.
Pour voir les journaux contenant le mot iptables :
journalctl -g iptables
Enfin pour suivre les ajouts en temps réel :
journalctl -b
La sortie est la suivante :
- IPTABLES DROP : C’est le préfixe que nous avons utilisé dans notre journalisation en spécifiant l’option -log-prefix.
- IN=eno1 Ceci indique l’interface qui a été utilisée pour ces paquets entrants. Elle sera vide pour les paquets sortants
- OUT=eno1 Ceci indique l’interface qui a été utilisée pour les paquets sortants. Elle sera vide pour les paquets entrants.
- SRC= L’adresse IP de la source d’où provient le paquet
- DST= L’adresse IP de destination vers laquelle le paquet a été envoyé
- LEN= Taille et longueur du paquet
- PROTO= Indique le protocole TCP, ICMP, UDP, etc
- SPT= Indique le port source
- DPT= Indique le port de destination. Dans la 2ème ligne ci-dessus, le port de destination est 6899
Comment rediriger les logs iptables vers un fichier journal spécifique
Les journaux iptables peuvent vite polluer les journaux systèmes Linux.
Même s’il est possible de jouer sur grep, c’est assez vite agaçant.
Heureusement, il est possible de rediriger les journaux iptables vers un fichier spécifique.
Vous pouvez faire cela avec rsyslog ou syslog-ng selon l’implémentation syslog utilisé par votre distribution Linux.
avec rsyslog
- Créez le fichier suivante :
vim /etc/rsyslog.d/20-iptables.conf
- Puis ajoutez la ligne suivante qui fait correspondre les LOG contenant les mots « IPTABLES – » vers le fichier /var/log/iptables.log :
:msg,contains, "[IPTABLES" -/var/log/iptables.log
- Si vous ne voulez pas qu’iptables log dans les autres fichiers comme kern.log, messages, ajoutez la ligne suivante :
:msg,contains, "[IPTABLES" - /var/log/iptables.log :msg,contains, "[IPTABLES" ~
- Puis on relance le service pour prendre en compte les modifications
/etc/init.d/rsyslog restart
avec syslog-ng
- Editez /etc/syslog-ng/syslog-ng.conf
- Puis ajoutez une règle suivante pour rediriger les journaux qui correspondent à IPT= vers /var/log/iptables.log
destination iptables { file("/var/log/iptables.log"); }; filter f_iptables { match("IPT="); }; log { source(src); filter(f_iptables); destination(iptables); };