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 13/04/2010, 13:38]
213.95.41.13
iptables [Le 02/01/2021, 11:05] (Version actuelle)
92.141.190.18 [Configuration du pare-feu] explication de la commande
Ligne 1: Ligne 1:
-{{tag>​pare-feu sécurité réseau ​BROUILLON}} +{{tag>​pare-feu sécurité réseau}} 
 +{{ /​iptables.jpg?​340nolink| Iptables}}
 ---- ----
-====== Netfilter & Iptables ====== 
  
-Netfilter est un module du noyau Linux (depuis les branches 2.4 et 2.6) qui offre la possibilité de contrôler, modifier et filtrer les paquets IP, et de suivre les connexions. Il fournit ainsi les fonctions de pare-feu, de partage de connexions internet et d'​autorisation du trafic réseau. +=====Iptables=====
-Iptables ​est l'​interface "ligne de commande"​ permettant de configurer Netfilter.+
  
-Ce document contient les informations de base à propos de iptables, pour ceux qui souhaitent mettre en place un firewall et/ou un partage de connexion sans passer par une interface graphique. Les lecteurs désirant approfondir leur recherche trouveront des dizaines de tutoriels sur iptables & netfilter. 
  
-<note tip> +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** existe aussi pour l'**ipv6**, pour cela il suffit d'​utiliser la commande ​**ip6tables** au lieu de **iptables** + 
-</​note>​+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. 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
 + 
 +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,​ au minima connaître le principe de fonctionnement des protocoles TCP et UDP. 
  
-===== Firewall ​=====+===== Configuration du pare-feu ​=====
  
-Nous allons configurer notre firewall ​de la manière suivante :+Nous allons configurer notre [[:​pare-feu]] ​de la manière suivante :
   * On bloque tout le trafic entrant par défaut.   * On bloque tout le trafic entrant par défaut.
   * On autorise au cas par cas : le trafic appartenant ou lié à des connexions déjà établies et le trafic à destination des serveurs (web, ssh, etc.) que nous souhaitons mettre à disposition.   * On autorise au cas par cas : le trafic appartenant ou lié à des connexions déjà établies et le trafic à destination des serveurs (web, ssh, etc.) que nous souhaitons mettre à disposition.
Ligne 21: Ligne 25:
 Afin de ne pas avoir de problème au moment où on crée ces règles, nous allons d'​abord créer les autorisations,​ puis nous enverrons le reste en enfer. Afin de ne pas avoir de problème au moment où on crée ces règles, nous allons d'​abord créer les autorisations,​ puis nous enverrons le reste en enfer.
  
-En tapant « ''​sudo iptables -L''​ », une liste de vos règles actuelles est affichée. Si vous (ou un logiciel) n'avez encore jamais touché à //​iptables//,​ les chaines ​sont vides, et vous devriez voir :+En tapant « ''​sudo iptables -L''​ », une liste de vos règles actuelles est affichée. Si vous (ou un logiciel) n'avez encore jamais touché à //​iptables//,​ les chaînes ​sont vides, et vous devriez voir :
 <​code>​ <​code>​
 Chain INPUT (policy ACCEPT) Chain INPUT (policy ACCEPT)
