Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| iptables [Le 16/02/2025, 06:30] – [Via iptables-persistent] 78.121.49.7 | iptables [Le 20/07/2026, 10:45] (Version actuelle) – niveau titre (h1) | pas de maj à iptables | liens wpfr | icône | mise en forme krodelabestiole | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| {{tag> | {{tag> | ||
| - | {{ / | ||
| - | ---- | ||
| - | =====Iptables===== | + | {{ : |
| + | ====== iptables ====== | ||
| FIXME: Depuis une Ubuntu 23.10, le package [[apt> | FIXME: Depuis une Ubuntu 23.10, le package [[apt> | ||
| Ligne 9: | Ligne 8: | ||
| ---- | ---- | ||
| - | Iptables | + | **[[wpfr> |
| - | Cette documentation est une introduction à Iptables, elle est destinée à ceux qui souhaitent mettre en place un [[: | + | Cette documentation est une introduction à **iptables**, elle est destinée à ceux qui souhaitent mettre en place un [[: |
| Les lecteurs désirant approfondir leur recherche et aborder l' | Les lecteurs désirant approfondir leur recherche et aborder l' | ||
| - | iptables existe aussi pour ipv6, pour cela il suffit d' | + | **iptables** existe aussi pour l'IPv6, pour cela il suffit d' |
| - | + | ||
| - | Pour une bonne compréhension d'Iptables (et des pare-feux en général) il est conseillé d'avoir des notions en réseaux informatiques, | + | |
| + | Pour une bonne compréhension d' | ||
| ===== Configuration du pare-feu ===== | ===== Configuration du pare-feu ===== | ||
| Ligne 28: | Ligne 26: | ||
| Afin de ne pas avoir de problème au moment où on crée ces règles, nous allons d' | Afin de ne pas avoir de problème au moment où on crée ces règles, nous allons d' | ||
| - | En tapant « '' | + | En tapant « '' |
| < | < | ||
| Chain INPUT (policy ACCEPT) | Chain INPUT (policy ACCEPT) | ||
| Ligne 45: | Ligne 43: | ||
| Par défaut, « '' | Par défaut, « '' | ||
| - | <note warning> | + | <note warning> |
| Si vous avez déjà modifié la configuration et que vous voulez la réinitialiser, | Si vous avez déjà modifié la configuration et que vous voulez la réinitialiser, | ||
| Ligne 57: | Ligne 55: | ||
| Pour permettre à une connexion déjà ouverte de recevoir du trafic : | Pour permettre à une connexion déjà ouverte de recevoir du trafic : | ||
| < | < | ||
| - | # iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT | + | sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT |
| </ | </ | ||
| Cette commande ajoute une règle ('' | Cette commande ajoute une règle ('' | ||
| Ligne 69: | Ligne 67: | ||
| === Permettre le trafic entrant sur un port spécifique === | === Permettre le trafic entrant sur un port spécifique === | ||
| - | Pour permettre le trafic entrant sur le port 22 (traditionnellement utilisé par SSH, vous devrez indiquer à iptables tout le trafic TCP sur le port 22 de votre adaptateur réseau. | + | Pour permettre le trafic entrant sur le port 22 (traditionnellement utilisé par [[:SSH]], vous devrez indiquer à **iptables** tout le trafic TCP sur le port 22 de votre adaptateur réseau. |
| < | < | ||
| - | # iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT | + | sudo iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT |
| </ | </ | ||
| Cette commande ajoute une règle ('' | Cette commande ajoute une règle ('' | ||
| Ligne 77: | Ligne 75: | ||
| Maintenant vous pouvez vérifier vos règles iptables : | Maintenant vous pouvez vérifier vos règles iptables : | ||
| < | < | ||
| - | # iptables -L | + | sudo iptables -L |
| Chain INPUT (policy ACCEPT) | Chain INPUT (policy ACCEPT) | ||
| target | target | ||
| Ligne 86: | Ligne 84: | ||
| Maintenant, acceptons tout le trafic web ('' | Maintenant, acceptons tout le trafic web ('' | ||
| < | < | ||
| - | # iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT | + | sudo iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT |
| </ | </ | ||
| En regardant nos règles, nous avons : | En regardant nos règles, nous avons : | ||
| < | < | ||
| - | # iptables -L | + | sudo iptables -L |
| Chain INPUT (policy ACCEPT) | Chain INPUT (policy ACCEPT) | ||
| target | target | ||
| Ligne 105: | Ligne 103: | ||
| Maintenant que nous avons fini avec les autorisations, | Maintenant que nous avons fini avec les autorisations, | ||
| Nous allons en fait modifier la « politique par défaut » (// | Nous allons en fait modifier la « politique par défaut » (// | ||
| + | <note important> | ||
| < | < | ||
| - | # iptables -P INPUT DROP #warning : a ne pas utiliser sur un serveur distant ! | + | sudo iptables -P INPUT DROP #warning : a ne pas utiliser sur un serveur distant ! |
| - | # iptables -L | + | sudo iptables -L |
| Chain INPUT (policy DROP) | Chain INPUT (policy DROP) | ||
| target | target | ||
| Ligne 115: | Ligne 113: | ||
| ACCEPT | ACCEPT | ||
| </ | </ | ||
| + | |||
| + | == Autre méthode, par exemple pour les server == | ||
| **Un autre moyen de procéder** est l' | **Un autre moyen de procéder** est l' | ||
| Ligne 124: | Ligne 124: | ||
| < | < | ||
| - | # iptables -I INPUT 2 -i lo -j ACCEPT | + | sudo iptables -I INPUT 2 -i lo -j ACCEPT |
| </ | </ | ||
| Pour lister les règles plus en détail. | Pour lister les règles plus en détail. | ||
| < | < | ||
| - | # iptables -L -v -n | + | sudo iptables -L -v -n |
| </ | </ | ||
| Ligne 137: | Ligne 137: | ||
| < | < | ||
| # On autorise le PC a faire des pings sur des IP externes et à répondre aux requêtes " | # On autorise le PC a faire des pings sur des IP externes et à répondre aux requêtes " | ||
| - | iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW, | + | sudo iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW, |
| # Si vous utilisez une ancienne version de iptables la commande ci-dessus peut ne pas fonctionner, | # Si vous utilisez une ancienne version de iptables la commande ci-dessus peut ne pas fonctionner, | ||
| - | iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW, | + | sudo iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW, |
| # On autorise les pings | # On autorise les pings | ||
| - | iptables -A INPUT -p icmp -j ACCEPT | + | sudo iptables -A INPUT -p icmp -j ACCEPT |
| </ | </ | ||
| Ligne 152: | Ligne 152: | ||
| Tout d' | Tout d' | ||
| < | < | ||
| - | iptables -L --line-numbers | + | sudo iptables -L --line-numbers |
| </ | </ | ||
| Ce qui personnellement me retourne : | Ce qui personnellement me retourne : | ||
| Ligne 177: | Ligne 177: | ||
| < | < | ||
| - | iptables -D OUTPUT 2 | + | sudo iptables -D OUTPUT 2 |
| </ | </ | ||
| Ligne 195: | Ligne 195: | ||
| Vous avez testé vos règles, ça marche au poil, alors il reste à les appliquer au démarrage. | Vous avez testé vos règles, ça marche au poil, alors il reste à les appliquer au démarrage. | ||
| - | iptables-persistent propose de sauvegarder les règles dans le dossier **/ | + | iptables-persistent propose de sauvegarder les règles dans le répertoire '' |
| - | iptables-save | + | |
| - | Il prend les arguments : **save** pour sauvegarder les règles, | + | Il prend les arguments : '' |
| ==== Via un fichier ==== | ==== Via un fichier ==== | ||
| - | <note important> | + | <note important> |
| </ | </ | ||
| - | Commencez par éditer un fichier en root, que vous enregistrerez sous **/ | + | Commencez par éditer un fichier en root, que vous enregistrerez sous '' |
| La première ligne de ce fichier doit être : | La première ligne de ce fichier doit être : | ||
| Ligne 218: | Ligne 218: | ||
| iptables-restore < / | iptables-restore < / | ||
| - | Le reste du fichier doit contenir les commandes | + | Le reste du fichier doit contenir les commandes |
| Déplacez le script iptables dans / | Déplacez le script iptables dans / | ||
| Ligne 250: | Ligne 250: | ||
| Type=oneshot | Type=oneshot | ||
| RemainAfterExit=yes | RemainAfterExit=yes | ||
| - | ExecStart=/etc/init.d/nom_de_votre_script_iptables(modifier_le_nom!) | + | ExecStart=/usr/local/sbin/ |
| - | ExecStop=/etc/init.d/nom_de_votre_script_iptables(modifier_le_nom!) | + | ExecStop=/usr/local/sbin/ |
| [Install] | [Install] | ||
| Ligne 275: | Ligne 275: | ||
| #!/bin/bash | #!/bin/bash | ||
| - | iptables-restore < / | ||
| - | |||
| ## Script iptables by BeAvEr. | ## Script iptables by BeAvEr. | ||
| Ligne 282: | Ligne 280: | ||
| ## On flush iptables. | ## On flush iptables. | ||
| - | |||
| iptables -F | iptables -F | ||
| iptables -X | iptables -X | ||
| Ligne 289: | Ligne 286: | ||
| iptables -t mangle -F | iptables -t mangle -F | ||
| iptables -t mangle -X | iptables -t mangle -X | ||
| - | |||
| - | ## On drop les requêtes ICMP (votre machine ne répondra plus aux requêtes ping sur votre réseau local). | ||
| - | |||
| - | iptables -A INPUT -p icmp --icmp-type echo-request -j DROP | ||
| - | |||
| - | ## On accepte le Multicast. | ||
| - | |||
| - | iptables -A INPUT -m pkttype --pkt-type multicast -j ACCEPT | ||
| ## On drop tout le trafic entrant. | ## On drop tout le trafic entrant. | ||
| - | |||
| iptables -P INPUT DROP | iptables -P INPUT DROP | ||
| ## On drop tout le trafic sortant. | ## On drop tout le trafic sortant. | ||
| - | |||
| iptables -P OUTPUT DROP | iptables -P OUTPUT DROP | ||
| ## On drop le forward. | ## On drop le forward. | ||
| - | |||
| iptables -P FORWARD DROP | iptables -P FORWARD DROP | ||
| + | |||
| + | ## On drop les requêtes ICMP. | ||
| + | ## Votre machine ne répondra plus aux requêtes ping sur votre réseau local. | ||
| + | iptables -A INPUT -p icmp --icmp-type echo-request -j DROP | ||
| + | |||
| + | # Autorise les messages ICMP " | ||
| + | # Nécessaire pour recevoir les erreurs liées à nos propres connexions | ||
| + | # sortantes (ex: PMTUD - découverte du MTU du chemin), sans quoi les | ||
| + | # connexions TCP/UDP peuvent se bloquer silencieusement (ex: HTTPS/ | ||
| + | iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT | ||
| - | ## On drop les scans XMAS et NULL. | + | # Autorise |
| - | + | # Utilisé notamment par traceroute | |
| - | iptables -A INPUT -m conntrack | + | # en transit (TTL=0) ; utile pour le diagnostic réseau et pour éviter |
| + | # que des erreurs de routage légitimes soient bloquées. | ||
| + | iptables -A INPUT -p icmp --icmp-type time-exceeded | ||
| + | |||
| + | ## On accepte le Multicast (mDNS/ | ||
| + | iptables -A INPUT -m pkttype --pkt-type multicast | ||
| - | iptables -A INPUT -m conntrack --ctstate INVALID | + | ## DHCP client : indispensable pour obtenir/ |
| + | ## sudo ss -tulnpa |grep :68 | ||
| + | ## -> udp | ||
| + | ## -> 192.168.1.254: | ||
| + | iptables -A INPUT -p udp --sport 67 --dport 68 -j ACCEPT | ||
| - | iptables -A INPUT -m conntrack --ctstate | + | ## Rejette les paquets dans un état de connexion invalide (INVALID). |
| - | + | # Il s'agit généralement de paquets malformés, incohérents, | |
| - | iptables -A INPUT -m conntrack --ctstate INVALID | + | # ou ne correspondant à aucune connexion suivie par conntrack. Cette règle |
| + | # permet d' | ||
| + | iptables -A INPUT -m conntrack --ctstate INVALID -j DROP | ||
| ## Dropper silencieusement tous les paquets broadcastés. | ## Dropper silencieusement tous les paquets broadcastés. | ||
| - | |||
| iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP | iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP | ||
| | | ||
| ## Permettre à une connexion ouverte de recevoir du trafic en entrée. | ## Permettre à une connexion ouverte de recevoir du trafic en entrée. | ||
| - | |||
| iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT | iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT | ||
| ## Permettre à une connexion ouverte de recevoir du trafic en sortie. | ## Permettre à une connexion ouverte de recevoir du trafic en sortie. | ||
| - | |||
| iptables -A OUTPUT -m conntrack ! --ctstate INVALID -j ACCEPT | iptables -A OUTPUT -m conntrack ! --ctstate INVALID -j ACCEPT | ||
| ## On accepte la boucle locale en entrée. | ## On accepte la boucle locale en entrée. | ||
| - | |||
| iptables -I INPUT -i lo -j ACCEPT | iptables -I INPUT -i lo -j ACCEPT | ||
| ## On log les paquets en entrée. | ## On log les paquets en entrée. | ||
| - | |||
| iptables -A INPUT -j LOG | iptables -A INPUT -j LOG | ||
| ## On log les paquets forward. | ## On log les paquets forward. | ||
| - | |||
| iptables -A FORWARD -j LOG | iptables -A FORWARD -j LOG | ||
| Ligne 348: | Ligne 349: | ||
| </ | </ | ||
| - | ===== Documentations supplémentaires | + | ===== Voir aussi ===== |
| + | |||
| + | ==== Documentations supplémentaires ==== | ||
| En anglais : | En anglais : | ||
| Ligne 362: | Ligne 365: | ||
| * [[https:// | * [[https:// | ||
| * [[https:// | * [[https:// | ||
| - | ===== Sources | + | |
| + | ==== Sources ==== | ||
| * Basé sur [[https:// | * Basé sur [[https:// | ||
| - | * Merci à Rusty Russell et son How-To, il est la base de cette page. | + | * Merci à Rusty Russell et son //How-To//, il est la base de cette page. |
| * Et merci surtout pour son travail au sein de l' | * Et merci surtout pour son travail au sein de l' | ||
| - | + | ---- | |
| - | // | + | //[[:Contributeurs]] : [[:utilisateurs: |
