Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| 
                    iptables [Le 02/01/2021, 10:13] Theon [Iptables] suppression d'une portion de phrase peu claire  | 
                
                    iptables [Le 16/02/2025, 06:46] (Version actuelle) 78.121.49.7 [Configuration du pare-feu]  | 
            ||
|---|---|---|---|
| Ligne 5: | Ligne 5: | ||
| =====Iptables===== | =====Iptables===== | ||
| + | FIXME: Depuis une Ubuntu 23.10, le package [[apt>iptables]] semble être maintenu, voir : https://changelogs.ubuntu.com/changelogs/pool/main/i/iptables/iptables_1.8.9-2ubuntu2/changelog -- [[utilisateurs:BeAvEr]], en date du : ✨✨ **////__(14/09/2023)__** ✨✨ | ||
| + | |||
| + | ---- | ||
| Iptables est une interface en ligne de commande permettant de configurer Netfilter. En plus de Iptables, depuis la version 8.04, Ubuntu est installé avec la surcouche [[:ufw|UFW]] qui permet de contrôler simplement Netfilter, [[:ufw|UFW]] est toutefois moins complet que iptables. | Iptables est une interface en ligne de commande permettant de configurer Netfilter. En plus de Iptables, depuis la version 8.04, Ubuntu est installé avec la surcouche [[:ufw|UFW]] qui permet de contrôler simplement Netfilter, [[:ufw|UFW]] est toutefois moins complet que iptables. | ||
| Ligne 54: | Ligne 57: | ||
| Pour permettre à une connexion déjà ouverte de recevoir du trafic : | Pour permettre à une connexion déjà ouverte de recevoir du trafic : | ||
| <code> | <code> | ||
| - | # iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT | + | sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT | 
| </code> | </code> | ||
| + | Cette commande ajoute une règle (''-A'') à la chaîne contrôlant le trafic entrant //INPUT//, pour autoriser le trafic (''-j ACCEPT''), aprés vérification que l'état de la connexion est établie (''-m conntrack --ctstate ESTABLISHED''). | ||
| <note warning> | <note warning> | ||
| Ligne 67: | Ligne 71: | ||
| 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. | ||
| <code> | <code> | ||
| - | # iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT | + | sudo iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT | 
| </code> | </code> | ||
| Cette commande ajoute une règle (''-A'') à la chaîne contrôlant le trafic entrant //INPUT//, pour autoriser le trafic (''-j ACCEPT''), vers l'interface (''-i'') //eth0// et à destination du port (''<nowiki>--dport</nowiki>'') //SSH// (on aurait pu mettre 22). | Cette commande ajoute une règle (''-A'') à la chaîne contrôlant le trafic entrant //INPUT//, pour autoriser le trafic (''-j ACCEPT''), vers l'interface (''-i'') //eth0// et à destination du port (''<nowiki>--dport</nowiki>'') //SSH// (on aurait pu mettre 22). | ||
| Ligne 73: | Ligne 77: | ||
| Maintenant vous pouvez vérifier vos règles iptables : | Maintenant vous pouvez vérifier vos règles iptables : | ||
| <code> | <code> | ||
| - | # iptables -L | + | sudo iptables -L | 
| Chain INPUT (policy ACCEPT) | Chain INPUT (policy ACCEPT) | ||
| target  prot opt source  destination   | target  prot opt source  destination   | ||
| Ligne 82: | Ligne 86: | ||
| Maintenant, acceptons tout le trafic web (''www'') entrant : | Maintenant, acceptons tout le trafic web (''www'') entrant : | ||
| <code> | <code> | ||
| - | # iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT | + | sudo iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT | 
| </code> | </code> | ||
| En regardant nos règles, nous avons : | En regardant nos règles, nous avons : | ||
| <code> | <code> | ||
| - | # iptables -L | + | sudo iptables -L | 
| Chain INPUT (policy ACCEPT) | Chain INPUT (policy ACCEPT) | ||
| target  prot opt source  destination   | target  prot opt source  destination   | ||
| Ligne 101: | Ligne 105: | ||
| Maintenant que nous avons fini avec les autorisations, il faut maintenant bloquer le reste. | Maintenant que nous avons fini avec les autorisations, il faut maintenant bloquer le reste. | ||
| Nous allons en fait modifier la « politique par défaut » (//policy//) de la chaîne //INPUT// : cette décision (//DROP//) s'applique lorsque aucune règle n'a été appliquée à un paquet. Donc, si la tentative de connexion n'est permise par aucune des règles précédentes, elle sera rejetée. | Nous allons en fait modifier la « politique par défaut » (//policy//) de la chaîne //INPUT// : cette décision (//DROP//) s'applique lorsque aucune règle n'a été appliquée à un paquet. Donc, si la tentative de connexion n'est permise par aucune des règles précédentes, elle sera rejetée. | ||
| + | <note important>warning : a ne pas utiliser sur un serveur distant !</note> | ||
| <code> | <code> | ||
| - | # 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  prot opt source  destination   | target  prot opt source  destination   | ||
| Ligne 111: | Ligne 115: | ||
| ACCEPT  tcp  -- anywhere  anywhere  tcp dpt:www  | ACCEPT  tcp  -- anywhere  anywhere  tcp dpt:www  | ||
| </code> | </code> | ||
| + | |||
| + | == Autre méthode, par exemple pour les server == | ||
| **Un autre moyen de procéder** est l'ajout en fin de chaîne d'une règle supprimant les paquets (les paquets autorisés par les règles précédentes n'atteindraient pas celle-ci), //via// ''iptables -A INPUT -j DROP'', mais il faudrait alors faire attention à la position des futures règles. | **Un autre moyen de procéder** est l'ajout en fin de chaîne d'une règle supprimant les paquets (les paquets autorisés par les règles précédentes n'atteindraient pas celle-ci), //via// ''iptables -A INPUT -j DROP'', mais il faudrait alors faire attention à la position des futures règles. | ||
| Ligne 116: | Ligne 122: | ||
| === Autoriser le trafic local === | === Autoriser le trafic local === | ||
| - | Un p'tit problème de notre configuration est que même l'interface locale //(loopback)// est bloquée. | + | Un petit problème de notre configuration est que même l'interface locale //(loopback)// est bloquée. | 
| Nous pourrions avoir écrit les règles de rejet seulement pour //eth0// en spécifiant ''-i eth0'', mais nous pouvons aussi ajouter une règle pour //loopback//. Par exemple, nous pourrions l'insérer en 2e position : | Nous pourrions avoir écrit les règles de rejet seulement pour //eth0// en spécifiant ''-i eth0'', mais nous pouvons aussi ajouter une règle pour //loopback//. Par exemple, nous pourrions l'insérer en 2e position : | ||
| <code> | <code> | ||
| - | # iptables -I INPUT 2 -i lo -j ACCEPT | + | sudo iptables -I INPUT 2 -i lo -j ACCEPT | 
| </code> | </code> | ||
| Pour lister les règles plus en détail. | Pour lister les règles plus en détail. | ||
| <code> | <code> | ||
| - | # iptables -L -v -n | + | sudo iptables -L -v -n | 
| </code> | </code> | ||
| Ligne 133: | Ligne 139: | ||
| <code> | <code> | ||
| # On autorise le PC a faire des pings sur des IP externes et à répondre aux requêtes "ping" | # On autorise le PC a faire des pings sur des IP externes et à répondre aux requêtes "ping" | ||
| - | iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT | + | sudo iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT | 
| # Si vous utilisez une ancienne version de iptables la commande ci-dessus peut ne pas fonctionner, dans ce cas entrez la commande suivante : | # Si vous utilisez une ancienne version de iptables la commande ci-dessus peut ne pas fonctionner, dans ce cas entrez la commande suivante : | ||
| - | iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT | + | sudo iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT | 
| # On autorise les pings | # On autorise les pings | ||
| - | iptables -A INPUT -p icmp -j ACCEPT | + | sudo iptables -A INPUT -p icmp -j ACCEPT | 
| </code> | </code> | ||
| Ligne 148: | Ligne 154: | ||
| Tout d'abord vous listez l'ensemble de vos règles avec l'affichage des lignes : | Tout d'abord vous listez l'ensemble de vos règles avec l'affichage des lignes : | ||
| <code> | <code> | ||
| - | iptables -L --line-numbers | + | sudo iptables -L --line-numbers | 
| </code> | </code> | ||
| Ce qui personnellement me retourne : | Ce qui personnellement me retourne : | ||
| Ligne 173: | Ligne 179: | ||
| <code> | <code> | ||
| - | iptables -D OUTPUT 2 | + | sudo iptables -D OUTPUT 2 | 
| </code> | </code> | ||
| Ligne 193: | Ligne 199: | ||
| iptables-persistent propose de sauvegarder les règles dans le dossier **/etc/iptables**, fichier **rules.v4** pour les règles IPv4 et **rules.v6** pour les règles IPv6. Le script peut s’appeler via : | iptables-persistent propose de sauvegarder les règles dans le dossier **/etc/iptables**, fichier **rules.v4** pour les règles IPv4 et **rules.v6** pour les règles IPv6. Le script peut s’appeler via : | ||
| - | service iptables-persistent | + | sudo iptables-save | 
| Il prend les arguments : **save** pour sauvegarder les règles, **flush** pour vider toutes les règles et **reload** pour les recharger depuis les fichiers précités. | Il prend les arguments : **save** pour sauvegarder les règles, **flush** pour vider toutes les règles et **reload** pour les recharger depuis les fichiers précités. | ||
| Ligne 208: | Ligne 214: | ||
| #!/bin/bash | #!/bin/bash | ||
| - | Cette ligne indique que le fichier doit être enregistré en tant que [[:tutoriel:script_shell|script bash]]. | + | Cette ligne indique que le fichier doit être interprété par l'exécutable /bin/bash (c'est donc un [[:tutoriel:script_shell|script bash]]). | 
| Ajoutez ensuite à votre script ceci : | Ajoutez ensuite à votre script ceci : | ||
| Ligne 289: | Ligne 295: | ||
| iptables -A INPUT -p icmp --icmp-type echo-request -j DROP | iptables -A INPUT -p icmp --icmp-type echo-request -j DROP | ||
| - | iptables -A OUTPUT -p icmp --icmp-type echo-reply -j DROP | ||
| ## On accepte le Multicast. | ## On accepte le Multicast. | ||
| Ligne 323: | Ligne 328: | ||
| ## 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,RELATED -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. | ||
| Ligne 348: | Ligne 353: | ||
| En anglais : | En anglais : | ||
| - | * [[http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO.html| How To Iptables]] | + | * [[https://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO.html| How To Iptables]] | 
| - | * [[http://www.netfilter.org/documentation/|Documentation Multilingue de Netfilter et Iptables]] | + | * [[https://www.netfilter.org/documentation/|Documentation Multilingue de Netfilter et Iptables]] | 
| - | * [[http://people.netfilter.org/rusty/unreliable-guides/| Rusty's Remarkably Unreliable Guides]] | + | * [[https://people.netfilter.org/rusty/unreliable-guides/| Rusty's Remarkably Unreliable Guides]] | 
| En Français : | En Français : | ||
| Ligne 357: | Ligne 362: | ||
| * [[https://memoire-grise-liberee.fr.eu.org|"Mémoire Grise Libérée" : IpTables HowTo]] | * [[https://memoire-grise-liberee.fr.eu.org|"Mémoire Grise Libérée" : IpTables HowTo]] | ||
| * [[http://www.inetdoc.net/guides/iptables-tutorial/|iptables-tutorial de Oskar Andreasson traducteur Marc Blanc et publié par Philippe Latu]] | * [[http://www.inetdoc.net/guides/iptables-tutorial/|iptables-tutorial de Oskar Andreasson traducteur Marc Blanc et publié par Philippe Latu]] | ||
| - | * [[http://www.it-connect.fr/supprimer-une-regle-precise-dans-iptables/|Supprimer une règle précise sous Iptables]] sur IT-Connect.fr | + | * [[https://www.it-connect.fr/supprimer-une-regle-precise-dans-iptables/|Supprimer une règle précise sous Iptables]] sur IT-Connect.fr | 
| * [[https://wiki.visionduweb.fr/index.php?title=Configurer_le_pare-feu_Iptables|Quelques notes avec des exemples ainsi que des liens valides vers des tutoriels pour utiliser Iptables]] depuis le wiki de Visionduweb. | * [[https://wiki.visionduweb.fr/index.php?title=Configurer_le_pare-feu_Iptables|Quelques notes avec des exemples ainsi que des liens valides vers des tutoriels pour utiliser Iptables]] depuis le wiki de Visionduweb. | ||
| ===== Sources ===== | ===== Sources ===== | ||
| Ligne 367: | Ligne 372: | ||
| //Contributeurs : [[utilisateurs:Kmeleon]], [[utilisateurs:eks]], [[utilisateurs:BeAvEr]] (Création du script iptables et modification majeure de la documentation), [[utilisateurs:maverick62]],  [[utilisateurs:mydjey]] (mise à jour et refonte).// | //Contributeurs : [[utilisateurs:Kmeleon]], [[utilisateurs:eks]], [[utilisateurs:BeAvEr]] (Création du script iptables et modification majeure de la documentation), [[utilisateurs:maverick62]],  [[utilisateurs:mydjey]] (mise à jour et refonte).// | ||
| - | |||