logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

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
Prochaine révision Les deux révisions suivantes
doc:reseau:iptables-pare-feu-pour-une-passerelle [14/10/2014 17:02]
Hypathie [Un pare-feu avancé pour le routeur-debian]
doc:reseau:iptables-pare-feu-pour-une-passerelle [15/10/2014 08:45]
Hypathie [Détail pour les protocole TCP et UDP]
Ligne 10: Ligne 10:
   * Commentaires sur le forum : [[http://​debian-facile.org/​viewtopic.php?​pid=99819#​p99819 | Lien vers le forum concernant ce tuto]] ((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))    * Commentaires sur le forum : [[http://​debian-facile.org/​viewtopic.php?​pid=99819#​p99819 | Lien vers le forum concernant ce tuto]] ((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) 
  
-**Nota : Au programme, description avancée de la table NAT (iptables), et des protocoles ​imcp et tcp (ssh, FTP ... logés) ; pour la mise en place d'un pare-feu iptables sur un système debian faisant office de routeur, muni de deux cartes ethernet. **+**Nota : Au programme, description avancée de la table NAT (iptables), et des protocoles ​ICMP et TCP (ssh, FTP ... logés) ; pour la mise en place d'un pare-feu iptables sur un système debian faisant office de routeur, muni de deux cartes ethernet. **
  
 Contributeurs,​ les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! Contributeurs,​ les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !
Ligne 148: Ligne 148:
 rtt min/​avg/​max/​mdev = 0.338/​0.409/​0.546/​0.098 ms</​code>​ rtt min/​avg/​max/​mdev = 0.338/​0.409/​0.546/​0.098 ms</​code>​
  
 +=)
  
-  *Par contre le ping de l'​ordinateur A (192.168.0.0/​22) vers l'​ordinateur B (192.168.1.0/​22)+  * Par contre le ping de l'​ordinateur A (192.168.0.0/​22) vers l'​ordinateur B (192.168.1.0/​22)
 <code user>​ping 192.168.1.2</​code>​ <code user>​ping 192.168.1.2</​code>​
 <​code>​PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. <​code>​PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
Ligne 155: Ligne 156:
 --- 192.168.1.2 ping statistics --- --- 192.168.1.2 ping statistics ---
 3 packets transmitted,​ 0 received, 100% packet loss, time 1999ms</​code>​ 3 packets transmitted,​ 0 received, 100% packet loss, time 1999ms</​code>​
 +
 +:-|
  
 Et oui, l'​ordinateur A n'est pas derrière la passerelle, et même si sa table de routage est correctement configurée,​ elle ne peut lui indiquer la route vers le sous réseau 192.168.1.0/​24 dont les adresses IP sont, pour tout réseau extérieur au réseau B, y compris le réseau A, identiques à l'IP de la passerelle.\\ ​ Et oui, l'​ordinateur A n'est pas derrière la passerelle, et même si sa table de routage est correctement configurée,​ elle ne peut lui indiquer la route vers le sous réseau 192.168.1.0/​24 dont les adresses IP sont, pour tout réseau extérieur au réseau B, y compris le réseau A, identiques à l'IP de la passerelle.\\ ​
Ligne 192: Ligne 195:
 Pour se l'​éviter,​ il faut un script init.d (update-rc.d)\\ ​ Pour se l'​éviter,​ il faut un script init.d (update-rc.d)\\ ​
 Ne le faites pas sur la passerelle, à la limite sur l'​ordinateur A.\\  Ne le faites pas sur la passerelle, à la limite sur l'​ordinateur A.\\ 
-Sur la passerelle, le suivi de connexion pour le protocole ​imcp devrait être suffisant.\\ ​+Sur la passerelle, le suivi de connexion pour le protocole ​ICMP devrait être suffisant.\\ ​
 Et pour l'​ordinateur A, grâce à la passerelle et à la maîtrise du DNAT/SNAT, on pourrait faire en sorte que l'​ordinateur reçoive un ping de la passerelle quand elle reçoit un ping à destination du réseau B. Et pour l'​ordinateur A, grâce à la passerelle et à la maîtrise du DNAT/SNAT, on pourrait faire en sorte que l'​ordinateur reçoive un ping de la passerelle quand elle reçoit un ping à destination du réseau B.
 </​note>​ </​note>​
Ligne 320: Ligne 323:
 iptables -P OUTPUT ACCEPT iptables -P OUTPUT ACCEPT
 </​code>​ </​code>​
-INPUT et OUTPUT, pour ne pas avoir à répéter ce rappel, plus bas, quand nous mettrons en place les règles ​de ces chaînes INPUT et OUTPUT de la table FILTER.+INPUT et OUTPUT, pour ne pas avoir à répéter ce rappel, plus bas, quand nous mettrons en place les règles ​des chaînes INPUT et OUTPUT de la table FILTER.
  
 **__Et pour redonner accès à internet à l'​ordinateur B.__** **__Et pour redonner accès à internet à l'​ordinateur B.__**
Ligne 559: Ligne 562:
   * Le type ICMP 6 : Alternate Host Address ​   * Le type ICMP 6 : Alternate Host Address ​
 Pour modifier l'​adresse hôte. Pour modifier l'​adresse hôte.
-  * Type IMCP 7 : ceux non-assignés+  * Type ICMP 7 : ceux non-assignés
   * Type ICMP 9 "​Router Advertisement"​ : voir RFC 1256   * Type ICMP 9 "​Router Advertisement"​ : voir RFC 1256
-  * Type IMCP 10 "​Routeur ICMP sollicitation"​ : voir aussi RFC 1256 +  * Type ICMP 10 "​Routeur ICMP sollicitation"​ : voir aussi RFC 1256 
-  * Type IMCP 11 "ICMP Time Exceeded"​ : pour le temps dépassé+  * Type ICMP 11 "ICMP Time Exceeded"​ : pour le temps dépassé
 <​note>​ <​note>​
 **codes**\\ ​ **codes**\\ ​
Ligne 600: Ligne 603:
 Il y a beaucoup plus de types ICMP que cela mais on peut dire que tout ce qui n'est pas expressément autorisé ci-dessus doit être bloqué. Il y a beaucoup plus de types ICMP que cela mais on peut dire que tout ce qui n'est pas expressément autorisé ci-dessus doit être bloqué.
  
-  * Nous allons donc accepter tout ceux-ci et bloquer les autres dans la table NAT:+  * Nous allons donc accepter tout ceux-ci et bloquer les autres dans la chaîne FORWARD ((nous ferons de même concernant ICMP pour les chaînes INPUT et OUTPUT plus bas quand toutes les chaînes de FILTER seront à DROP.)):
 (Nous laissons passer aussi **provisoirement** une ouverture béante pour les chaînes INPUT et OUTP (FILTER) afin de tester tout cela. (Nous laissons passer aussi **provisoirement** une ouverture béante pour les chaînes INPUT et OUTP (FILTER) afin de tester tout cela.
  
Ligne 636: Ligne 639:
 iptables -A FORWARD -s 192.168.1.0/​24 -d 192.168.0.0/​24 -p icmp\ iptables -A FORWARD -s 192.168.1.0/​24 -d 192.168.0.0/​24 -p icmp\
  ​--icmp-type echo-request -j ACCEPT  ​--icmp-type echo-request -j ACCEPT
-#pour le retour nous utilisons la dernière règle+ 
 +Pour le retour nous utilisons la dernière règle
 iptables -A FORWARD -s 192.168.0.0/​24 -d 192.168.1.0/​24 -p icmp\ iptables -A FORWARD -s 192.168.0.0/​24 -d 192.168.1.0/​24 -p icmp\
  ​--icmp-type echo-reply -j DROP  ​--icmp-type echo-reply -j DROP
 +
 #On remets "​masquerade"​ car on a flushé: #On remets "​masquerade"​ car on a flushé:
 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
 </​code>​ </​code>​
 ====DROP sur INPUT et OUTPUT (chaîne filter) ==== ====DROP sur INPUT et OUTPUT (chaîne filter) ====
-À l'​étape suivante, il va falloir interdire (DROP) les chaînes INPUT et OUTPUT de la table FILTER pour tous les protocoles dont on a besoin.\\  +Cette fois, il va falloir interdire (DROP) les chaînes INPUT et OUTPUT de la table FILTER pour tous les protocoles dont on a besoin.\\  
-Mais on en finit d'​abord ​avec IMCP qu'on laisse entrer et sortir (INPUTOUTPUT) ​ce qu'on n'a laissé passer par FORWARD.+D'​abord ​pour ICMP qu'​on ​ne laisse ​plus massivement ​entrer et sortir (table FILTER à DROP pour INPUT et OUTPUT, en plus de FORWARD).\\ Attention l'ordre des règles pour IMCP sur INPUT, OUTPUT et FORWARD, comptes ici.
  
-On conserve ce qu'on a fait précédemment ​et on ajoute provisoirement ​les commandes du [[atelier:​chantier:​iptables-pare-feu-pour-un-client#​pour-les-fadas-du-scripting-shell|script pour station ​du LAN]] des autres protocoles pour la table FILTER (INPUT et OUTPUT envoyés à DROP).+On conserve ce qu'on a fait précédemment ​en ajoutant ​les commandes du [[atelier:​chantier:​iptables-pare-feu-pour-un-client#​pour-les-fadas-du-scripting-shell|script pour un client ​du LAN]] mais en tenant compte du fait qu'il y a cette fois deux interfaces réseau.
  
 <code root> <code root>
Ligne 675: Ligne 680:
 iptables -A OUTPUT -o eth1 -j ACCEPT iptables -A OUTPUT -o eth1 -j ACCEPT
  
-#On garde nos règles concernant le DROP sur FORWARD (FILTER) +# On garde nos règles concernant le DROP sur FORWARD (FILTER) 
-#mais on oublie pas eth1 !+et on oublie pas eth1 !
 iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/​24\ iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/​24\
  -d 0.0.0.0/0 -p tcp -m state --state NEW,​ESTABLISHED,​RELATED -j ACCEPT  -d 0.0.0.0/0 -p tcp -m state --state NEW,​ESTABLISHED,​RELATED -j ACCEPT
Ligne 723: Ligne 728:
  
  
-# Les règles ​imcp pour OUTPUT et INPUT +# Les règles ​ICMP pour OUTPUT et INPUT 
 #(en y intégrant celles de testées pour FORWARD) #(en y intégrant celles de testées pour FORWARD)
  
Ligne 762: Ligne 767:
 iptables -A FORWARD -s 192.168.1.0/​24 -d 192.168.0.0/​24 -p icmp\ iptables -A FORWARD -s 192.168.1.0/​24 -d 192.168.0.0/​24 -p icmp\
  ​--icmp-type echo-request -j ACCEPT  ​--icmp-type echo-request -j ACCEPT
-#pour le retour nous utilison ​la derniere regle+ 
 +Pour le retour nous utilisons ​la dernière règle
 iptables -A FORWARD -s 192.168.0.0/​24 -d 192.168.1.0/​24 -p icmp\ iptables -A FORWARD -s 192.168.0.0/​24 -d 192.168.1.0/​24 -p icmp\
  ​--icmp-type echo-reply -j DROP  ​--icmp-type echo-reply -j DROP
Ligne 771: Ligne 777:
  
 On est content, l'​ordination B peut naviguer sur internet et les pings sont fonctionnels : On est content, l'​ordination B peut naviguer sur internet et les pings sont fonctionnels :
-  * de l'​ordinateur A vers B((on n'​oublie sa table de routage (en root)\\ ''​route add -net 192.168.1.0 gw 192.168.0.1 netmask 255.255.255.0 dev eth0''​))+  * De l'​ordinateur A vers B((on n'​oublie sa table de routage (en root)\\ ''​route add -net 192.168.1.0 gw 192.168.0.1 netmask 255.255.255.0 dev eth0''​))
 <code user>​ping 192.168.1.2</​code>​ <code user>​ping 192.168.1.2</​code>​
 <​code>​ <​code>​
Ligne 803: Ligne 809:
 Allez, il reste encore qu'une étape 8-o\\ Allez, il reste encore qu'une étape 8-o\\
  
-Il faut revenir sur les règles INPUT et OUTPUT que nous avons récupéré ​provisoirement du [[atelier:​chantier:​iptables-pare-feu-pour-un-client#​pour-les-fadas-du-scripting-shell| script pour une station du LAN]].\\ Pour la passerelle on va affiner le filtrage des règles concernant TCP et UDP.\\ Ce sera l'​occasion de mettre en place des règles pour le protocole FTP que nous n'​avons pas encore abordé.+Il faut revenir sur les règles INPUT et OUTPUT que nous avons récupérée ​provisoirement du [[atelier:​chantier:​iptables-pare-feu-pour-un-client#​pour-les-fadas-du-scripting-shell| script pour une station du LAN]].\\ Pour la passerelle on va affiner le filtrage des règles concernant TCP et UDP.\\ Ce sera l'​occasion de mettre en place des règles pour le protocole FTP que nous n'​avons pas encore abordé.
  
 Nous aurons besoin pour cela d'un rappel sur le fonctionnement du protocole TCP Nous aurons besoin pour cela d'un rappel sur le fonctionnement du protocole TCP
Ligne 901: Ligne 907:
 Tenons compte de ces rappels, pour ajouter une connexion FTP et SSH loggées, et puisqu'​on y est un petit filtrage supplémentaire au niveau des Flags TCP. Tenons compte de ces rappels, pour ajouter une connexion FTP et SSH loggées, et puisqu'​on y est un petit filtrage supplémentaire au niveau des Flags TCP.
  
-<​code ​text firewall_gateway.sh>​+<​code ​bash firewall_gateway.sh>​
 #!/bin/sh #!/bin/sh
 ### BEGIN INIT INFO ### BEGIN INIT INFO
Ligne 1004: Ligne 1010:
    
    
-# Les règles ​imcp pour OUTPUT ​ INPUT et FORWARD+# Les règles ​ICMP pour OUTPUT ​ INPUT et FORWARD
    
 /​sbin/​iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT /​sbin/​iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
Ligne 1110: Ligne 1116:
 </​code>​ </​code>​
  
-Et voilà, pour l'​installation,​ suivre la même méthode que pour [[atelier:​chantier:​iptables-pare-feu-pour-un-client#​firewall-clientsh-comme-script-init|firewall-client comme script init]]. ​ ^_^+====Le cas du serveur DHCP ==== 
 +===Aurions-nous oublié une règle pour DHCP ?=== 
 +Rassurez-vous,​ il est inutile d'​ouvrir les ports UDP (67, 68) pour que le serveur DHCP installé sur cette passerelle puisse continué d'​attribuer des IP à notre réseau B. 
 + 
 +  * "Ne pas ajouter de règle aveuglément !" 
 +Voici une autre maxime à laquelle il faudra se tenir. 
 + 
 +On voit dans de nombreux wiki l'​ajout aberrant de cette règle :\\  
 +''​IPTABLES ​ -I INPUT -i <​interface-interne>​ -p udp --dport 67:68 --sport 67:68 -j ACCEPT''​\\ 
 + 
 +Nous ne l'​ajouterons pas !  
 + 
 +  * Dans notre script nous avons mis en effet : 
 +<code root>​iptables -A INPUT -i eth1 -j ACCEPT 
 +iptables -A OUTPUT -o eth1 -j ACCEPT</​code>​ 
 + 
 +Et nous allons à apprendre pour finir, une technique pour n'​ajouter une règle que si elle fait réellement défaut. Il s'agit de l'​outil tcpdump. 
 + 
 +===Utiliser tcpdump=== 
 +  * On l'​installe : 
 +<code root>​apt-get install tcpdump</​code>​ 
 + 
 +  * Puis on lance sur le serveur : 
 +<code root>​tcpdump -i eth1 port 67 or port 68</​code>​ 
 + 
 +Rien ne se passe... et c'est normal !\\  
 + 
 +Pour voir quelque chose, il faut générer du flux depuis le client du réseau B.\\ 
 +On laisse le terminal (de la passerelle) en état d'​attente,​ et on passe sur le terminal du client B. 
 + 
 +  * Côté client DHCP (ordinateur B) : 
 + 
 + -On commence par annuler le bail DHCP.\\ Comme ceci : 
 + 
 +<code root> 
 +dhclient -r eth0 
 +</​code>​ 
 + 
 + 
 + -Il n'y a plus d'IP : 
 +<code root>​eth0 ​     Link encap:​Ethernet ​ HWaddr 00:​1e:​0b:​67:​9b:​b7 ​  
 +          adr inet6: xxxxxxxxxxxx Scope:​Lien</​code>​ 
 + 
 + - On lance une requête DHCP 
 +<code root> 
 +dhclient eth0 
 +</​code>​ 
 + 
 +Observez ce que nous dit "​tcpdump"​ (dans le terminal de la passerelle) au lancemant de la commande\\ ''​dhclient eth0''​ sur l'​ordinateur B (client DHCP) : 
 + 
 +<​code>​ 
 +tcpdump: verbose output suppressed, use -v or -vv for full 
 + ​protocol decode listening on eth1, link-type EN10MB (Ethernet),  
 +capture size 65535 bytes 07:​47:​00.535348  
 +IP 0.0.0.0.bootpc > 255.255.255.255.bootps:​ BOOTP/​DHCP,​ 
 + ​Request from xx:​xx:​xx:​xx:​xx:​xx (oui Unknown), length 300 
 +07:​47:​00.535553 IP debian-serveur.mondomaine.hyp.bootps >  
 +debian-hp.local.bootpc:​ BOOTP/DHCP, Reply, length 302 
 +07:​47:​00.535745 IP 0.0.0.0.bootpc >  
 +255.255.255.255.bootps:​ BOOTP/DHCP, Request from xx:​xx:​xx:​xx:​xx:​xx 
 + (oui Unknown), length 300 
 +07:​47:​00.626390 IP debian-serveur.mondomaine.hyp.bootps 
 + > debian-hp.local.bootpc:​ BOOTP/DHCP, Reply, length 302 
 +^C 
 +4 packets captured 
 +4 packets received by filter 
 +</​code>​ 
 + 
 +- Et en plus l'IP de l'​ordinateur B a bien changé ! 
 + 
 +<​code>​INET_IP=`ifconfig $INET_IFACE | grep inet | \ 
 +cut -d : -f 2 | cut -d ' ' -f 1` && echo $INET_IP</​code>​ 
 +<code root>​192.168.1.4 127.0.0.1</​code>​ 
 + 
 +<note tip> 
 +**__Comme promis un petit rappel sur tcpdump.__**\\  
 + 
 +(//Tout se lance en root//) 
 + 
 +  * Affichage standard: ''​tcpdump''​ 
 +  * Affichage verbeux (verbose): ''​tcpdump -v''​ 
 +  * Interfaces réseaux disponibles pour la capture: ''​tcpdump -D''​ 
 +  * Affichage des adresses numériques((plutôt que des adresses symboliques (DNS))): ''​tcpdump -n''​ 
 +  * Affichage rapide: ''​tcpdump -q''​ 
 +  * Capture du traffic d'une interface particulière:​ ''​tcpdump -i eth1''​ 
 +  * Capture du trafic UDP: ''​tcpdump udp''​ 
 +  * Capture du trafic du port TCP 80: ''​tcpdump port http''​ 
 +  * Capture du trafic à partir d'un fichier stocké dans un fichier: ''​tcpdump -F file_name''​ 
 +  * Envoi du résultat dans un fichier à la place de directement à l'​écran:​\\ ''​tcpdump -w capture.log''​ 
 +  * Lecture d'un fichier de capture: ''​tcpdump -r capture.log''​ 
 +  * Arrêter la capture après n paquets : ''​tcpdump -c n''​((où ''​n''​ est un nombre, 10 par exemple)) 
 + 
 +**Pour aller plus loin : ''​man tcpdump''​**. 
 +</​note>​ 
 + 
 +Et voilà, ​c'est fini ! Il en va de même pour cups, si vous l'avez installé sur cette passerelle, l'​ordinateur B pourra en profiter avec ce script sans ajouter de règle côté serveur.\\  
 + 
 +Pour l'​installation ​du script, suivre la même méthode que pour [[atelier:​chantier:​iptables-pare-feu-pour-un-client#​firewall-clientsh-comme-script-init|firewall-client comme script init]]. ​ ^_^
  
 +La suite concernera le DNAT et SNAT, pour un serveur web apache installé sur un client du réseau B, et enfin, l'​installation sur cette passerelle d'un proxy transparent pour l'​ensemble su réseau B.
  
  
  
doc/reseau/iptables-pare-feu-pour-une-passerelle.txt · Dernière modification: 01/11/2015 18:20 par milou

Pied de page des forums

Propulsé par FluxBB