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, 11:05] 92.141.190.18 [Configuration du pare-feu] explication de la commande |
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 117: | 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 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 209: | 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 290: | 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 324: | 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 349: | 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 358: | 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 368: | 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).// | ||
- |