{"id":288,"date":"2026-06-20T16:26:52","date_gmt":"2026-06-20T16:26:52","guid":{"rendered":"https:\/\/shattered.io\/fr\/2026\/06\/20\/iptables-linux-tutoriel\/"},"modified":"2026-06-20T16:28:13","modified_gmt":"2026-06-20T16:28:13","slug":"iptables-linux-tutoriel","status":"publish","type":"post","link":"https:\/\/shattered.io\/fr\/2026\/06\/20\/iptables-linux-tutoriel\/","title":{"rendered":"iptables Linux : S\u00e9curiser un Serveur en 12 \u00c9tapes [2026]"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">iptables \u00e9quipe plus de 90 % des serveurs Linux en production selon les donn\u00e9es consolid\u00e9es de la communaut\u00e9 Netfilter. Pourtant, une mauvaise configuration suffit pour exposer un service critique, bloquer Docker ou verrouiller votre propre acc\u00e8s SSH. Ce tutoriel vous guide \u00e0 travers 12 \u00e9tapes concr\u00e8tes pour configurer un pare-feu robuste sur Ubuntu 24.04 LTS ou Debian 12, de l&#8217;installation jusqu&#8217;\u00e0 la persistance des r\u00e8gles en passant par la protection contre les attaques par force brute.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La version install\u00e9e sur Ubuntu 24.04 LTS est <strong>iptables 1.8.10-3ubuntu2<\/strong>, accompagn\u00e9e de nftables 1.1.0-2 et d&#8217;ufw 0.36.2-6. Sur Ubuntu 24.10, les paquets montent respectivement \u00e0 iptables 1.8.11-2ubuntu1 et nftables 1.1.1-1build1. Ces versions coexistent dans le sous-syst\u00e8me Netfilter du noyau Linux, ce qui cr\u00e9e des subtilit\u00e9s importantes avant de modifier vos r\u00e8gles.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prerequis\">Pr\u00e9requis<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Syst\u00e8me d&#8217;exploitation<\/strong> : Ubuntu 22.04 LTS, Ubuntu 24.04 LTS, Ubuntu 24.10 ou Debian 12 (Bookworm)<\/li>\n<li><strong>Acc\u00e8s root ou sudo<\/strong> : toutes les commandes iptables n\u00e9cessitent des privil\u00e8ges \u00e9lev\u00e9s<\/li>\n<li><strong>Connexion SSH active<\/strong> : si vous travaillez \u00e0 distance, ne coupez jamais l&#8217;acc\u00e8s SSH avant d&#8217;avoir valid\u00e9 vos r\u00e8gles<\/li>\n<li><strong>Versions logicielles confirm\u00e9es<\/strong> : iptables 1.8.x, kernel Linux 5.15 ou sup\u00e9rieur<\/li>\n<li><strong>Acc\u00e8s console ou IPMI<\/strong> : en cas de blocage accidentel, acc\u00e8s au serveur hors SSH indispensable<\/li>\n<li><strong>Notions r\u00e9seau de base<\/strong> : ports TCP\/UDP, adresses IP, protocole ICMP<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ce tutoriel traite un serveur standard sans Docker dans un premier temps. La section d\u00e9di\u00e9e \u00e0 Docker et iptables couvre les interactions sp\u00e9cifiques \u00e0 cette configuration.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"architecture-diptables-tables-chaines-et-cibles\">Architecture d&#8217;iptables : tables, cha\u00eenes et cibles<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">iptables filtre les paquets r\u00e9seau \u00e0 travers une hi\u00e9rarchie de <strong>tables<\/strong>, de <strong>cha\u00eenes<\/strong> et de <strong>r\u00e8gles<\/strong>. Comprendre cette architecture avant d&#8217;\u00e9crire la moindre r\u00e8gle \u00e9vite la grande majorit\u00e9 des erreurs de configuration.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"les-quatre-tables-principales\">Les quatre tables principales<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Table<\/th><th>R\u00f4le<\/th><th>Cha\u00eenes disponibles<\/th><th>Cas d&#8217;usage typique<\/th><\/tr><\/thead><tbody><tr><td><strong>filter<\/strong><\/td><td>Filtrage des paquets (table par d\u00e9faut)<\/td><td>INPUT, OUTPUT, FORWARD<\/td><td>Autoriser ou bloquer du trafic<\/td><\/tr><tr><td><strong>nat<\/strong><\/td><td>Traduction d&#8217;adresses r\u00e9seau<\/td><td>PREROUTING, OUTPUT, POSTROUTING<\/td><td>Redirection de ports, masquage IP<\/td><\/tr><tr><td><strong>mangle<\/strong><\/td><td>Modification des en-t\u00eates de paquets<\/td><td>Toutes les 5 cha\u00eenes<\/td><td>QoS, marquage de paquets<\/td><\/tr><tr><td><strong>raw<\/strong><\/td><td>Traitement avant le suivi de connexion<\/td><td>PREROUTING, OUTPUT<\/td><td>Contournement du conntrack<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"les-cinq-chaines-standard\">Les cinq cha\u00eenes standard<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Chaque paquet r\u00e9seau traverse un chemin pr\u00e9cis selon sa direction :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>INPUT<\/strong> : paquets destin\u00e9s au serveur local (port 22, 80, 443&#8230;)<\/li>\n<li><strong>OUTPUT<\/strong> : paquets \u00e9mis par le serveur local<\/li>\n<li><strong>FORWARD<\/strong> : paquets traversant le serveur (routeur, passerelle VPN)<\/li>\n<li><strong>PREROUTING<\/strong> : paquets avant routage (redirection de destination)<\/li>\n<li><strong>POSTROUTING<\/strong> : paquets apr\u00e8s routage (masquage d&#8217;adresse source)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Pour un serveur standard (non routeur), vous utiliserez quasi exclusivement la table <strong>filter<\/strong> et les cha\u00eenes <strong>INPUT<\/strong>, <strong>OUTPUT<\/strong> et <strong>FORWARD<\/strong>. La cha\u00eene FORWARD reste vide avec une politique DROP sauf si le serveur fait du routage ou du VPN.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les cibles (targets) d\u00e9finissent l&#8217;action appliqu\u00e9e au paquet :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ACCEPT<\/strong> : laisser passer le paquet<\/li>\n<li><strong>DROP<\/strong> : rejeter le paquet silencieusement<\/li>\n<li><strong>REJECT<\/strong> : rejeter et envoyer un message d&#8217;erreur \u00e0 l&#8217;exp\u00e9diteur<\/li>\n<li><strong>LOG<\/strong> : journaliser le paquet sans l&#8217;arr\u00eater, la r\u00e8gle suivante s&#8217;applique<\/li>\n<li><strong>MASQUERADE<\/strong> : masquage d&#8217;IP pour le NAT dynamique<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-1-verifier-et-installer-iptables\">\u00c9tape 1 : V\u00e9rifier et installer iptables<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sur les distributions modernes, iptables est g\u00e9n\u00e9ralement pr\u00e9install\u00e9. V\u00e9rifiez d&#8217;abord sa pr\u00e9sence et sa version :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># V\u00e9rifier la version d'iptables install\u00e9e\nsudo iptables --version\n\n# R\u00e9sultat attendu sur Ubuntu 24.04 LTS :\n# iptables v1.8.10 (nf_tables)\n\n# V\u00e9rifier le backend actif\nsudo update-alternatives --display iptables\n\n# Afficher toutes les r\u00e8gles actives avec compteurs\nsudo iptables -L -v -n\n\n# Exemple de sortie sur un serveur vierge :\n# Chain INPUT (policy ACCEPT 0 packets, 0 bytes)\n#  target  prot opt source    destination\n#\n# Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)\n#  target  prot opt source    destination\n#\n# Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)\n#  target  prot opt source    destination<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La mention <code>(nf_tables)<\/code> indique qu&#8217;iptables utilise nftables comme backend. C&#8217;est le comportement par d\u00e9faut depuis Ubuntu 20.04. Trois cha\u00eenes vides avec la politique ACCEPT signifient qu&#8217;aucune r\u00e8gle ne filtre le trafic : \u00e9tat le plus vuln\u00e9rable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si iptables est absent (serveur minimal) :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Installation sur Ubuntu\/Debian\nsudo apt update\nsudo apt install -y iptables iptables-persistent\n\n# Sur CentOS\/RHEL\/AlmaLinux 9\nsudo dnf install -y iptables-services\nsudo systemctl enable iptables\nsudo systemctl start iptables<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-2-sauvegarder-et-creer-un-script-de-configuration\">\u00c9tape 2 : Sauvegarder et cr\u00e9er un script de configuration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Travailler avec un script plut\u00f4t qu&#8217;en ligne de commande directe pr\u00e9sente deux avantages : reproductibilit\u00e9 compl\u00e8te et possibilit\u00e9 d&#8217;inclure un <code>iptables -F<\/code> initial pour repartir d&#8217;un \u00e9tat propre.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Sauvegarder la configuration actuelle avant toute modification\nsudo mkdir -p \/etc\/iptables\nsudo iptables-save > \/etc\/iptables\/rules.v4.backup\n\n# Cr\u00e9er le script de configuration\nsudo nano \/etc\/iptables\/setup-firewall.sh<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Structure initiale du script (les r\u00e8gles seront ajout\u00e9es \u00e9tape par \u00e9tape) :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n# Pare-feu iptables - Configuration serveur Linux\n# Mis \u00e0 jour : juin 2026\n\n# ---- REMISE \u00c0 Z\u00c9RO ----\niptables -F\niptables -X\niptables -t nat -F\niptables -t nat -X\niptables -t mangle -F\niptables -t mangle -X\n\n# Politique temporairement en ACCEPT pendant la configuration\n# (sera bascul\u00e9e en DROP \u00e0 la fin du script)\niptables -P INPUT ACCEPT\niptables -P FORWARD ACCEPT\niptables -P OUTPUT ACCEPT\n\necho \"Remise \u00e0 z\u00e9ro effectu\u00e9e\"<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Rendre le script ex\u00e9cutable\nsudo chmod +x \/etc\/iptables\/setup-firewall.sh<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-3-autoriser-le-trafic-loopback\">\u00c9tape 3 : Autoriser le trafic loopback<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;interface loopback (<code>lo<\/code>, adresse 127.0.0.1) est utilis\u00e9e par les processus locaux pour communiquer entre eux. Bloquer cette interface casse des services entiers : bases de donn\u00e9es locales, sockets Unix, services systemd.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Autoriser tout le trafic sur l'interface loopback\niptables -A INPUT -i lo -j ACCEPT\niptables -A OUTPUT -o lo -j ACCEPT\n\n# Bloquer les paquets pr\u00e9tendant venir de 127.0.0.1 sur une interface externe\n# Protection contre le spoofing de l'adresse loopback\niptables -A INPUT -s 127.0.0.0\/8 ! -i lo -j DROP<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La troisi\u00e8me r\u00e8gle prot\u00e8ge contre une technique d&#8217;attaque rare : des paquets forg\u00e9s avec l&#8217;adresse source 127.0.0.1 arrivant sur une interface externe. Sans cette protection, certains services locaux pourraient accepter ces paquets en croyant qu&#8217;ils viennent de la machine elle-m\u00eame.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-4-autoriser-les-connexions-etablies-et-liees\">\u00c9tape 4 : Autoriser les connexions \u00e9tablies et li\u00e9es<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le module <code>conntrack<\/code> (connection tracking) d&#8217;iptables suit l&#8217;\u00e9tat des connexions r\u00e9seau. Cette r\u00e8gle est probablement la plus importante de toute la configuration car elle permet au serveur de recevoir les r\u00e9ponses aux connexions qu&#8217;il initie lui-m\u00eame :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Bloquer d'abord les paquets invalides (avant ESTABLISHED pour les \u00e9liminer t\u00f4t)\niptables -A INPUT -m conntrack --ctstate INVALID -j DROP\n\n# Autoriser les connexions d\u00e9j\u00e0 \u00e9tablies et les connexions li\u00e9es\n# (r\u00e9ponses aux connexions sortantes initi\u00e9es par le serveur)\niptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT\n\n# V\u00e9rifier que le module conntrack est charg\u00e9\nlsmod | grep conntrack<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;\u00e9tat <code>ESTABLISHED<\/code> couvre les paquets faisant partie d&#8217;une connexion bidirectionnelle active (mises \u00e0 jour apt, requ\u00eates DNS sortantes, etc.). L&#8217;\u00e9tat <code>RELATED<\/code> couvre les connexions auxiliaires, comme les canaux de donn\u00e9es FTP passif. Sans cette r\u00e8gle, le serveur ne pourrait pas recevoir de r\u00e9ponses \u00e0 ses propres requ\u00eates sortantes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-5-proteger-lacces-ssh\">\u00c9tape 5 : Prot\u00e9ger l&#8217;acc\u00e8s SSH<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SSH sur le port 22 est la cible principale des scans automatis\u00e9s. Les serveurs expos\u00e9s re\u00e7oivent entre 1 000 et 5 000 tentatives de connexion par jour selon les donn\u00e9es de Shodan (2025). Une r\u00e8gle d&#8217;autorisation simple ne suffit pas : il faut combiner autorisation et limitation de d\u00e9bit.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Cas 1 : Port SSH standard (22), acc\u00e8s depuis n'importe quelle IP\niptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT\n\n# Cas 2 : Port SSH personnalis\u00e9 (exemple : 2222)\n# iptables -A INPUT -p tcp --dport 2222 -m conntrack --ctstate NEW -j ACCEPT\n\n# Cas 3 : Restreindre SSH \u00e0 une plage IP sp\u00e9cifique (recommand\u00e9 en production)\n# Remplacer 203.0.113.0\/24 par votre plage d'IP r\u00e9elle\n# iptables -A INPUT -p tcp -s 203.0.113.0\/24 --dport 22 -m conntrack --ctstate NEW -j ACCEPT<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-6-limiter-les-tentatives-de-connexion-ssh-anti-brute-force\">\u00c9tape 6 : Limiter les tentatives de connexion SSH (anti-brute force)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La limitation de d\u00e9bit (rate limiting) bloque les attaques par force brute avant qu&#8217;elles atteignent le service SSH. Cette technique fonctionne avec le module <code>recent<\/code> d&#8217;iptables et ne n\u00e9cessite pas Fail2ban, bien que les deux puissent coexister :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Protection SSH anti-brute force avec le module recent\n# Enregistrer l'IP source dans la liste \"ssh_brute\"\niptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW \\\n  -m recent --set --name ssh_brute\n\n# Bloquer les IP ayant plus de 4 tentatives en 60 secondes\niptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW \\\n  -m recent --update --seconds 60 --hitcount 5 --name ssh_brute \\\n  -j DROP\n\n# Variante avec journalisation avant blocage\niptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW \\\n  -m recent --update --seconds 60 --hitcount 5 --name ssh_brute \\\n  -j LOG --log-prefix \"SSH_BRUTE_FORCE: \" --log-level 7<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ces r\u00e8gles bloquent silencieusement les scanners automatis\u00e9s tout en permettant \u00e0 un utilisateur l\u00e9gitime qui ferait plusieurs tentatives \u00e9chou\u00e9es de se reconnecter apr\u00e8s 60 secondes. Ajustez <code>--hitcount<\/code> et <code>--seconds<\/code> selon votre politique de s\u00e9curit\u00e9. Pour une protection plus agressive, r\u00e9duisez <code>--hitcount<\/code> \u00e0 3.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-7-autoriser-le-trafic-web-http-et-https\">\u00c9tape 7 : Autoriser le trafic web (HTTP et HTTPS)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si votre serveur h\u00e9berge des applications web, ouvrez les ports 80 et 443. Si vous utilisez Let&#8217;s Encrypt pour les certificats TLS, le port 80 est \u00e9galement n\u00e9cessaire pour la validation HTTP-01 :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Autoriser HTTP (port 80)\niptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT\n\n# Autoriser HTTPS (port 443) sur TCP\niptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT\n\n# Autoriser QUIC\/HTTP3 sur UDP 443 (serveurs Nginx 1.25+ ou Caddy)\niptables -A INPUT -p udp --dport 443 -m conntrack --ctstate NEW -j ACCEPT\n\n# Si serveur mail : SMTP (25), SMTPS (465), Submission (587), IMAP (993), POP3S (995)\n# iptables -A INPUT -p tcp -m multiport --dports 25,465,587,993,995 \\\n#   -m conntrack --ctstate NEW -j ACCEPT<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La r\u00e8gle QUIC sur UDP 443 couvre HTTP\/3. Nginx 1.25+ et Caddy le supportent nativement. Si votre stack n&#8217;utilise pas encore HTTP\/3, omettez la ligne UDP pour r\u00e9duire la surface d&#8217;attaque.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-8-configurer-les-regles-icmp-ping\">\u00c9tape 8 : Configurer les r\u00e8gles ICMP (ping)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bloquer ICMP totalement est une mauvaise pratique souvent recommand\u00e9e \u00e0 tort dans des tutoriels d\u00e9pass\u00e9s. ICMP remplit des fonctions critiques pour le bon fonctionnement du r\u00e9seau, notamment la d\u00e9couverte du MTU (path MTU discovery). Voici la configuration recommand\u00e9e :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Autoriser les messages ICMP essentiels en entr\u00e9e\n# echo-request (type 8) : permet le ping entrant, limit\u00e9 \u00e0 1\/s\niptables -A INPUT -p icmp --icmp-type echo-request -m limit \\\n  --limit 1\/s --limit-burst 5 -j ACCEPT\n\n# destination-unreachable (type 3) : n\u00e9cessaire pour path MTU discovery\niptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT\n\n# time-exceeded (type 11) : n\u00e9cessaire pour traceroute et diagnostics\niptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT\n\n# Bloquer tous les autres types ICMP (ping flood, etc.)\niptables -A INPUT -p icmp -j DROP<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La limite de 1 ping par seconde avec un burst de 5 paquets permet le diagnostic r\u00e9seau normal tout en bloquant les attaques par ping flood. Un attaquant envoyant des milliers de pings par seconde ne franchira pas cette limite.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-9-journaliser-les-paquets-rejetes\">\u00c9tape 9 : Journaliser les paquets rejet\u00e9s<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Avant d&#8217;appliquer la politique de rejet par d\u00e9faut, ajoutez des r\u00e8gles de journalisation. Ces logs sont invaluables pour diagnostiquer les blocages l\u00e9gitimes et d\u00e9tecter les tentatives d&#8217;intrusion :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Journaliser les paquets INPUT rejet\u00e9s (limit\u00e9 \u00e0 5\/min pour \u00e9viter le log flooding)\niptables -A INPUT -m limit --limit 5\/min --limit-burst 10 \\\n  -j LOG --log-prefix \"IPT_INPUT_DROP: \" --log-level 7\n\n# Journaliser les paquets FORWARD rejet\u00e9s\niptables -A FORWARD -m limit --limit 5\/min --limit-burst 10 \\\n  -j LOG --log-prefix \"IPT_FORWARD_DROP: \" --log-level 7\n\n# Consulter les logs en temps r\u00e9el\nsudo journalctl -f | grep \"IPT_INPUT_DROP\"\n\n# Ou dans \/var\/log\/kern.log sur Debian\/Ubuntu\nsudo tail -f \/var\/log\/kern.log | grep \"IPT_\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Le niveau de log 7 (debug) envoie les messages vers le journal du noyau. La limite de 5 messages par minute emp\u00eache les attaques par d\u00e9ni de service par remplissage de logs. Sans cette limite, un attaquant pourrait saturer votre partition <code>\/var\/log<\/code> en quelques minutes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-10-appliquer-la-politique-de-refus-par-defaut-drop\">\u00c9tape 10 : Appliquer la politique de refus par d\u00e9faut (DROP)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cette \u00e9tape est la plus critique. Elle bascule la politique par d\u00e9faut de ACCEPT vers DROP pour les cha\u00eenes INPUT et FORWARD. Apr\u00e8s cette commande, tout trafic non explicitement autoris\u00e9 sera rejet\u00e9 :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ATTENTION : v\u00e9rifiez que les r\u00e8gles SSH sont bien en place avant cette commande\n# En cas de doute : sudo iptables -L INPUT -n | grep \"dpt:22\"\n\n# Politique DROP pour INPUT (trafic entrant vers le serveur)\niptables -P INPUT DROP\n\n# Politique DROP pour FORWARD (trafic transitant par le serveur)\niptables -P FORWARD DROP\n\n# Laisser OUTPUT en ACCEPT (le serveur peut initier des connexions sortantes)\niptables -P OUTPUT ACCEPT\n\n# V\u00e9rification imm\u00e9diate : votre session SSH doit rester active\necho \"R\u00e8gles appliqu\u00e9es. Session SSH maintenue.\"\n\n# Afficher la configuration finale avec num\u00e9ros de ligne\niptables -L -v -n --line-numbers<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si vous perdez votre acc\u00e8s SSH apr\u00e8s cette commande, vos r\u00e8gles d&#8217;autorisation SSH (\u00e9tape 5) n&#8217;ont pas \u00e9t\u00e9 appliqu\u00e9es avant la politique DROP. Acc\u00e9dez au serveur via la console VNC ou IPMI et ex\u00e9cutez <code>iptables -P INPUT ACCEPT<\/code> pour retrouver l&#8217;acc\u00e8s, puis recommencez dans le bon ordre.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Astuce de s\u00e9curit\u00e9 : avant d&#8217;appliquer la politique DROP, planifiez une remise \u00e0 z\u00e9ro automatique avec la commande <code>at<\/code> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Planifier une remise \u00e0 z\u00e9ro dans 5 minutes en cas de blocage accidentel\necho \"iptables -P INPUT ACCEPT; iptables -F\" | sudo at now + 5 minutes\n\n# Appliquer vos r\u00e8gles... puis annuler le job at si tout va bien\nsudo atrm 1  # Remplacer 1 par le num\u00e9ro de job affich\u00e9 par at<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-11-persister-les-regles-avec-iptables-persistent\">\u00c9tape 11 : Persister les r\u00e8gles avec iptables-persistent<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Par d\u00e9faut, les r\u00e8gles iptables sont volatiles : elles disparaissent au red\u00e9marrage. Le paquet <code>iptables-persistent<\/code> les sauvegarde et les recharge automatiquement au boot :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Installer iptables-persistent si pas encore fait\nsudo apt install -y iptables-persistent\n\n# Sauvegarder les r\u00e8gles IPv4 actuelles\nsudo iptables-save > \/etc\/iptables\/rules.v4\n\n# Sauvegarder les r\u00e8gles IPv6 actuelles\nsudo ip6tables-save > \/etc\/iptables\/rules.v6\n\n# Exemple de contenu de \/etc\/iptables\/rules.v4 :\n# # Generated by iptables-save v1.8.10\n# *filter\n# :INPUT DROP [0:0]\n# :FORWARD DROP [0:0]\n# :OUTPUT ACCEPT [0:0]\n# -A INPUT -i lo -j ACCEPT\n# -A INPUT -s 127.0.0.0\/8 ! -i lo -j DROP\n# -A INPUT -m conntrack --ctstate INVALID -j DROP\n# -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT\n# -A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT\n# -A INPUT -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT\n# -A INPUT -p tcp -m tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT\n# COMMIT<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pour recharger les r\u00e8gles depuis le fichier sans red\u00e9marrer :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Recharger les r\u00e8gles IPv4\nsudo iptables-restore < \/etc\/iptables\/rules.v4\n\n# Activer le service de persistance au d\u00e9marrage\nsudo systemctl enable netfilter-persistent\nsudo systemctl status netfilter-persistent\n\n# V\u00e9rifier que les r\u00e8gles survivent apr\u00e8s reboot (test sur VM recommand\u00e9)\nsudo reboot\n# Apr\u00e8s red\u00e9marrage : sudo iptables -L -v -n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-12-configurer-ipv6-avec-ip6tables\">\u00c9tape 12 : Configurer IPv6 avec ip6tables<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">IPv6 est activ\u00e9 par d\u00e9faut sur Ubuntu 22.04+ et Debian 12. Une configuration iptables sans ip6tables laisse le serveur totalement ouvert sur IPv6, contournant toutes vos r\u00e8gles IPv4 :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># V\u00e9rifier les r\u00e8gles IPv6 actuelles\nsudo ip6tables -L -v -n\n\n# Configuration minimale IPv6\n# Loopback\nip6tables -A INPUT -i lo -j ACCEPT\nip6tables -A OUTPUT -o lo -j ACCEPT\n\n# Connexions \u00e9tablies\nip6tables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT\n\n# ICMPv6 : OBLIGATOIRE pour le bon fonctionnement d'IPv6\n# NDP (Neighbor Discovery Protocol) utilise ICMPv6\n# Ne JAMAIS bloquer ICMPv6 totalement contrairement \u00e0 IPv4\nip6tables -A INPUT -p ipv6-icmp -j ACCEPT\nip6tables -A OUTPUT -p ipv6-icmp -j ACCEPT\n\n# SSH sur IPv6\nip6tables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT\n\n# HTTP\/HTTPS sur IPv6\nip6tables -A INPUT -p tcp -m multiport --dports 80,443 \\\n  -m conntrack --ctstate NEW -j ACCEPT\n\n# Politique DROP\nip6tables -P INPUT DROP\nip6tables -P FORWARD DROP\n\n# Sauvegarder\nsudo ip6tables-save > \/etc\/iptables\/rules.v6<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Contrairement \u00e0 IPv4, <strong>ne jamais bloquer ICMPv6 totalement<\/strong>. IPv6 en d\u00e9pend fondamentalement pour la r\u00e9solution d'adresses (NDP remplace ARP), la d\u00e9tection de doublons d'adresse et la d\u00e9couverte des routeurs. Bloquer ICMPv6 rend le r\u00e9seau IPv6 non fonctionnel m\u00eame si les adresses sont correctement configur\u00e9es.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"iptables-vs-nftables-vs-ufw-comparatif-2026\">iptables vs nftables vs UFW : comparatif 2026<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le choix entre iptables, nftables et UFW d\u00e9pend de votre contexte. Voici un comparatif factuel bas\u00e9 sur les versions disponibles sur Ubuntu 24.04 LTS :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Crit\u00e8re<\/th><th>iptables 1.8.10<\/th><th>nftables 1.1.0<\/th><th>UFW 0.36.2<\/th><\/tr><\/thead><tbody><tr><td><strong>Syntaxe<\/strong><\/td><td>Commandes s\u00e9par\u00e9es par table<\/td><td>Syntaxe unifi\u00e9e, plus lisible<\/td><td>Simplicit\u00e9 maximale<\/td><\/tr><tr><td><strong>Performance sur grandes r\u00e8gles<\/strong><\/td><td>Bonne<\/td><td>Meilleure (\u00e9valuation par ensembles)<\/td><td>D\u00e9pend du backend<\/td><\/tr><tr><td><strong>Gestion IPv4 + IPv6<\/strong><\/td><td>Deux commandes distinctes<\/td><td>Gestion unifi\u00e9e en une commande<\/td><td>Unifi\u00e9e via backend<\/td><\/tr><tr><td><strong>Compatibilit\u00e9 Docker<\/strong><\/td><td>Native, cha\u00eene DOCKER int\u00e9gr\u00e9e<\/td><td>Partielle via iptables-compat<\/td><td>Probl\u00e8mes document\u00e9s<\/td><\/tr><tr><td><strong>Courbe d'apprentissage<\/strong><\/td><td>Moyenne<\/td><td>Plus complexe initialement<\/td><td>Faible<\/td><\/tr><tr><td><strong>Scripts automatis\u00e9s<\/strong><\/td><td>Excellent (historique abondant)<\/td><td>Bon, en progression<\/td><td>Limit\u00e9<\/td><\/tr><tr><td><strong>Documentation ANSSI<\/strong><\/td><td>Abondante, fran\u00e7aise<\/td><td>En progression<\/td><td>Conseill\u00e9 d\u00e9butants<\/td><\/tr><tr><td><strong>Package Ubuntu 24.04<\/strong><\/td><td>1.8.10-3ubuntu2<\/td><td>1.1.0-2<\/td><td>0.36.2-6<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Sur Ubuntu 24.04, iptables utilise nftables comme backend par d\u00e9faut (visible avec <code>iptables --version<\/code> qui affiche <code>nf_tables<\/code>). Les deux outils coexistent dans Netfilter. La bonne approche en 2026 : utiliser iptables si vous avez une base existante de r\u00e8gles ou si Docker est dans votre stack, envisager la migration vers nftables natif pour les nouveaux d\u00e9ploiements sans Docker.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"iptables-et-docker-linteraction-a-ne-pas-negliger\">iptables et Docker : l'interaction \u00e0 ne pas n\u00e9gliger<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Docker modifie automatiquement les r\u00e8gles iptables pour g\u00e9rer le r\u00e9seau des conteneurs. Ce comportement cr\u00e9e des surprises, notamment des ports expos\u00e9s non pr\u00e9vus qui contournent votre politique DROP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quand vous d\u00e9marrez un conteneur avec <code>-p 8080:80<\/code>, Docker ajoute automatiquement des r\u00e8gles dans la cha\u00eene DOCKER de la table nat et dans FORWARD. Ces r\u00e8gles ignorent votre politique DROP sur FORWARD car elles sont \u00e9valu\u00e9es avant vos r\u00e8gles personnalis\u00e9es :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Voir les r\u00e8gles cr\u00e9\u00e9es par Docker\nsudo iptables -L DOCKER -v -n\nsudo iptables -t nat -L DOCKER -v -n\n\n# Solution 1 : Binder uniquement sur localhost (recommand\u00e9e pour services internes)\n# docker run -p 127.0.0.1:8080:80 mon-service\n\n# Solution 2 : Utiliser la cha\u00eene DOCKER-USER (recommand\u00e9e pour restrictions)\n# Docker consulte toujours DOCKER-USER avant ses propres r\u00e8gles\n# Bloquer l'acc\u00e8s externe \u00e0 un port Docker :\niptables -I DOCKER-USER -i eth0 -p tcp --dport 8080 -j DROP\n\n# Autoriser uniquement une IP sp\u00e9cifique vers ce port\niptables -I DOCKER-USER -i eth0 -s 203.0.113.10 -p tcp --dport 8080 -j ACCEPT\niptables -A DOCKER-USER -i eth0 -p tcp --dport 8080 -j DROP<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La cha\u00eene <code>DOCKER-USER<\/code> est la solution officielle recommand\u00e9e par Docker Inc. pour ajouter des r\u00e8gles persistantes que Docker ne supprime pas lors du red\u00e9marrage du service. Toutes vos restrictions sur les ports expos\u00e9s doivent passer par cette cha\u00eene.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sur Ubuntu 24.04.3, un probl\u00e8me fr\u00e9quent signal\u00e9 dans les forums concerne les r\u00e8gles DNS cass\u00e9es apr\u00e8s activation d'iptables sur un serveur ex\u00e9cutant systemd-resolved et Docker simultan\u00e9ment. Solution : autoriser explicitement le port 53 en sortie.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Autoriser les requ\u00eates DNS sortantes (n\u00e9cessaire avec OUTPUT en ACCEPT par d\u00e9faut)\n# Si vous avez restreint OUTPUT, ajoutez ces r\u00e8gles :\niptables -A OUTPUT -p udp --dport 53 -j ACCEPT\niptables -A OUTPUT -p tcp --dport 53 -j ACCEPT\n\n# DNS local de systemd-resolved\niptables -A OUTPUT -d 127.0.0.53 -j ACCEPT<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tableau-de-reference-regles-iptables-courantes\">Tableau de r\u00e9f\u00e9rence : r\u00e8gles iptables courantes<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Cas d'usage<\/th><th>Commande iptables<\/th><th>Notes<\/th><\/tr><\/thead><tbody><tr><td>Autoriser MySQL depuis r\u00e9seau interne<\/td><td><code>iptables -A INPUT -p tcp -s 10.0.0.0\/8 --dport 3306 -j ACCEPT<\/code><\/td><td>N'exposez jamais MySQL publiquement<\/td><\/tr><tr><td>Bloquer une IP sp\u00e9cifique<\/td><td><code>iptables -I INPUT -s 198.51.100.1 -j DROP<\/code><\/td><td><code>-I<\/code> ins\u00e8re en t\u00eate de cha\u00eene<\/td><\/tr><tr><td>Redirection de port (NAT)<\/td><td><code>iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080<\/code><\/td><td>Table nat, pas filter<\/td><\/tr><tr><td>Masquage IP (partage connexion)<\/td><td><code>iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE<\/code><\/td><td>Activer ip_forward \u00e9galement<\/td><\/tr><tr><td>Bloquer les scans SYN flood<\/td><td><code>iptables -A INPUT -p tcp --syn -m limit --limit 1\/s --limit-burst 3 -j ACCEPT<\/code><\/td><td>Limite les attaques SYN<\/td><\/tr><tr><td>Bloquer les paquets invalides<\/td><td><code>iptables -A INPUT -m conntrack --ctstate INVALID -j DROP<\/code><\/td><td>\u00c0 placer avant les r\u00e8gles ACCEPT<\/td><\/tr><tr><td>Bloquer scan Xmas (Nmap)<\/td><td><code>iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP<\/code><\/td><td>D\u00e9tection de scans agressifs<\/td><\/tr><tr><td>Bloquer scan NULL (Nmap)<\/td><td><code>iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP<\/code><\/td><td>Combinaison de flags invalide<\/td><\/tr><tr><td>Lister r\u00e8gles avec num\u00e9ros<\/td><td><code>iptables -L INPUT --line-numbers -n<\/code><\/td><td>Pour supprimer par num\u00e9ro<\/td><\/tr><tr><td>Supprimer une r\u00e8gle par num\u00e9ro<\/td><td><code>iptables -D INPUT 3<\/code><\/td><td>Supprime la r\u00e8gle n\u00b03 de INPUT<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"pieges-courants-et-erreurs-a-eviter-absolument\">Pi\u00e8ges courants et erreurs \u00e0 \u00e9viter absolument<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"piege-1-appliquer-drop-avant-dautoriser-ssh\">Pi\u00e8ge 1 : Appliquer DROP avant d'autoriser SSH<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">L'ordre des commandes est critique. Si vous ex\u00e9cutez <code>iptables -P INPUT DROP<\/code> avant d'ajouter la r\u00e8gle SSH, vous perdez imm\u00e9diatement votre acc\u00e8s distant. V\u00e9rifiez toujours avec <code>iptables -L INPUT -n | grep \"dpt:22\"<\/code> que la r\u00e8gle SSH est pr\u00e9sente avant de basculer en DROP.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"piege-2-oublier-ip6tables\">Pi\u00e8ge 2 : Oublier ip6tables<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">iptables ne contr\u00f4le que IPv4. Sur tout serveur moderne avec une adresse IPv6 publique, le pare-feu IPv4 le plus strict du monde ne prot\u00e8ge pas contre un scan IPv6 si ip6tables n'est pas configur\u00e9. V\u00e9rifiez votre exposition IPv6 avec <code>curl -6 ifconfig.io<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"piege-3-confondre-i-et-a\">Pi\u00e8ge 3 : Confondre -I et -A<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>-A<\/code> (append) ajoute une r\u00e8gle en fin de cha\u00eene. <code>-I<\/code> (insert) l'ajoute en t\u00eate par d\u00e9faut. iptables \u00e9value les r\u00e8gles dans l'ordre s\u00e9quentiel. Une r\u00e8gle DROP ajout\u00e9e avec <code>-A<\/code> apr\u00e8s une r\u00e8gle ACCEPT pour le m\u00eame trafic sera ignor\u00e9e. Utilisez <code>-I<\/code> pour les blocages d'urgence et <code>-A<\/code> pour les r\u00e8gles normales dans le bon ordre logique.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"piege-4-ne-pas-persister-les-regles\">Pi\u00e8ge 4 : Ne pas persister les r\u00e8gles<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sans <code>iptables-persistent<\/code>, toutes vos r\u00e8gles disparaissent au red\u00e9marrage. Un serveur red\u00e9marr\u00e9 apr\u00e8s une mise \u00e0 jour de s\u00e9curit\u00e9 devient soudainement totalement ouvert. V\u00e9rifiez que les r\u00e8gles sont dans <code>\/etc\/iptables\/rules.v4<\/code> apr\u00e8s chaque modification importante.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"piege-5-ignorer-linteraction-avec-docker\">Pi\u00e8ge 5 : Ignorer l'interaction avec Docker<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Docker contourne les r\u00e8gles INPUT pour les ports mapp\u00e9s. Un <code>docker run -p 0.0.0.0:8080:80<\/code> expose le port 8080 publiquement m\u00eame avec <code>iptables -P INPUT DROP<\/code>. La seule solution correcte : utiliser la cha\u00eene DOCKER-USER ou binder uniquement sur localhost (<code>127.0.0.1:8080:80<\/code>).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"piege-6-bloquer-icmpv6-sur-ipv6\">Pi\u00e8ge 6 : Bloquer ICMPv6 sur IPv6<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Beaucoup de tutoriels copi\u00e9s depuis IPv4 bloquent tout ICMP par d\u00e9faut. Sur IPv6, cette pratique casse compl\u00e8tement la connectivit\u00e9 car NDP (Neighbor Discovery Protocol) utilise ICMPv6. Autorisez toujours <code>-p ipv6-icmp -j ACCEPT<\/code> dans ip6tables.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"piege-7-bloquer-les-paquets-related-sans-le-module-nf_conntrack_ftp\">Pi\u00e8ge 7 : Bloquer les paquets RELATED sans le module nf_conntrack_ftp<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">FTP actif utilise des connexions de donn\u00e9es sur des ports al\u00e9atoires. Pour que la r\u00e8gle <code>ESTABLISHED,RELATED<\/code> fonctionne avec FTP, le module <code>nf_conntrack_ftp<\/code> doit \u00eatre charg\u00e9. V\u00e9rifiez avec <code>lsmod | grep conntrack_ftp<\/code> et chargez-le avec <code>modprobe nf_conntrack_ftp<\/code>, puis ajoutez-le \u00e0 <code>\/etc\/modules<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"piege-8-utiliser-reject-pour-la-politique-par-defaut\">Pi\u00e8ge 8 : Utiliser REJECT pour la politique par d\u00e9faut<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">REJECT envoie un message d'erreur \u00e0 l'exp\u00e9diteur, confirmant que le port est filtr\u00e9 et que le serveur existe. DROP rejette silencieusement, ce qui ralentit les scans et ne r\u00e9v\u00e8le rien. Utilisez DROP pour la politique par d\u00e9faut et REJECT seulement pour des r\u00e8gles sp\u00e9cifiques o\u00f9 informer l'exp\u00e9diteur est pertinent (r\u00e9seau interne, par exemple).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"depannage-iptables-10-problemes-frequents-et-leurs-solutions\">D\u00e9pannage iptables : 10 probl\u00e8mes fr\u00e9quents et leurs solutions<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Probl\u00e8me<\/th><th>Sympt\u00f4me<\/th><th>Commande de diagnostic<\/th><th>Solution<\/th><\/tr><\/thead><tbody><tr><td>Session SSH coup\u00e9e<\/td><td>Connexion ferm\u00e9e apr\u00e8s -P INPUT DROP<\/td><td>Console IPMI<\/td><td><code>iptables -P INPUT ACCEPT<\/code> puis reconfigurer dans l'ordre<\/td><\/tr><tr><td>Port 80 inaccessible<\/td><td>Timeout navigateur<\/td><td><code>iptables -L INPUT -n | grep 80<\/code><\/td><td>Ajouter r\u00e8gle <code>--dport 80 -j ACCEPT<\/code><\/td><\/tr><tr><td>Docker port ignor\u00e9 par les r\u00e8gles<\/td><td>Port expos\u00e9 malgr\u00e9 INPUT DROP<\/td><td><code>iptables -L DOCKER -n<\/code><\/td><td>Utiliser la cha\u00eene DOCKER-USER<\/td><\/tr><tr><td>R\u00e8gles perdues au red\u00e9marrage<\/td><td>Serveur ouvert apr\u00e8s reboot<\/td><td><code>ls -la \/etc\/iptables\/rules.v4<\/code><\/td><td><code>iptables-save > \/etc\/iptables\/rules.v4<\/code><\/td><\/tr><tr><td>DNS ne fonctionne plus<\/td><td>R\u00e9solution d'adresses \u00e9choue<\/td><td><code>dig @8.8.8.8 google.com<\/code><\/td><td>Autoriser OUTPUT UDP\/TCP port 53<\/td><\/tr><tr><td>apt update \u00e9choue<\/td><td>Timeout sur les d\u00e9p\u00f4ts<\/td><td><code>iptables -L OUTPUT -n<\/code><\/td><td>Politique OUTPUT doit \u00eatre ACCEPT<\/td><\/tr><tr><td>Ping impossible<\/td><td>ICMP bloqu\u00e9<\/td><td><code>iptables -L INPUT -n | grep icmp<\/code><\/td><td>Ajouter r\u00e8gle icmp echo-request ACCEPT<\/td><\/tr><tr><td>Conflit UFW\/iptables<\/td><td>R\u00e8gles dupliqu\u00e9es contradictoires<\/td><td><code>ufw status; iptables -L -n<\/code><\/td><td>D\u00e9sactiver UFW ou utiliser iptables seul<\/td><\/tr><tr><td>Erreur \"Unknown option\"<\/td><td>Syntaxe incorrecte<\/td><td>Lire le message d'erreur pr\u00e9cis<\/td><td><code>man iptables<\/code>, v\u00e9rifier guillemets et tirets<\/td><\/tr><tr><td>Module absent<\/td><td>\"No such file or directory\"<\/td><td><code>lsmod | grep [module]<\/code><\/td><td><code>modprobe [module]<\/code>, ajouter \u00e0 \/etc\/modules<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conseils-avances\">Conseils avanc\u00e9s<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"protection-anti-ddos-de-couche-reseau\">Protection anti-DDoS de couche r\u00e9seau<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">iptables seul ne peut pas arr\u00eater un DDoS volum\u00e9trique (votre liaison est satur\u00e9e avant que les paquets atteignent le serveur), mais peut filtrer des attaques syn-flood et UDP flood de faible intensit\u00e9 :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Protection anti-SYN flood\niptables -A INPUT -p tcp --syn -m limit --limit 1\/s --limit-burst 3 -j ACCEPT\niptables -A INPUT -p tcp --syn -j DROP\n\n# Bloquer les scans Nmap : Xmas scan, NULL scan, SYN\/RST\niptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP\niptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP\niptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP\n\n# Protection contre le spoofing RFC 1918 depuis l'ext\u00e9rieur (interface eth0)\niptables -A INPUT -i eth0 -s 10.0.0.0\/8 -j DROP\niptables -A INPUT -i eth0 -s 172.16.0.0\/12 -j DROP\niptables -A INPUT -i eth0 -s 192.168.0.0\/16 -j DROP\n\n# Limiter les connexions par IP (protection contre les connexions massives)\niptables -A INPUT -p tcp --syn -m recent --set --name conn_limit\niptables -A INPUT -p tcp --syn -m recent --update --seconds 1 \\\n  --hitcount 20 --name conn_limit -j DROP<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"chaines-personnalisees-pour-une-meilleure-organisation\">Cha\u00eenes personnalis\u00e9es pour une meilleure organisation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pour les configurations complexes avec plusieurs dizaines de r\u00e8gles, les cha\u00eenes personnalis\u00e9es am\u00e9liorent la lisibilit\u00e9 et les performances en \u00e9vitant le re-parcours de r\u00e8gles non applicables :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Cr\u00e9er une cha\u00eene d\u00e9di\u00e9e aux services web\niptables -N SERVICES_WEB\niptables -A INPUT -p tcp -j SERVICES_WEB\n\n# Remplir la cha\u00eene\niptables -A SERVICES_WEB --dport 80 -j ACCEPT\niptables -A SERVICES_WEB --dport 443 -j ACCEPT\niptables -A SERVICES_WEB --dport 8080 -j ACCEPT\n\n# Cr\u00e9er une cha\u00eene pour la blocklist d'IPs\niptables -N BLOCKLIST\niptables -A INPUT -j BLOCKLIST\niptables -A BLOCKLIST -s 198.51.100.0\/24 -j DROP\n\n# Lister toutes les cha\u00eenes existantes\niptables -L -n --line-numbers<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"integration-avec-fail2ban\">Int\u00e9gration avec Fail2ban<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Fail2ban surveille les logs et ajoute dynamiquement des r\u00e8gles iptables pour bloquer les IPs malveillantes. Il cr\u00e9e sa propre cha\u00eene <code>f2b-sshd<\/code> et l'ins\u00e8re dans INPUT. V\u00e9rifiez la compatibilit\u00e9 de backend :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Dans \/etc\/fail2ban\/jail.local, sp\u00e9cifier le backend iptables\n# [sshd]\n# banaction = iptables-multiport\n# banaction_allports = iptables-allports\n\n# V\u00e9rifier les cha\u00eenes Fail2ban actives\nsudo iptables -L | grep f2b\n\n# Lister les IPs actuellement bannies pour SSH\nsudo fail2ban-client status sshd\n\n# D\u00e9bannir une IP manuellement\nsudo fail2ban-client set sshd unbanip 203.0.113.50<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"script-de-configuration-complet-et-operationnel\">Script de configuration complet et op\u00e9rationnel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ce script int\u00e8gre toutes les \u00e9tapes pr\u00e9c\u00e9dentes dans un fichier unique. Adaptez les variables en haut selon votre environnement :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n# \/etc\/iptables\/setup-firewall.sh\n# Pare-feu iptables complet - Serveur Linux 2026\n# Test\u00e9 sur Ubuntu 24.04 LTS (iptables 1.8.10-3ubuntu2) et Debian 12\n\n# ---- VARIABLES \u00c0 ADAPTER ----\nSSH_PORT=22\nSSH_ALLOWED_IP=\"\"    # Laisser vide pour tout autoriser, ex: \"203.0.113.0\/24\"\nWEB_SERVER=true      # Mettre false si pas de serveur web\nMAIL_SERVER=false    # Mettre true si serveur mail\n\n# ---- REMISE \u00c0 Z\u00c9RO ----\niptables -F\niptables -X\niptables -t nat -F\niptables -t nat -X\niptables -t mangle -F\niptables -t mangle -X\niptables -P INPUT ACCEPT\niptables -P FORWARD ACCEPT\niptables -P OUTPUT ACCEPT\n\n# ---- R\u00c8GLES ESSENTIELLES ----\n# Loopback\niptables -A INPUT -i lo -j ACCEPT\niptables -A OUTPUT -o lo -j ACCEPT\niptables -A INPUT -s 127.0.0.0\/8 ! -i lo -j DROP\n\n# Paquets invalides (avant tout le reste)\niptables -A INPUT -m conntrack --ctstate INVALID -j DROP\n\n# Connexions \u00e9tablies\niptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT\n\n# ---- SSH ----\nif [ -z \"$SSH_ALLOWED_IP\" ]; then\n    iptables -A INPUT -p tcp --dport $SSH_PORT -m conntrack --ctstate NEW -j ACCEPT\nelse\n    iptables -A INPUT -p tcp -s $SSH_ALLOWED_IP --dport $SSH_PORT \\\n      -m conntrack --ctstate NEW -j ACCEPT\nfi\n\n# Anti-brute force SSH\niptables -A INPUT -p tcp --dport $SSH_PORT -m conntrack --ctstate NEW \\\n  -m recent --set --name ssh_brute\niptables -A INPUT -p tcp --dport $SSH_PORT -m conntrack --ctstate NEW \\\n  -m recent --update --seconds 60 --hitcount 5 --name ssh_brute -j DROP\n\n# ---- DNS SORTANT ----\niptables -A OUTPUT -p udp --dport 53 -j ACCEPT\niptables -A OUTPUT -p tcp --dport 53 -j ACCEPT\n\n# ---- WEB ----\nif [ \"$WEB_SERVER\" = true ]; then\n    iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT\n    iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT\n    iptables -A INPUT -p udp --dport 443 -m conntrack --ctstate NEW -j ACCEPT\nfi\n\n# ---- MAIL ----\nif [ \"$MAIL_SERVER\" = true ]; then\n    iptables -A INPUT -p tcp -m multiport --dports 25,465,587,993,995 \\\n      -m conntrack --ctstate NEW -j ACCEPT\nfi\n\n# ---- ICMP ----\niptables -A INPUT -p icmp --icmp-type echo-request \\\n  -m limit --limit 1\/s --limit-burst 5 -j ACCEPT\niptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT\niptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT\niptables -A INPUT -p icmp -j DROP\n\n# ---- JOURNALISATION ----\niptables -A INPUT -m limit --limit 5\/min --limit-burst 10 \\\n  -j LOG --log-prefix \"IPT_INPUT_DROP: \" --log-level 7\n\n# ---- POLITIQUES PAR D\u00c9FAUT ----\niptables -P INPUT DROP\niptables -P FORWARD DROP\niptables -P OUTPUT ACCEPT\n\necho \"=== Pare-feu configur\u00e9 avec succ\u00e8s ===\"\niptables -L -v -n\n\n# ---- PERSISTANCE ----\niptables-save > \/etc\/iptables\/rules.v4\necho \"R\u00e8gles sauvegard\u00e9es dans \/etc\/iptables\/rules.v4\"<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conformite-nis2-et-recommandations-anssi-pour-le-filtrage-reseau\">Conformit\u00e9 NIS2 et recommandations ANSSI pour le filtrage r\u00e9seau<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La directive NIS2, en vigueur dans l'Union Europ\u00e9enne depuis octobre 2024 et transpos\u00e9e progressivement en droit national, impose aux entit\u00e9s importantes et essentielles des mesures de s\u00e9curit\u00e9 r\u00e9seau qui incluent le filtrage du trafic. Le R\u00e9f\u00e9rentiel Cyber France (ReCyF), publi\u00e9 par l'<a href=\"https:\/\/cyber.gouv.fr\/\" target=\"_blank\" rel=\"noopener\">ANSSI le 17 mars 2026<\/a>, liste explicitement le cloisonnement r\u00e9seau et le filtrage des flux parmi les 20 objectifs de s\u00e9curit\u00e9 \u00e0 atteindre pour les organisations fran\u00e7aises.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour une conformit\u00e9 NIS2 via iptables, votre configuration doit couvrir au minimum ces points :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Principe du moindre privil\u00e8ge<\/strong> : seuls les ports n\u00e9cessaires au service sont ouverts, la politique par d\u00e9faut est DROP<\/li>\n<li><strong>Journalisation des rejets<\/strong> : tous les paquets rejet\u00e9s sont loggu\u00e9s et conserv\u00e9s au minimum 12 mois selon le ReCyF<\/li>\n<li><strong>Segmentation r\u00e9seau<\/strong> : la cha\u00eene FORWARD bloqu\u00e9e par d\u00e9faut isole les segments de r\u00e9seau<\/li>\n<li><strong>Protection anti-brute force<\/strong> : rate limiting sur tous les services d'authentification (SSH, web, mail)<\/li>\n<li><strong>Couverture IPv6<\/strong> : ip6tables configur\u00e9 en parall\u00e8le d'iptables pour \u00e9viter les contournements<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Le <a href=\"https:\/\/www.cert.ssi.gouv.fr\/\" target=\"_blank\" rel=\"noopener\">CERT-FR<\/a> publie r\u00e9guli\u00e8rement des alertes sur des vuln\u00e9rabilit\u00e9s n\u00e9cessitant des modifications urgentes des r\u00e8gles de filtrage r\u00e9seau. Abonnez-vous \u00e0 leurs flux d'alertes pour adapter vos r\u00e8gles iptables en r\u00e9ponse aux nouvelles menaces. Pour r\u00e9f\u00e9rence technique, la <a href=\"https:\/\/documentation.ubuntu.com\/security\/security-features\/network\/firewall\/\" target=\"_blank\" rel=\"noopener\">documentation de s\u00e9curit\u00e9 Ubuntu<\/a> maintient \u00e0 jour les versions des packages de filtrage et leurs interactions, et le <a href=\"https:\/\/www.debian.org\/doc\/manuals\/securing-debian-manual\/\" target=\"_blank\" rel=\"noopener\">Securing Debian Manual<\/a> documente les bonnes pratiques de configuration sur Debian 12.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"couverture-connexe\">Couverture connexe<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"articles-lies\">Articles li\u00e9s<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"\/fr\/wireshark-analyse-reseau-tutoriel\/\">Wireshark : analyser le trafic r\u00e9seau en 12 \u00e9tapes<\/a> - Capturez et analysez le trafic bloqu\u00e9 par iptables pour valider votre configuration<\/li>\n<li><a href=\"\/fr\/pfsense-vs-opnsense\/\">pfSense vs OPNsense : pare-feu r\u00e9seau d\u00e9di\u00e9<\/a> - Comparatif des firewalls mat\u00e9riels si iptables ne suffit plus<\/li>\n<li><a href=\"\/fr\/lets-encrypt-nginx-https-tutoriel\/\">Let's Encrypt + Nginx : HTTPS en 12 \u00e9tapes<\/a> - S\u00e9curisez le trafic web que votre iptables autorise<\/li>\n<li><a href=\"\/fr\/tls-1-3-vs-tls-1-2\/\">TLS 1.3 vs TLS 1.2 : 40 % plus rapide, 5 CVE<\/a> - Chiffrement de couche transport compl\u00e9mentaire au filtrage<\/li>\n<li><a href=\"\/fr\/cle-ssh-linux\/\">Cl\u00e9 SSH Linux : 12 \u00c9tapes, 30 Min<\/a> - S\u00e9curisez l'acc\u00e8s SSH que votre iptables prot\u00e8ge<\/li>\n<li><a href=\"\/fr\/security-hub\/\">S\u00e9curit\u00e9 en ligne : prot\u00e9ger ses donn\u00e9es et connexions<\/a> - Vue d'ensemble de la s\u00e9curit\u00e9 serveur Linux<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq-iptables-linux\">FAQ iptables Linux<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"iptables-ou-nftables-en-2026-que-choisir\">iptables ou nftables en 2026 : que choisir ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sur Ubuntu 24.04 LTS, iptables utilise d\u00e9j\u00e0 nftables comme backend (version 1.8.10 avec mention \"nf_tables\"). Les deux coexistent. Choisissez iptables si vous avez des scripts existants ou si Docker est dans votre stack (iptables reste plus compatible nativement). Choisissez nftables pour les nouveaux d\u00e9ploiements sans Docker, car sa syntaxe unifi\u00e9e IPv4\/IPv6 simplifie la gestion \u00e0 long terme.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"comment-vider-toutes-les-regles-iptables-durgence\">Comment vider toutes les r\u00e8gles iptables d'urgence ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ex\u00e9cutez les 4 commandes dans cet ordre exact : <code>iptables -P INPUT ACCEPT<\/code>, <code>iptables -P FORWARD ACCEPT<\/code>, <code>iptables -P OUTPUT ACCEPT<\/code>, puis <code>iptables -F<\/code>. Cette s\u00e9quence remet les politiques en ACCEPT avant de vider les r\u00e8gles. L'inverse (vider d'abord) peut couper votre acc\u00e8s si la politique est d\u00e9j\u00e0 DROP.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"iptables-bloque-t-il-le-trafic-ipv6\">iptables bloque-t-il le trafic IPv6 ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Non. iptables ne g\u00e8re que IPv4. Pour IPv6, utilisez <code>ip6tables<\/code> avec les m\u00eames param\u00e8tres. Les fichiers de persistance sont distincts : <code>\/etc\/iptables\/rules.v4<\/code> pour IPv4 et <code>\/etc\/iptables\/rules.v6<\/code> pour IPv6. V\u00e9rifiez votre exposition IPv6 avec <code>curl -6 ifconfig.io<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"pourquoi-docker-ignore-t-il-mes-regles-iptables\">Pourquoi Docker ignore-t-il mes r\u00e8gles iptables ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Docker ajoute ses propres r\u00e8gles dans les cha\u00eenes DOCKER et DOCKER-ISOLATION des tables nat et filter. Ces r\u00e8gles sont \u00e9valu\u00e9es avant vos r\u00e8gles personnalis\u00e9es dans INPUT pour les ports mapp\u00e9s. La solution officielle : utiliser la cha\u00eene <code>DOCKER-USER<\/code> pour vos restrictions, ou binder les conteneurs sur <code>127.0.0.1<\/code> pour les services non destin\u00e9s \u00e0 l'ext\u00e9rieur.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"quelle-est-la-difference-entre-drop-et-reject\">Quelle est la diff\u00e9rence entre DROP et REJECT ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">DROP rejette le paquet silencieusement. L'exp\u00e9diteur ne re\u00e7oit aucune r\u00e9ponse et doit attendre le timeout. REJECT envoie un message d'erreur TCP RST ou ICMP \"port unreachable\", confirmant \u00e0 un attaquant que le port est filtr\u00e9 et que le serveur existe. Pour la politique par d\u00e9faut, utilisez DROP. Pour des services internes o\u00f9 vous voulez que les clients sachent qu'ils n'ont pas acc\u00e8s, REJECT peut \u00eatre pr\u00e9f\u00e9rable.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"comment-tester-mes-regles-sans-risquer-de-me-bloquer\">Comment tester mes r\u00e8gles sans risquer de me bloquer ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Utilisez la commande <code>at<\/code> pour programmer une remise \u00e0 z\u00e9ro automatique : avant d'appliquer vos r\u00e8gles restrictives, planifiez <code>echo \"iptables -P INPUT ACCEPT; iptables -F\" | sudo at now + 5 minutes<\/code>. Si votre configuration vous bloque, les r\u00e8gles seront automatiquement remises \u00e0 z\u00e9ro 5 minutes plus tard. Annulez le job avec <code>atrm<\/code> une fois vos r\u00e8gles valid\u00e9es.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"iptables-est-il-compatible-avec-kubernetes\">iptables est-il compatible avec Kubernetes ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Kubernetes utilise kube-proxy qui cr\u00e9e ses propres r\u00e8gles iptables (ou ipvs). Sur un noeud Kubernetes, ne g\u00e9rez pas manuellement iptables : laissez kube-proxy g\u00e9rer les r\u00e8gles des services. Vous pouvez ajouter des r\u00e8gles pour le trafic entrant vers le noeud lui-m\u00eame, mais \u00e9vitez de modifier les cha\u00eenes <code>KUBE-*<\/code> cr\u00e9\u00e9es automatiquement.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"comment-auditer-les-regles-iptables-dun-serveur-en-production\">Comment auditer les r\u00e8gles iptables d'un serveur en production ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ex\u00e9cutez <code>iptables -L -v -n --line-numbers<\/code> pour lister les r\u00e8gles avec compteurs de paquets. Les r\u00e8gles avec un compteur \u00e9lev\u00e9 sont celles qui traitent le plus de trafic. Exportez avec <code>iptables-save<\/code> et comparez avec votre configuration de r\u00e9f\u00e9rence. Pour un audit complet, v\u00e9rifiez aussi <code>ip6tables -L -v -n<\/code> et <code>iptables -t nat -L -v -n<\/code> pour les r\u00e8gles NAT de Docker.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>R\u00e9f\u00e9rences officielles :<\/strong> <a href=\"https:\/\/www.netfilter.org\/\" target=\"_blank\" rel=\"noopener\">Netfilter.org<\/a> (projet officiel iptables\/nftables), <a href=\"https:\/\/documentation.ubuntu.com\/security\/security-features\/network\/firewall\/\" target=\"_blank\" rel=\"noopener\">Documentation Ubuntu Security<\/a>, <a href=\"https:\/\/www.debian.org\/doc\/manuals\/securing-debian-manual\/\" target=\"_blank\" rel=\"noopener\">Securing Debian Manual<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>iptables \u00e9quipe plus de 90 % des serveurs Linux en production selon les donn\u00e9es consolid\u00e9es de la communaut\u00e9 Netfilter. Pourtant, une mauvaise configuration suffit pour exposer un service critique, bloquer\u2026<\/p>\n","protected":false},"author":7,"featured_media":289,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,3],"tags":[],"class_list":["post-288","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-10","category-security"],"_links":{"self":[{"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/posts\/288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/comments?post=288"}],"version-history":[{"count":1,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/posts\/288\/revisions"}],"predecessor-version":[{"id":290,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/posts\/288\/revisions\/290"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/media\/289"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/media?parent=288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/categories?post=288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/tags?post=288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}