Ligne 35: Ligne 39:
 Pour l'​instant,​ tout passe dans toutes les directions (//policy ACCEPT//). Pour l'​instant,​ tout passe dans toutes les directions (//policy ACCEPT//).
 Pour cette configuration basique, seul le trafic entrant (chaine //input//) nous intéresse. Pour cette configuration basique, seul le trafic entrant (chaine //input//) nous intéresse.
 +
 +Par défaut, « ''​sudo iptables -L''​ » n'​affiche que la table "​filter"​. Pour consulter les autres tables, vous devez ajouter l'​option -t suivie de "​nat",​ "​mangle"​ ou "​raw"​. Pour la configuration d'un [[:​pare-feu]] la table "​filter"​ est toutefois la seule nécessaire.
 +
 +<note warning>​ATTENTION,​ si vous avez modifié la règle par défaut pour le blocage (iptables -P INPUT DROP  voir plus bas) et que vous tapez iptables -F vous bloquerez tous les accès ... y compris celui en cours. Ceci est particulièrement problématique ​ sur  une machine sur laquelle vous accédez à distance (serveur etc.).</​note>​
  
 Si vous avez déjà modifié la configuration et que vous voulez la réinitialiser,​ tapez : Si vous avez déjà modifié la configuration et que vous voulez la réinitialiser,​ tapez :
Ligne 41: Ligne 49:
 sudo iptables -X sudo iptables -X
 </​code>​ </​code>​
-<note warning>​ATTENTION,​ si vous avez modifié la règle par defaut pour le blocage (iptables -P INPUT DROP  voir plus bas) et que vous tapez iptables -F vous bloquerez tous les accès ... y compris celui en cours ...</​note>​ 
  
 === Autoriser le trafic entrant d'une connexion déjà établie === === Autoriser le trafic entrant d'une connexion déjà établie ===
Ligne 47: Ligne 54:
 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 state --state ESTABLISHED,​RELATED ​-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>
 +Une ancienne configuration avec l'​état "​--state RELATED"​ est toujours sur internet, or cette option peut permettre l'​ouverture de port non désirée sur votre machine par un attaquant. L'​option "​RELATED"​ est à utiliser avec prudence. Pour plus d'​information :
 +https://​gist.github.com/​azlux/​6a70bd38bb7c525ab26efe7e3a7ea8ac
 +</​note>​
 +
  
 === Permettre le trafic entrant sur un port spécifique === === Permettre le trafic entrant sur un port spécifique ===
Ligne 56: Ligne 70:
 # iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT # iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT
 </​code>​ </​code>​
-Cette commande ajoute une règle (''​-A''​) à la chaine ​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).
  
 Maintenant vous pouvez vérifier vos règles iptables : Maintenant vous pouvez vérifier vos règles iptables :
Ligne 63: Ligne 77:
 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 77: Ligne 91:
 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 87: Ligne 101:
  
 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 chaine ​//INPUT// : cette décision (//DROP//) s'​applique ​lorsqu'​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.
  
 <​code>​ <​code>​
-# iptables -P INPUT DROP+# iptables -P INPUT DROP #warning : a ne pas utiliser sur un serveur distant !
 # iptables -L # iptables -L
 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 ​
 </​code>​ </​code>​
  
-**Un autre moyen de procéder** est l'​ajout en fin de chaine ​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.
  
 === Autoriser le trafic local === === Autoriser le trafic local ===
Ligne 120: Ligne 134:
 <​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 state --state NEW,​ESTABLISHED,​RELATED -j ACCEPT+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 : 
 +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 iptables -A INPUT -p icmp -j ACCEPT
 </​code>​ </​code>​
 +
 +=== Supprimer une règle ===
 +
 +Si vous vous êtes trompé dans la création d'une règle et que cela vous bloque une connexion, vous pouvez supprimer une seule entrée plutôt que de tout réinitialiser.
 +
 +Tout d'​abord vous listez l'​ensemble de vos règles avec l'​affichage des lignes :
 +<​code>​
 +iptables -L --line-numbers
 +</​code>​
 +Ce qui personnellement me retourne :
 +<​code>​
 +Chain INPUT (policy DROP)
 +num  target ​    prot opt source ​              ​destination
 +1    DROP       icmp --  anywhere ​            ​anywhere
 +2    ACCEPT ​    ​tcp ​ --  anywhere ​            ​anywhere ​           tcp dpt:ssh
 +3    ACCEPT ​    ​tcp ​ --  anywhere ​            ​anywhere ​           tcp dpt:www
 +4    ACCEPT ​    ​tcp ​ --  anywhere ​            ​anywhere ​           tcp dpt:webmin
 +
 +Chain FORWARD (policy ACCEPT)
 +num  target ​    prot opt source ​              ​destination
 +
 +Chain OUTPUT (policy ACCEPT)
 +num  target ​    prot opt source ​              ​destination
 +1    ACCEPT ​    ​tcp ​ --  anywhere ​            ​anywhere ​           tcp spt:www
 +2    ACCEPT ​    ​tcp ​ --  anywhere ​            ​anywhere ​           tcp spt:12345
 +</​code>​
 +
 +Je souhaite supprimer la ligne 2 de la chaîne OUTPUT
 +
 +Syntaxe : iptables -D chaîne numéro_de_ligne
 +
 +<​code>​
 +iptables -D OUTPUT 2
 +</​code>​
 +
 +
 +=== Sauvegarder vos règles ===
 +
 +Passer en mode superutilisateur
 +
 +<​code>​
 +sudo -s iptables-save -c
 +</​code>​
 +
 ===== Appliquer les règles au démarrage ===== ===== Appliquer les règles au démarrage =====
 +
 +==== Via iptables-persistent ====
  
 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.
  
-Commencez par éditer un fichier en root, que vous enregistrerez sous **/etc/init.d/​monIptables**. La première ligne de ce fichier doit être :+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 :
  
-  ​#!/bin/bash+  ​service iptables-persistent
  
-<note important>​Si vous vous êtes servi de WebMin ​pour créer vos règles ​de bases Le fichier à éditer ​pour vos règles de FireWall est **///etc/iptables.up.rules//**</note>+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. 
 + 
 +==== 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/**.  
 + 
 +La première ligne de ce fichier doit être : 
 + 
 +  #!/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 enregistré en tant que [[:​tutoriel:​script_shell|script bash]].
 +
 +Ajoutez ensuite à votre script ceci : 
 +
 +  iptables-restore < /​etc/​iptables.test.rules
  
 Le reste du fichier doit contenir les commandes //​iptables//​ que vous avez générées. Le reste du fichier doit contenir les commandes //​iptables//​ que vous avez générées.
  
-Rendez ce script ​exécutable ​:+Déplacez le script ​iptables dans /​etc/​network/​if-pre-up.d/ ​:
  
-  sudo chmod +x /etc/init.d/monIptables+  sudo mv /​emplacement/​du/​script/​iptables ​/etc/network/​if-pre-up.d/
  
-Pour indiquer à votre ordinateur de l'​utiliser au démarrage, 2 solutions ​:+Rendez ce script exécutable ​:
  
-  sudo update-rc.d monIptables defaults+  sudo chmod +x /​etc/​network/​if-pre-up.d/iptables
  
-**OU alors**, rajoutez dans le fichier **/etc/rc.local** la ligne :+Cela devrait être bonAu prochain redémarrage,​ vous pouvez vérifier que vos règles sont bien utilisées, en effectuant ​:
  
-  ​/​etc/​init.d/​monIptables+  ​sudo iptables -L 
 +   
 +=== Lancer votre script iptables au démarrage via Systemd ===
  
-juste avant **exit 0**.+Pour lancer votre script iptables au démarrage de votre Ubuntu, merci d'​ouvrir un [[:​terminal]],​ avec pour contenu :
  
-Ça devrait être bonAu prochain redémarrage,​ vous pouvez vérifier que vos règles sont bien utilisées, en effectuant :+<code bash>​sudo touch /​lib/​systemd/​system/​firewall.service</​code>​
  
-  sudo iptables -L+Veuillez éditer ensuite le fichier se trouvant dans **/​lib/​systemd/​system/​firewall.service**,​ avec votre [[:éditeur de texte]] favoris, et y coller :
  
-=== Script iptables ===+<file bash> 
 +[Unit] 
 +Description=Firewall 
 +Requires=network-online.target 
 +After=network-online.target
  
-<note tip>Ce script est juste un exemple,ce script peut-être utilisé pour une utilisation courante,il offre plutôt une bonne "​protection."</note>+[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
  
-<code bash> +[Install] 
-#!/bin/bash+WantedBy=multi-user.target 
 +</file>
  
-# Script iptables by BeAvEr. +Il ne vous reste plus qu'à activer le service **firewall.service**, au démarrage de votre Ubuntu, via la commande :
-  +
-## Règles iptables.+
  
-/sbin/​iptables -A INPUT -m state --state ESTABLISHED,​RELATED -j ACCEPT +<code bash>​sudo systemctl enable firewall.service<​/code>
-  +
-/​sbin/​iptables -I INPUT 2 -i lo -j ACCEPT +
-  +
-/​sbin/​iptables -P INPUT DROP +
-  +
-/​sbin/​iptables -P FORWARD DROP+
  
-/sbin/iptables -t nat -I PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP+Au prochain redémarrage de votre Ubuntu, votre service **firewall.service** chargera votre script iptables se trouvant dans **/etc/init.d/**.
  
-## Sécurité.+Pour vérifier le statut de votre service **firewall.service**, veuillez saisir dans un [[:​terminal]] :
  
-# Ignore 'ICMP Redirects'​ message,si vous êtes en IPV6 remplacer le chemin absolu ​/proc/​sys/​net/​ipv4 par /​proc/​sys/​net/​ipv6. +<code bash>​systemctl status firewall<​/code>
-echo "​0" ​/​proc/​sys/​net/​ipv4/​conf/​all/​accept_redirects+
  
-# Ignore 'ICMP Echo Request'​ message,si vous êtes en IPV6 remplacer le chemin absolu /​proc/​sys/​net/​ipv4 par /​proc/​sys/​net/​ipv6. +===== Script iptables =====
-echo "​1"​ > /​proc/​sys/​net/​ipv4/​icmp_echo_ignore_broadcasts +
-echo "​1"​ > /​proc/​sys/​net/​ipv4/​icmp_echo_ignore_all+
  
-# Ignore 'ICMP Bogus Response'​ message,si vous êtes en IPV6 remplacer le chemin absolu /​proc/​sys/​net/​ipv4 par /​proc/​sys/​net/​ipv6. +<​note>​Ce script est un exempleil est à adapter à vos besoinsIl peut toutefois être utilisé pour une utilisation courante, il offre une plutôt bonne "protection" ​pour un usage desktop.</​note>
-echo "1" > /​proc/​sys/​net/​ipv4/​icmp_ignore_bogus_error_responses+
  
-# Interdire '​Source Routing',​si vous êtes en IPV6 remplacer le chemin absolu /​proc/​sys/​net/​ipv4 par /​proc/​sys/​net/​ipv6. +<code bash iptables>
-echo "​0" ​/​proc/​sys/​net/​ipv4/​conf/​all/​accept_source_route+
  
-Surveiller '​martians'​ '​adresse source falsifée ou non routable.'​ Elle permet de dénommé les paquets sur le réseau ayant sources/destinations invalides.Si vous êtes en IPV6 remplacer le chemin absolu ​/proc/​sys/​net/​ipv4 par /​proc/​sys/​net/​ipv6.  +#!/bin/bash
-echo "​1"​ > /​proc/​sys/​net/​ipv4/​conf/​all/​log_martians+
  
-# Se protéger de l'IP Spoofing. '​L'​usurpation d'​adresse IP est une technique utilisée en informatique qui consiste à envoyer des paquets IP en utilisant une adresse IP source qui n'a pas été attribuée à l'​ordinateur qui les émet',​si vous êtes en IPV6 remplacer le chemin absolu ​/proc/sys/​net/​ipv4 par /​proc/​sys/​net/​ipv6+iptables-restore < /etc/iptables.test.rules 
-echo "​1"​ > /​proc/​sys/​net/​ipv4/​conf/​all/​rp_filter+  
 +## Script iptables by BeAvEr. 
 +  
 +## Règles iptables. 
 +  
 +## On flush iptables.
  
-# Se protéger des attaques 'SYN Flood'​. Le SYN Flood est une attaque informatique visant à atteindre un déni de service,si vous êtes en IPV6 remplacer le chemin absolu /​proc/​sys/​net/​ipv4 par /​proc/​sys/​net/​ipv6. +iptables -F 
-echo "​1"​ > /​proc/​sys/​net/​ipv4/​tcp_syncookies+iptables -X 
 +iptables -t nat -F 
 +iptables -t nat -X 
 +iptables -t mangle -F 
 +iptables -t mangle -X
  
-Se protéger du TCP Syn Flood. +## On drop les requêtes ICMP (votre machine ne répondra plus aux requêtes ping sur votre réseau local).
-/​sbin/​iptables -A INPUT -i eth0 -p tcp --syn -m limit --limit 3/s -j ACCEPT+
  
-# Se protéger du UDP Syn Flood. +iptables -A INPUT -p icmp --icmp-type echo-request -j DROP 
-/sbin/iptables -A INPUT -i eth0 -p udp -m limit --limit 10/s -j ACCEPT+iptables -A OUTPUT ​-p icmp --icmp-type echo-reply -j DROP
  
-Ignorer les broadcast ICMP,si vous êtes en IPV6 remplacer ​le chemin absolu /​proc/​sys/​net/​ipv4 par /​proc/​sys/​net/​ipv6. +## On accepte ​le Multicast.
-echo "​1"​ > /​proc/​sys/​net/​ipv4/​icmp_echo_ignore_broadcasts+
  
-# Ne pas accepter les redirections ICMP,si vous êtes en IPV6 remplacer le chemin absolu /​proc/​sys/​net/​ipv4 par /​proc/​sys/​net/​ipv6. +iptables -A INPUT -m pkttype --pkt-type multicast -j ACCEPT
-echo "​0"​ > /​proc/​sys/​net/​ipv4/​conf/​all/​accept_redirects+
  
-Ne pas accepter ​le renvoi des redirections ICMP,si vous êtes en IPV6 remplacer ​le chemin absolu /​proc/​sys/​net/​ipv4 par /​proc/​sys/​net/​ipv6+## On drop tout le trafic entrant. 
-echo "​0"​ > /​proc/​sys/​net/​ipv4/​conf/​all/​send_redirects+  
 +iptables -P INPUT DROP 
 +  
 +## On drop tout le trafic sortant
 +  
 +iptables -P OUTPUT DROP 
 +  
 +## On drop le forward. 
 +  
 +iptables -P FORWARD DROP 
 +  
 +## On drop les scans XMAS et NULL. 
 +  
 +iptables -A INPUT -m conntrack --ctstate INVALID -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
  
-# À pars d'​être un passerelleon refuse de router les paquets sources,si vous êtes en IPV6 remplacer le chemin absolu /​proc/​sys/​net/​ipv4 par /​proc/​sys/​net/​ipv6. +iptables -A INPUT -m conntrack --ctstate INVALID -p tcp --tcp-flags ALL ALL -j DROP 
-echo "​0"​ > /​proc/​sys/​net/​ipv4/​conf/​all/​accept_source_route+  
 +iptables -A INPUT -m conntrack --ctstate INVALID -p tcp --tcp-flags ALL NONE -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.
 +
 +iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP
 +  ​
 +## Permettre à une connexion ouverte de recevoir du trafic en entrée.
 + 
 +iptables -A INPUT -m conntrack --ctstate ESTABLISHED,​RELATED -j ACCEPT
 + 
 +## Permettre à une connexion ouverte de recevoir du trafic en sortie.
 + 
 +iptables -A OUTPUT -m conntrack ! --ctstate INVALID -j ACCEPT
 + 
 +## On accepte la boucle locale en entrée.
 + 
 +iptables -I INPUT -i lo -j ACCEPT
 + 
 +## On log les paquets en entrée.
 + 
 +iptables -A INPUT -j LOG
 + 
 +## On log les paquets forward.
 + 
 +iptables -A FORWARD -j LOG 
 + 
 exit 0 exit 0
  
 </​code> ​ </​code> ​
  
-===== Informations ​supplémentaires =====+===== Documentations ​supplémentaires =====
  
 En anglais : En anglais :
- 
-  * [[http://​www.fwbuilder.org/​|Firewall Builder : Un outil très performant pour configurer iptables (entre autres)]] 
   * [[http://​www.netfilter.org/​documentation/​HOWTO/​packet-filtering-HOWTO.html| How To Iptables]]   * [[http://​www.netfilter.org/​documentation/​HOWTO/​packet-filtering-HOWTO.html| How To Iptables]]
   * [[http://​www.netfilter.org/​documentation/​|Documentation Multilingue de Netfilter et Iptables]]   * [[http://​www.netfilter.org/​documentation/​|Documentation Multilingue de Netfilter et Iptables]]
-  * [[http://​people.netfilter.org/​~rusty/​unreliable-guides/​ | Rusty'​s Remarkably Unreliable Guides]] +  * [[http://​people.netfilter.org/​rusty/​unreliable-guides/​| Rusty'​s Remarkably Unreliable Guides]]
-  ​+
  
 En Français : En Français :
-  * [[http://doc.ubuntu-fr.org/ufw]] +  * [[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://www.frozentux.net/documents/​iptables-tutorial/​|Tutoriel Iptables]] +  * [[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://www.nbs-system.com/dossiers/howto-iptables.htmlIPtables HOWTO français]] +  * [[https://memoire-grise-liberee.fr.eu.org|"​Mémoire Grise Libérée"​ : IpTables HowTo]] 
-  * [[http://olivieraj.free.fr/​fr/​linux/​information/​firewall/ ​|Bible française pour apprendre les bases de la sécurité sous Linux]] +  * [[http://​www.inetdoc.net/guides/iptables-tutorial/|iptables-tutorial ​de Oskar Andreasson traducteur Marc Blanc et publié par Philippe Latu]] 
-  * [[http://​www.labo-linux.org/articles-fr/iptables-par-l-exemple/les-bases ​Tutorial Labo-Linux de l'​école SUPINFO]] +  * [[http://www.it-connect.fr/supprimer-une-regle-precise-dans-iptables/|Supprimer une règle précise sous Iptables]] sur IT-Connect.fr 
-  * [[http://formation-debian.via.ecp.fr/firewall.html | Superbe Tutorial de Alexis Delatre (avec fichier ​iptables ​tout fait)]] +  * [[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.
-  * [[http://memoire-grise-liberee.fr.eu.org/​IpTables/​|"​Mémoire Grise Libérée"​ : IpTables HowTo]] +
 ===== Sources ===== ===== Sources =====
  
Ligne 250: Ligne 367:
  
  
-//​Contributeurs : [[utilisateurs:​Kmeleon]],​ [[utilisateurs:​eks]],​[[utilisateurs:​BeAvEr]].//​+//​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.1271158680.txt.gz
  • Dernière modification: Le 13/04/2010, 13:38
  • par 213.95.41.13