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 11/09/2022, 11:30] moths-art Suppression des espaces en fin de ligne (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892) |
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''). | 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''). | ||
Ligne 68: | 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 74: | 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 83: | 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 102: | 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 112: | 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 121: | Ligne 126: | ||
<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 134: | 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 149: | 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 174: | Ligne 179: | ||
<code> | <code> | ||
- | iptables -D OUTPUT 2 | + | sudo iptables -D OUTPUT 2 |
</code> | </code> | ||
Ligne 194: | 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 203: | Ligne 208: | ||
</note> | </note> | ||
- | Commencez par éditer un fichier en root, que vous enregistrerez sous **/etc/network/if-pre-up.d/**. | + | Commencez par éditer un fichier en root, que vous enregistrerez sous **/etc/network/if-pre-up.d/**. |
La première ligne de ce fichier doit être : | La première ligne de ce fichier doit être : | ||
Ligne 211: | Ligne 216: | ||
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]]). | 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 : |
iptables-restore < /etc/iptables.test.rules | iptables-restore < /etc/iptables.test.rules | ||
Ligne 356: | Ligne 361: | ||
* [[http://irp.nain-t.net/doku.php |Bible française d'introduction aux réseaux et à Internet]] ou [[ http://stielec.ac-aix-marseille.fr/electron/cours.htm |ici]] (même auteur et contenu trés proche) | * [[http://irp.nain-t.net/doku.php |Bible française d'introduction aux réseaux et à Internet]] ou [[ http://stielec.ac-aix-marseille.fr/electron/cours.htm |ici]] (même auteur et contenu trés proche) | ||
* [[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]] | ||
- | * [[https://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]] |
* [[https://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. | ||
Ligne 362: | Ligne 367: | ||
* Basé sur [[https://wiki.ubuntu.com/IptablesHowTo]] | * Basé sur [[https://wiki.ubuntu.com/IptablesHowTo]] | ||
- | * 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'équipe de développement de Netfilter. :-) | * Et merci surtout pour son travail au sein de l'équipe de développement de Netfilter. :-) | ||
//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).// | ||
- |