Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
iptables [Le 16/03/2019, 01:13]
51.75.71.123 [Script iptables] beaver
iptables [Le 16/09/2023, 20:30] (Version actuelle)
162.247.74.206 16/09/23 20:27:36 < beaver> beaver@rpi3b:~$ dos2unix iptables-bbcode.txt 16/09/23 20:27:36 < beaver> dos2unix: conversion du fichier iptables-bbcode.txt au format Unix… (problème d'encodage résolu) # beaver
Ligne 1: Ligne 1:
 {{tag>​pare-feu sécurité réseau}} {{tag>​pare-feu sécurité réseau}}
 +{{ /​iptables.jpg?​340nolink| Iptables}}
 ---- ----
 +
 =====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 8: Ligne 13:
 Cette documentation est une introduction à Iptables, elle est destinée à ceux qui souhaitent mettre en place un [[:​pare-feu]] et/ou un partage de connexion, sur une machine Linux, sans passer par une interface graphique. Seule la table par défaut (Filter) d'​Iptables est présentée ici et seules les chaînes utilisées par Filter (Input, Forward et Output) y sont exposées. Cette documentation est une introduction à Iptables, elle est destinée à ceux qui souhaitent mettre en place un [[:​pare-feu]] et/ou un partage de connexion, sur une machine Linux, sans passer par une interface graphique. Seule la table par défaut (Filter) d'​Iptables est présentée ici et seules les chaînes utilisées par Filter (Input, Forward et Output) y sont exposées.
  
-Les lecteurs désirant approfondir leur recherche et aborder l'​utilisation des autres tables (Nat, Mangle, Row et Security) ainsi que des chaînes non utilisables par Filter (Prerouting et Postrouting) se tourneront vers les nombreuses documentations disponibles sur l'​Internet ​(voir notamment ici). Ceux désirant configurer un [[:​pare-feu]] par l'​intermédiaire d'une interface graphique se tourneront vers Gufw ou encore vers Shorewall pour une utilisation sur serveur.+Les lecteurs désirant approfondir leur recherche et aborder l'​utilisation des autres tables (Nat, Mangle, Row et Security) ainsi que des chaînes non utilisables par Filter (Prerouting et Postrouting) se tourneront vers les nombreuses documentations disponibles sur l'​Internet. Ceux désirant configurer un [[:​pare-feu]] par l'​intermédiaire d'une interface graphique se tourneront vers Gufw ou encore vers Shorewall pour une utilisation sur serveur.
  
 iptables existe aussi pour ipv6, pour cela il suffit d'​utiliser la commande ip6tables au lieu de iptables. iptables existe aussi pour ipv6, pour cela il suffit d'​utiliser la commande ip6tables au lieu de iptables.
Ligne 54: Ligne 59:
 # iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT # 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 74: Ligne 80:
 Chain INPUT (policy ACCEPT) Chain INPUT (policy ACCEPT)
 target ​    prot opt source ​              ​destination ​       ​ target ​    prot opt source ​              ​destination ​       ​
-ACCEPT ​    ​all ​ --  anywhere ​            ​anywhere ​           ​state RELATED,ESTABLISHED ​ +ACCEPT ​    ​all ​ --  anywhere ​            ​anywhere ​           ​ctstate ​ESTABLISHED
 ACCEPT ​    ​tcp ​ --  anywhere ​            ​anywhere ​           tcp dpt:​ssh ​ ACCEPT ​    ​tcp ​ --  anywhere ​            ​anywhere ​           tcp dpt:​ssh ​
 </​code>​ </​code>​
Ligne 88: Ligne 94:
 Chain INPUT (policy ACCEPT) Chain INPUT (policy ACCEPT)
 target ​    prot opt source ​              ​destination ​       ​ target ​    prot opt source ​              ​destination ​       ​
-ACCEPT ​    ​all ​ --  anywhere ​            ​anywhere ​           ​state RELATED,ESTABLISHED ​ +ACCEPT ​    ​all ​ --  anywhere ​            ​anywhere ​           ​ctstate ​ESTABLISHED
 ACCEPT ​    ​tcp ​ --  anywhere ​            ​anywhere ​           tcp dpt:​ssh ​ ACCEPT ​    ​tcp ​ --  anywhere ​            ​anywhere ​           tcp dpt:​ssh ​
 ACCEPT ​    ​tcp ​ --  anywhere ​            ​anywhere ​           tcp dpt:​www ​ ACCEPT ​    ​tcp ​ --  anywhere ​            ​anywhere ​           tcp dpt:​www ​
Ligne 105: Ligne 111:
 Chain INPUT (policy DROP) Chain INPUT (policy DROP)
 target ​    prot opt source ​              ​destination ​       ​ target ​    prot opt source ​              ​destination ​       ​
-ACCEPT ​    ​all ​ --  anywhere ​            ​anywhere ​           ​state RELATED,ESTABLISHED ​ +ACCEPT ​    ​all ​ --  anywhere ​            ​anywhere ​           ​ctstate ​ESTABLISHED
 ACCEPT ​    ​tcp ​ --  anywhere ​            ​anywhere ​           tcp dpt:​ssh ​ ACCEPT ​    ​tcp ​ --  anywhere ​            ​anywhere ​           tcp dpt:​ssh ​
 ACCEPT ​    ​tcp ​ --  anywhere ​            ​anywhere ​           tcp dpt:​www ​ ACCEPT ​    ​tcp ​ --  anywhere ​            ​anywhere ​           tcp dpt:​www ​
Ligne 114: Ligne 120:
 === 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 :
  
Ligne 196: Ligne 202:
  
 ==== Via un fichier ==== ==== Via un fichier ====
 +
 +<note important>​Depuis l'​utilisation du daemon **systemd-networkd**,​ il n'est plus possible de lancer votre script iptables via l'​emplacement **/​etc/​network/​if-pre-up.d/​** de votre Ubuntu. Pour vérifier si vous êtes concerné par cette note, veuillez ouvrir un [[:​terminal]],​ avec pour contenu **pidof systemd-networkd**,​ si vous avez un retour, merci de vous référer au chapitre **3.2.1**.
 +</​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/​**. ​
Ligne 203: Ligne 212:
   #!/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 222: Ligne 231:
  
   sudo iptables -L   sudo iptables -L
 +  ​
 +=== Lancer votre script iptables au démarrage via Systemd ===
 +
 +Pour lancer votre script iptables au démarrage de votre Ubuntu, merci d'​ouvrir un [[:​terminal]],​ avec pour contenu :
 +
 +<code bash>​sudo touch /​lib/​systemd/​system/​firewall.service</​code>​
 +
 +Veuillez éditer ensuite le fichier se trouvant dans **/​lib/​systemd/​system/​firewall.service**,​ avec votre [[:éditeur de texte]] favoris, et y coller :
 +
 +<file bash>
 +[Unit]
 +Description=Firewall
 +Requires=network-online.target
 +After=network-online.target
 +
 +[Service]
 +User=root
 +Type=oneshot
 +RemainAfterExit=yes
 +ExecStart=/​etc/​init.d/​nom_de_votre_script_iptables(modifier_le_nom!) start
 +ExecStop=/​etc/​init.d/​nom_de_votre_script_iptables(modifier_le_nom!) stop
 +
 +[Install]
 +WantedBy=multi-user.target
 +</​file>​
 +
 +Il ne vous reste plus qu'à activer le service **firewall.service**,​ au démarrage de votre Ubuntu, via la commande :
 +
 +<code bash>​sudo systemctl enable firewall.service</​code>​
 +
 +Au prochain redémarrage de votre Ubuntu, votre service **firewall.service** chargera votre script iptables se trouvant dans **/​etc/​init.d/​**.
 +
 +Pour vérifier le statut de votre service **firewall.service**,​ veuillez saisir dans un [[:​terminal]] :
 +
 +<code bash>​systemctl status firewall</​code>​
  
 ===== Script iptables ===== ===== Script iptables =====
Ligne 227: Ligne 271:
 <​note>​Ce script est un exemple, il est à adapter à vos besoins. Il peut toutefois être utilisé pour une utilisation courante, il offre une plutôt bonne "​protection"​ pour un usage desktop.</​note>​ <​note>​Ce script est un exemple, il est à adapter à vos besoins. Il peut toutefois être utilisé pour une utilisation courante, il offre une plutôt bonne "​protection"​ pour un usage desktop.</​note>​
  
-<file bash iptables>​+<code bash iptables>​
  
 #!/bin/bash #!/bin/bash
Ligne 233: Ligne 277:
 iptables-restore < /​etc/​iptables.test.rules iptables-restore < /​etc/​iptables.test.rules
    
-### Script iptables by BeAvEr.+## Script iptables by BeAvEr.
    
 ## Règles iptables. ## Règles iptables.
    
-Flush iptables. +## On flush iptables. 
- +
 iptables -F iptables -F
 iptables -X iptables -X
Ligne 245: Ligne 289:
 iptables -t mangle -F iptables -t mangle -F
 iptables -t mangle -X iptables -t mangle -X
-  + 
-# On drop tout le trafic entrant.+## 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.
    
 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 
-iptables -A OUTPUT -p icmp --icmp-type echo-reply -j DROP 
- 
-# On accepte le Multicast 
- 
-iptables -A INPUT -m pkttype --pkt-type multicast -j ACCEPT 
- 
-# Trafic Samba (Découverte du réseau...) 
    
-iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns +## On drop les scans XMAS et NULL.
- +
-# On drop les scans XMAS et NULL.+
    
-iptables -A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP+iptables -A INPUT -m conntrack --ctstate INVALID ​-p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
  
-iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP+iptables -A INPUT -m conntrack --ctstate INVALID ​-p tcp --tcp-flags ALL ALL -j DROP
    
-iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP+iptables -A INPUT -m conntrack --ctstate INVALID ​-p tcp --tcp-flags ALL NONE -j DROP
    
-iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP+iptables -A INPUT -m conntrack --ctstate INVALID ​-p tcp --tcp-flags SYN,RST SYN,RST -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 307: Ligne 346:
 exit 0 exit 0
  
-</file+</code
  
 ===== Documentations supplémentaires ===== ===== Documentations supplémentaires =====
  
 En anglais : En anglais :
- +  ​* [[https://​www.netfilter.org/​documentation/​HOWTO/​packet-filtering-HOWTO.html| How To Iptables]] 
-  * [[http://​www.fwbuilder.org/​|Firewall Builder : Un outil très performant pour configurer iptables (entre autres)]]  +  * [[https://​www.netfilter.org/​documentation/​|Documentation Multilingue de Netfilter et Iptables]] 
-  ​* [[http://​www.netfilter.org/​documentation/​HOWTO/​packet-filtering-HOWTO.html| How To Iptables]] +  * [[https://​people.netfilter.org/​rusty/​unreliable-guides/​| Rusty'​s Remarkably Unreliable Guides]]
-  * [[http://​www.netfilter.org/​documentation/​|Documentation Multilingue de Netfilter et Iptables]] +
-  * [[http://​people.netfilter.org/​~rusty/​unreliable-guides/​ | Rusty'​s Remarkably Unreliable Guides]] +
-  ​+
  
 En Français : En Français :
- 
-  * [[http://​www.admin-debian.com/​securite/​iptables-et-netfilter/​|Présentation des différentes tables et chaînes d'​Iptables]] ​ FIXME  
   * [[http://​olivieraj.free.fr/​fr/​linux/​information/​firewall/​ |Bible française pour apprendre les bases de la sécurité et d'​Iptables sous Linux]]   * [[http://​olivieraj.free.fr/​fr/​linux/​information/​firewall/​ |Bible française pour apprendre les bases de la sécurité et d'​Iptables sous Linux]]
   * [[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)
-  * [[http://​formation-debian.via.ecp.fr/​firewall.html | Tutoriel de Alexis Delatre (avec fichier iptables tout fait)]] +  * [[https://​memoire-grise-liberee.fr.eu.org|"​Mémoire Grise Libérée"​ : IpTables HowTo]]
-  * [[http://​memoire-grise-liberee.fr.eu.org/IpTables/|"​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.
 ===== Sources ===== ===== Sources =====
  
Ligne 337: Ligne 370:
  
 //​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).//
- 
  • iptables.1552695208.txt.gz
  • Dernière modification: Le 16/03/2019, 01:13
  • par 51.75.71.123