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 [15/10/2014 05:39]
Hypathie [Un pare-feu avancé pour le routeur-debian]
doc:reseau:iptables-pare-feu-pour-une-passerelle [15/11/2014 08:18]
Hypathie [Les règles du pare-feu pas à pas]
Ligne 205: Ligne 205:
 La traduction d'​adresse est gérée avec les chaînes PREROUTING, POSTROUTING et OUTPUT.\\ ​ La traduction d'​adresse est gérée avec les chaînes PREROUTING, POSTROUTING et OUTPUT.\\ ​
  
-Dans la chaîne PREROUTING (avant routage), on peut modifier l'​adresse de destination des paquets qui arrivent sur notre passerelle mais qui doivent aller sur le réseau B. S'ils ne lui sont pas destiné, et qu'au niveau de la passerelle on détermine une redirection pour l'​hôte de notre choix, ce serait là faire du DNAT (du "NAT destination"​).\\+**Dans la chaîne PREROUTING** (avant routage), on peut modifier l'​adresse de destination des paquets qui arrivent sur notre passerelle mais qui doivent aller sur le réseau B. S'ils ne lui sont pas destiné, et qu'au niveau de la passerelle on détermine une redirection pour l'​hôte de notre choix, ce serait là faire du DNAT (du "NAT destination"​).\\
  
-Dans la chaîne POSTROUTING,​ (après routage), on peut modifier l'​adresse source ; celle des hôtes du réseau B, ou d'une seul hôte du réseau B, la passerelle pourrait aussi d'​indiquer au réseau A une autre adresse pour l'​ordinateur que celle qui est véritablement la sienne. Ce serait là faire du SNAT (NAT source).\\+**Dans la chaîne POSTROUTING**, (après routage), on peut modifier l'​adresse source ; celle des hôtes du réseau B, ou d'une seul hôte du réseau B, la passerelle pourrait aussi d'​indiquer au réseau A une autre adresse pour l'​ordinateur que celle qui est véritablement la sienne. Ce serait là faire du SNAT (NAT source).\\
  
-Dans la chaîne POSTROUTING, on peut comme nous le savons, "​l'​IP Masquerade"​.\\ ​+**Dans la chaîne POSTROUTING,​ "​l'​IP Masquerade"​**.\\ 
 Le masquage d'​adresse IP est une forme de traduction d'​adresse réseau (NAT), et ressemble au SNAT. Cela permet aux ordinateurs d'un réseau privé n'​ayant aucune adresse IP d'​accéder à Internet via l'​adresser IP unique d'une machine Linux.\\ ​ Le masquage d'​adresse IP est une forme de traduction d'​adresse réseau (NAT), et ressemble au SNAT. Cela permet aux ordinateurs d'un réseau privé n'​ayant aucune adresse IP d'​accéder à Internet via l'​adresser IP unique d'une machine Linux.\\ ​
 Voir : [[http://​www.inetdoc.net/​guides/​iptables-tutorial/​nattable.html]] Voir : [[http://​www.inetdoc.net/​guides/​iptables-tutorial/​nattable.html]]
Ligne 251: Ligne 251:
  
 Pour ce qui concerne masquerade et snat, ce qui se passe pour un paquet est représenté par la partie du schéma au dessus de la ligne transversale FORWARD.\\  ​ Pour ce qui concerne masquerade et snat, ce qui se passe pour un paquet est représenté par la partie du schéma au dessus de la ligne transversale FORWARD.\\  ​
-Ce schéma tente de mettre en valeur ​un pré-requis ​pour ces paquets ​qui entrent et sortent ​par **eth0 ​et eth1** ​; et qui sont routés uniquement si, de façon sous-jacente,​ ils sont autorisés à entrer et sortir pour chacune des deux interfaces.\\ +Ce schéma tente de mettre en valeur ​deux pré-requis ​
 +  * 1) la chaîne FORWARD laisse passer dans les deux sens le flux qu'on veut autoriser;​ 
 +  * 2) les chaînes INPUT et OUTPUT laisse entrer et sortir ces mêmes ​ces paquets, non seulement ​par **eth0** mais aussi par **eth1**. ​
  
 En d'​autres termes, la table **FILTER** et les chaînes FORWARD, INPUT et OUTPUT conditionnent le POSTEROUTING (et le PREROUTING).\\ ​ En d'​autres termes, la table **FILTER** et les chaînes FORWARD, INPUT et OUTPUT conditionnent le POSTEROUTING (et le PREROUTING).\\ ​
-Ré-préquis ​déterminant ​le fait que l'​ordinateur B puisse recevoir des paquets, et en envoyer.+Ré-préquis ​qui déterminent ​le fait que l'​ordinateur B puisse recevoir des paquets, et en envoyer.
  
-Ainsi, si La commande installée précédemment \\ ''​iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE''​\\ permettait la transmission des paquets du réseau interne (eth1), au externe (eth0), et vice-versa c'est parce qu'on avait laissé la police par défaut pour le pare-feu de la passerelle.+Ainsi, si La commande installée précédemment \\ ''​iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE''​\\ permettait la transmission des paquets du réseau interne (eth1), au externe (eth0), et vice-versa c'est parce qu'on avait laissé la police par défaut ​ pour la tables FILTER du pare-feu de la passerelle.
  
   * Nous obtenons pour l'​instant :   * Nous obtenons pour l'​instant :
-<code root>​iptables -L -t nat</​code>​+<code root>​iptables -L -t nat && iptables -L</​code>​
 <​code>​ <​code>​
 Chain PREROUTING (policy ACCEPT) Chain PREROUTING (policy ACCEPT)
-target ​    prot opt source ​              ​destination ​        +target ​    prot opt source ​      ​destination ​        
  
 Chain INPUT (policy ACCEPT) Chain INPUT (policy ACCEPT)
-target ​    prot opt source ​              ​destination ​        +target ​    prot opt source ​      ​destination ​        
  
 Chain OUTPUT (policy ACCEPT) Chain OUTPUT (policy ACCEPT)
-target ​    prot opt source ​              ​destination ​        +target ​    prot opt source ​      ​destination ​        
  
 Chain POSTROUTING (policy ACCEPT) Chain POSTROUTING (policy ACCEPT)
-target ​    prot opt source ​              ​destination ​         +target ​    prot opt source ​      ​destination ​         
-MASQUERADE ​ all  --  anywhere ​            ​anywhere ​+MASQUERADE ​ all  --  anywhere ​   anywhere ​            
 +Chain INPUT (policy ACCEPT) 
 +target ​    prot opt source ​      ​destination ​         
 + 
 +Chain FORWARD (policy ACCEPT) 
 +target ​    prot opt source ​      ​destination ​         
 + 
 +Chain OUTPUT (policy ACCEPT) 
 +target ​    prot opt source ​      ​destination
 </​code>​ </​code>​
  
Ligne 283: Ligne 293:
    
 <code root> <code root>
-iptables -P FORWARD DROP 
 iptables -F iptables -F
 iptables -X iptables -X
Ligne 350: Ligne 359:
  -d 192.168.1.0/​24 -m state --state ESTABLISHED,​RELATED -j ACCEPT  -d 192.168.1.0/​24 -m state --state ESTABLISHED,​RELATED -j ACCEPT
 iptables -t filter -A FORWARD -p icmp -j ACCEPT iptables -t filter -A FORWARD -p icmp -j ACCEPT
-... 
-iptables -t filter -A INPUT -p icmp -i eth0 -m state --state ESTABLISHED,​RELATED -j ACCEPT 
-iptables -t filter -A OUTPUT -p icmp -m state --state ESTABLISHED,​RELATED -j ACCEPT 
 ... ...
 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Ligne 648: Ligne 654:
 </​code>​ </​code>​
 ====DROP sur INPUT et OUTPUT (chaîne filter) ==== ====DROP sur INPUT et OUTPUT (chaîne filter) ====
-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.\\  +Cette fois, il va falloir interdire (DROP) les chaînes INPUT et OUTPUT de la table FILTER ​excepté ​pour tous les protocoles dont on a besoin.\\  
-D'​abord ​avec ICMP qu'on laisse ​maintenant ​entrer et sortir ​par INPUT et OUTPUT, ​comme pour ce qu'on a laissé passer par FORWARD.\\ Attention l'​ordre des règles comptes ici.+D'​abord ​pour ICMP qu'​on ​ne laisse ​plus massivement ​entrer et sortir ​(table FILTER à DROP pour INPUT et OUTPUT, ​en plus de FORWARD).\\  
 +<​note>​ 
 +Attention l'​ordre des règles ​pour IMCP sur INPUT, OUTPUT et FORWARD, ​comptes ici. 
 +</​note>​
  
-On conserve ce qu'on a fait précédemment ​et on ajoute aux commandes du [[atelier:​chantier:​iptables-pare-feu-pour-un-client#​pour-les-fadas-du-scripting-shell|script pour un client du LAN]] les règles qui tiennent ​compte qu'il y a cette fois deux interfaces réseau.+On conserve ce qu'on a fait précédemment ​en ajoutant simplement 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 680: Ligne 689:
 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 777: Ligne 786:
  
 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 904: Ligne 913:
 </​code>​ </​code>​
  
-====Le script de la passerelle ==== +=====Le script de la passerelle ​===== 
-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 ​à tout ce qu'on a fait jusqu'​à présent, ​une connexion FTP et SSH loggées, et puisqu'​on y est un petit filtrage supplémentaire au niveau des Flags TCP. 
 + 
 +On ajoute au besoin les règles pour un serveur d'​impression (cups ; port 631) ;\\  
 +et de même, si l'on veut (commenter/​décommenter),​ les règles NAT pour un proxy transparent pour le sous-réseau 162.168.1.0/​24.\\  
 +Pour plus de détail sur l'​installation d'un proxy transparent voir [[utilisateurs:​hypathie:​tutos:​proxy-transparent]]. 
  
 <code bash firewall_gateway.sh>​ <code bash firewall_gateway.sh>​
Ligne 924: Ligne 938:
 # Author: hypathie <​hypathie@debian-facile>​ # Author: hypathie <​hypathie@debian-facile>​
 # #
-##Set up init.d ​script+##Set up /etc/init.d/​firewall_gateway.sh
 case "​$1"​ in case "​$1"​ in
 '​start'​) '​start'​)
-/​sbin/​iptables-restore < /​etc/​config_parefeu 
-RETVAL=$? 
-;; 
-'​stop'​) 
-/​sbin/​iptables-save > /​etc/​config_parefeu 
-RETVAL=$? 
-;; 
-'​clean'​) 
- 
 /​sbin/​iptables -F /​sbin/​iptables -F
 /​sbin/​iptables -X /​sbin/​iptables -X
-/​sbin/​iptables -t nat -F 
-/​sbin/​iptables -t nat -X 
-/​sbin/​iptables -P INPUT ACCEPT 
-/​sbin/​iptables -P FORWARD ACCEPT 
-/​sbin/​iptables -P OUTPUT ACCEPT 
-  
 /​sbin/​iptables -P INPUT DROP /​sbin/​iptables -P INPUT DROP
 /​sbin/​iptables -P OUTPUT DROP /​sbin/​iptables -P OUTPUT DROP
 /​sbin/​iptables -P FORWARD DROP /​sbin/​iptables -P FORWARD DROP
-  
 /​sbin/​iptables -t nat -P PREROUTING ACCEPT /​sbin/​iptables -t nat -P PREROUTING ACCEPT
 /​sbin/​iptables -t nat -P POSTROUTING ACCEPT /​sbin/​iptables -t nat -P POSTROUTING ACCEPT
Ligne 953: Ligne 951:
 /​sbin/​iptables -t nat -P OUTPUT ACCEPT /​sbin/​iptables -t nat -P OUTPUT ACCEPT
 /​sbin/​iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE /​sbin/​iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-  +##commenter / décommenter et adapter les quatre lignes suivantes pour ne pas mettre en place / mettre en place  
-#Maintenant que tout est à DROP il faut s'occuper de la boucle local+##un proxy transparent (squid) 
 +/​sbin/​iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.0.1:​3129 
 +/​sbin/​iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3129 
 +/​sbin/​iptables -t mangle -A PREROUTING -p tcp --dport 3128 -j DROP 
 +/​sbin/​iptables -t mangle -A PREROUTING -p tcp --dport 3129 -j DROP 
 +#accepter l'interface lo
 /​sbin/​iptables -A INPUT -i lo -j ACCEPT /​sbin/​iptables -A INPUT -i lo -j ACCEPT
 /​sbin/​iptables -A OUTPUT -o lo -j ACCEPT /​sbin/​iptables -A OUTPUT -o lo -j ACCEPT
-  +#accepter le sous-réseau
-Et notre interface interne :+
 /​sbin/​iptables -A INPUT -i eth1 -j ACCEPT /​sbin/​iptables -A INPUT -i eth1 -j ACCEPT
 /​sbin/​iptables -A OUTPUT -o eth1 -j ACCEPT /​sbin/​iptables -A OUTPUT -o eth1 -j ACCEPT
-  +#permettre ​le passage entre les deux interfaces eternet de la passerelle 
-#On garde nos règles concernant ​le DROP sur FORWARD (FILTER) +/​sbin/​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 
-#mais on oublie pas eth1 ! +/​sbin/​iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0 -d 192.168.1.0/​24 -p tcp -m state --state ESTABLISHED,​RELATED -j ACCEPT
-/​sbin/​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 +
-  +
-/​sbin/​iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0+
- -d 192.168.1.0/​24 -p tcp -m state --state ESTABLISHED,​RELATED -j ACCEPT +
- +
 /​sbin/​iptables -t filter -A FORWARD -p icmp -j ACCEPT /​sbin/​iptables -t filter -A FORWARD -p icmp -j ACCEPT
-  +#accepter le ping entre les réseaux locaux 
-/​sbin/​iptables -t filter -A INPUT -p icmp -i eth0 -m conntrack+/​sbin/​iptables -t filter -A INPUT -p icmp -i eth0 -m conntrack --ctstate ESTABLISHED,​RELATED -j ACCEPT 
- --ctstate ESTABLISHED,​RELATED -j ACCEPT +/​sbin/​iptables -t filter -A OUTPUT -p icmp -o eth0 -m conntrack --ctstate ESTABLISHED,​RELATED -j ACCEPT 
-  +/​sbin/​iptables -t filter -A INPUT -p icmp -i eth1 -m conntrack --ctstate ESTABLISHED,​RELATED -j ACCEPT 
-/​sbin/​iptables -t filter -A OUTPUT -p icmp -o eth0 -m conntrack+/​sbin/​iptables -t filter -A OUTPUT -p icmp -o eth1 -m conntrack --ctstate ESTABLISHED,​RELATED -j ACCEPT
- --ctstate ESTABLISHED,​RELATED -j ACCEPT +
-  +
-/​sbin/​iptables -t filter -A INPUT -p icmp -i eth1 -m conntrack+
- --ctstate ESTABLISHED,​RELATED -j ACCEPT +
-  +
-/​sbin/​iptables -t filter -A OUTPUT -p icmp -o eth1 -m conntrack+
- --ctstate ESTABLISHED,​RELATED -j ACCEPT +
-  +
-# Et on prend soin de laisser entrer et sortir (INPUT, OUTPUT de FILTER) +
-# le flux nécessaire au DNS (53) et au web (80, 443..) +
-# et là encore on n'​oublie pas eth1 +
-  +
-/​sbin/​iptables -t filter -A OUTPUT -o eth0 -p udp -m udp --dport 53\ +
- -m state --state NEW,​RELATED,​ESTABLISHED -j ACCEPT +
-  +
-/​sbin/​iptables -t filter -A INPUT -i eth0 -p udp -m udp --sport 53\ +
- -m state --state RELATED,​ESTABLISHED -j ACCEPT +
-  +
-/​sbin/​iptables -t filter -A OUTPUT -o eth1 -p udp -m udp --dport 53\ +
- -m state --state NEW,​RELATED,​ESTABLISHED -j ACCEPT +
-  +
-/​sbin/​iptables -t filter -A INPUT -i eth1 -p udp -m udp --sport 53\ +
- -m state --state RELATED,​ESTABLISHED -j ACCEPT +
-  +
-/​sbin/​iptables -t filter -A OUTPUT -o eth0 -p tcp -m multiport --dports\ +
- ​80,​443,​8000 -m state --state NEW,​RELATED,​ESTABLISHED -j ACCEPT +
-  +
-/​sbin/​iptables -t filter -A INPUT -i eth0 -p tcp -m multiport --sports\ +
- ​80,​443,​8000 -m state --state RELATED,​ESTABLISHED -j ACCEPT +
-  +
-/​sbin/​iptables -A OUTPUT -o eth1 -p tcp -m multiport --dports 80,443,8000 -j ACCEPT +
-/​sbin/​iptables -A INPUT -i eth1  -p tcp -m multiport --sports 80,443,8000 -j ACCEPT +
-  +
-  +
-# 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
 /​sbin/​iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT /​sbin/​iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
 /​sbin/​iptables -A FORWARD -p icmp --icmp-type 0 -j ACCEPT /​sbin/​iptables -A FORWARD -p icmp --icmp-type 0 -j ACCEPT
-  
 /​sbin/​iptables -A INPUT -p icmp --icmp-type 3/4 -j ACCEPT /​sbin/​iptables -A INPUT -p icmp --icmp-type 3/4 -j ACCEPT
 /​sbin/​iptables -A OUTPUT -p icmp --icmp-type 3/4 -j ACCEPT /​sbin/​iptables -A OUTPUT -p icmp --icmp-type 3/4 -j ACCEPT
 /​sbin/​iptables -A FORWARD -p icmp --icmp-type 3/4 -j ACCEPT /​sbin/​iptables -A FORWARD -p icmp --icmp-type 3/4 -j ACCEPT
-  
 /​sbin/​iptables -A FORWARD -p icmp --icmp-type 3/3 -j ACCEPT /​sbin/​iptables -A FORWARD -p icmp --icmp-type 3/3 -j ACCEPT
 /​sbin/​iptables -A OUTPUT -p icmp --icmp-type 3/3 -j ACCEPT /​sbin/​iptables -A OUTPUT -p icmp --icmp-type 3/3 -j ACCEPT
 /​sbin/​iptables -A INPUT -p icmp --icmp-type 3/3 -j ACCEPT /​sbin/​iptables -A INPUT -p icmp --icmp-type 3/3 -j ACCEPT
-  
 /​sbin/​iptables -A FORWARD -p icmp --icmp-type 3/1 -j ACCEPT /​sbin/​iptables -A FORWARD -p icmp --icmp-type 3/1 -j ACCEPT
 /​sbin/​iptables -A INPUT -p icmp --icmp-type 3/1 -j ACCEPT /​sbin/​iptables -A INPUT -p icmp --icmp-type 3/1 -j ACCEPT
 /​sbin/​iptables -A OUTPUT -p icmp --icmp-type 3/1 -j ACCEPT /​sbin/​iptables -A OUTPUT -p icmp --icmp-type 3/1 -j ACCEPT
-  
 /​sbin/​iptables -A INPUT -p icmp --icmp-type 4 -j ACCEPT /​sbin/​iptables -A INPUT -p icmp --icmp-type 4 -j ACCEPT
 /​sbin/​iptables -A OUTPUT -p icmp --icmp-type 4 -j ACCEPT /​sbin/​iptables -A OUTPUT -p icmp --icmp-type 4 -j ACCEPT
 /​sbin/​iptables -A FORWARD -p icmp --icmp-type 4 -j ACCEPT /​sbin/​iptables -A FORWARD -p icmp --icmp-type 4 -j ACCEPT
-  
 /​sbin/​iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 2/s -j ACCEPT /​sbin/​iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 2/s -j ACCEPT
 /​sbin/​iptables -A INPUT -p icmp --icmp-type 8 -j LOG --log-prefix "​ICMP/​in/​8 Excessive: " /​sbin/​iptables -A INPUT -p icmp --icmp-type 8 -j LOG --log-prefix "​ICMP/​in/​8 Excessive: "
Ligne 1037: Ligne 992:
 /​sbin/​iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT /​sbin/​iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
 /​sbin/​iptables -A FORWARD -p icmp --icmp-type 8 -j ACCEPT /​sbin/​iptables -A FORWARD -p icmp --icmp-type 8 -j ACCEPT
-  
 /​sbin/​iptables -A INPUT -p icmp --icmp-type 11 -j ACCEPT /​sbin/​iptables -A INPUT -p icmp --icmp-type 11 -j ACCEPT
 /​sbin/​iptables -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT /​sbin/​iptables -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT
 /​sbin/​iptables -A FORWARD -p icmp --icmp-type 11 -j ACCEPT /​sbin/​iptables -A FORWARD -p icmp --icmp-type 11 -j ACCEPT
-  
 /​sbin/​iptables -A INPUT -p icmp --icmp-type 12 -j ACCEPT /​sbin/​iptables -A INPUT -p icmp --icmp-type 12 -j ACCEPT
 /​sbin/​iptables -A OUTPUT -p icmp --icmp-type 12 -j ACCEPT /​sbin/​iptables -A OUTPUT -p icmp --icmp-type 12 -j ACCEPT
 /​sbin/​iptables -A FORWARD -p icmp --icmp-type 12 -j ACCEPT /​sbin/​iptables -A FORWARD -p icmp --icmp-type 12 -j ACCEPT
-  +/​sbin/​iptables -A FORWARD -s 192.168.1.0/​24 -d 192.168.0.0/​24 -p icmp --icmp-type echo-request -j ACCEPT 
-/​sbin/​iptables -A FORWARD -s 192.168.1.0/​24 -d 192.168.0.0/​24 -p icmp+/​sbin/​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-request -j ACCEPT +
- +
-# Pour le retour nous utilisons la dernière règle +
-/​sbin/​iptables -A FORWARD -s 192.168.0.0/​24 -d 192.168.1.0/​24 -p icmp+
- --icmp-type echo-reply -j DROP +
- +
 /​sbin/​iptables -A INPUT -p icmp -m limit -j LOG --log-prefix "​ICMP/​IN:​ " /​sbin/​iptables -A INPUT -p icmp -m limit -j LOG --log-prefix "​ICMP/​IN:​ "
 /​sbin/​iptables -A OUTPUT -p icmp -m limit -j LOG --log-prefix "​ICMP/​OUT:​ " /​sbin/​iptables -A OUTPUT -p icmp -m limit -j LOG --log-prefix "​ICMP/​OUT:​ "
-  
-  
-#TCP_BAD 
-  
 /​sbin/​iptables -N syn_flood /​sbin/​iptables -N syn_flood
 /​sbin/​iptables -I INPUT -p tcp --syn -j syn_flood /​sbin/​iptables -I INPUT -p tcp --syn -j syn_flood
Ligne 1064: Ligne 1007:
 /​sbin/​iptables -A syn_flood -j LOG --log-prefix '​[SYN_FLOOD] : ' /​sbin/​iptables -A syn_flood -j LOG --log-prefix '​[SYN_FLOOD] : '
 /​sbin/​iptables -A syn_flood -j DROP /​sbin/​iptables -A syn_flood -j DROP
-  +#autoriser la connexion avec les serveurs DNS 
-SSH+/​sbin/​iptables -t filter -A OUTPUT -o eth0 -p udp -m udp --dport 53 -m state --state NEW,​RELATED,​ESTABLISHED -j ACCEPT 
 +/​sbin/​iptables -t filter -A INPUT -i eth0 -p udp -m udp --sport 53 -m state --state RELATED,​ESTABLISHED -j ACCEPT 
 +/​sbin/​iptables -t filter -A OUTPUT -o eth1 -p udp -m udp --dport 53 -m state --state NEW,​RELATED,​ESTABLISHED -j ACCEPT 
 +/​sbin/​iptables -t filter -A INPUT -i eth1 -p udp -m udp --sport 53 -m state --state RELATED,​ESTABLISHED -j ACCEPT 
 +#autoriser la navigation web 
 +/​sbin/​iptables -t filter -A OUTPUT -o eth0 -p tcp -m multiport --dports 80,443,8000 -m state --state NEW,​RELATED,​ESTABLISHED -j ACCEPT 
 +/​sbin/​iptables -t filter -A INPUT -i eth0 -p tcp -m multiport --sports 80,443,8000 -m state --state RELATED,​ESTABLISHED -j ACCEPT 
 +/​sbin/​iptables -A OUTPUT -o eth1 -p tcp -m multiport --dports 80,443,8000 -j ACCEPT 
 +/​sbin/​iptables -A INPUT -i eth1  -p tcp -m multiport --sports 80,443,8000 -j ACCEPT 
 +#Si le serveur cups est branché sur un ordinateur du réseau 192.168.0.0/​24,​ par exemple sur 192.168.0.22 
 +# laisser décommenter les deux lignes suivantes : 
 +/​sbin/​iptables -A INPUT -i eth0 -s 192.168.0.22 -d 192.168.0.1 -p tcp --sport 631 -m state --state NEW,​RELATED,​ESTABLISHED -j ACCEPT 
 +/​sbin/​iptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.22 -p tcp --dport 631 -m state --state NEW,​RELATED,​ESTABLISHED -j ACCEPT 
 +#créer une chaîne utilisateur pour les connexion ssh, les loguer et les accepter
 /​sbin/​iptables -t filter -N InComingSSH /​sbin/​iptables -t filter -N InComingSSH
-/​sbin/​iptables -I INPUT -i eth0 -s 192.168.0.0/​24 -p tcp -m tcp+/​sbin/​iptables -I INPUT -i eth0 -s 192.168.0.0/​24 -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,​ESTABLISHED -j InComingSSH
- --dport 22 -m conntrack --ctstate NEW,​ESTABLISHED -j InComingSSH+
 /​sbin/​iptables -A InComingSSH -j LOG --log-prefix '​[INCOMING_SSH] : ' /​sbin/​iptables -A InComingSSH -j LOG --log-prefix '​[INCOMING_SSH] : '
 /​sbin/​iptables -A InComingSSH -j ACCEPT /​sbin/​iptables -A InComingSSH -j ACCEPT
-  +/​sbin/​iptables -t filter -A OUTPUT -o eth0 -p tcp -m tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT 
-/​sbin/​iptables -t filter -A OUTPUT -o eth0 -p tcp -m tcp+/​sbin/​iptables -t filter -A OUTPUT -o eth1 -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,​ESTABLISHED -j ACCEPT 
- --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT +/​sbin/​iptables -t filter -A INPUT -i eth1 -s 192.168.0.0/​24 -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT 
-  +#créer une chaîne utilisateur pour les connexions ftp, et les accepter
-/​sbin/​iptables -t filter -A OUTPUT -o eth1 -p tcp -m tcp+
- --dport 22 -m conntrack --ctstate NEW,​ESTABLISHED -j ACCEPT +
-  +
-/​sbin/​iptables -t filter -A INPUT -i eth1 -s 192.168.0.0/​24 -p tcp+
- --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT +
-  +
-#FTP_IN +
- +
 /​sbin/​iptables -N ftp_in_accept /​sbin/​iptables -N ftp_in_accept
-/​sbin/​iptables -I INPUT -i eth0 -p tcp --sport 21 -m state+/​sbin/​iptables -I INPUT -i eth0 -p tcp --sport 21 -m state --state ESTABLISHED,​RELATED -j ftp_in_accept 
- --state ESTABLISHED,​RELATED -j ftp_in_accept +/​sbin/​iptables -I INPUT -i eth0 -p tcp --sport 20 -m state --state ESTABLISHED,​RELATED -j ftp_in_accept 
-  +/​sbin/​iptables -I INPUT -i eth0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ftp_in_accept
-/​sbin/​iptables -I INPUT -i eth0 -p tcp --sport 20 -m state+
- --state ESTABLISHED,​RELATED -j ftp_in_accept +
-  +
-/​sbin/​iptables -I INPUT -i eth0 -p tcp --sport 1024:65535 --dport+
- 1024:65535 -m state --state ESTABLISHED -j ftp_in_accept +
- +
 /​sbin/​iptables -A ftp_in_accept -p tcp -j ACCEPT /​sbin/​iptables -A ftp_in_accept -p tcp -j ACCEPT
-  +/​sbin/​iptables -A INPUT -i eth1 -p tcp --sport 21 -m state --state ESTABLISHED,​RELATED -j ACCEPT 
-  +/​sbin/​iptables -A INPUT -i eth1 -p tcp --sport 20 -m state --state ESTABLISHED,​RELATED -j ACCEPT 
-/​sbin/​iptables -A INPUT -i eth1 -p tcp --sport 21 -m state+/​sbin/​iptables -I INPUT -i eth1 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT 
- --state ESTABLISHED,​RELATED -j ACCEPT +echo "set up firewall_gateway.sh .........>​ [OK]"​ 
-/​sbin/​iptables -A NPUT -i eth1 -p tcp --sport 20 -m state+/​sbin/​iptables-save > /​etc/​firewall_gateway.sh 
- --state ESTABLISHED,​RELATED -j ACCEPT +echo "​iptables-save > /​etc/​firewall_gateway.sh .........>​ [OK]"​ 
-/​sbin/​iptables -I INPUT -i eth1 -p tcp --sport 1024:65535 --dport+RETVAL=$? 
- 1024:65535 -m state --state ESTABLISHED -j ACCEPT+;; 
 +'​stop'​) 
 +# Supprime toutes les règles de la tables FILTER et pose la police ACCEPT pour toutes les chaînes 
 +/​sbin/​iptables -t filter -F 
 +/​sbin/​iptables -t filter -X 
 +/​sbin/​iptables -t filter -P INPUT ACCEPT 
 +/​sbin/​iptables -t filter -P OUTPUT ACCEPT 
 +/​sbin/​iptables -t filter -P FORWARD ACCEPT 
 +echo "​FILTER [ALL firewall_gateway.sh'​s rules .... [FLUSH] ..... POLICY ......> [ACCEPT]"​ 
 +echo "NAT ...POSTROUTING ... MASQUERADE .... [STILL SET UP]"
 RETVAL=$? RETVAL=$?
 ;; ;;
 '​restart'​) '​restart'​)
-$0 stop && ​$0 start+#​ré-installe le pare-feu complet, y compris NAT (masquerade),​ DNAT (port 631) 
 +/​sbin/​iptables-restore < /​etc/​firewall_gateway.sh 
 +echo "/​etc/​firewall-client ........>​ [OK]"​ 
 +echo "NAT (masquerade) ........>​ [OK]"​ 
 +echo "DNAT (port 631) ........>​ [OK]"​ 
 +RETVAL=$
 +;; 
 +'​status'​) 
 +/​sbin/​iptables -L -n --line-numbers 
 +/​sbin/​iptables -t nat -L -n --line-numbers 
 +RETVAL=$
 +;; 
 +'​flush'​) 
 +#supprime toutes les règles de toutes les tables ; accepte tout 
 +/​sbin/​iptables -t filter -F 
 +/​sbin/​iptables -t nat -F 
 +/​sbin/​iptables -t mangle -F 
 +/​sbin/​iptables -t raw -F 
 +/​sbin/​iptables -t filter -P INPUT ACCEPT 
 +/​sbin/​iptables -t filter -P OUTPUT ACCEPT 
 +/​sbin/​iptables -t filter -P FORWARD ACCEPT 
 +echo "​FILTER [ALL RULES .......> [FLUSH]"​ 
 +echo "​WARNING ........ ALL POLICY ......> [ACCEPT]"​ 
 +RETVAL=$? 
 +;; 
 +'​deletnat'​) 
 +/​sbin/​iptables -t nat -F 
 +/​sbin/​iptables -t nat -X 
 +/​sbin/​iptables -t mangle -F 
 +/​sbin/​iptables -t nat -P PREROUTING ACCEPT 
 +/​sbin/​iptables -t nat -P POSTROUTING ACCEPT 
 +/​sbin/​iptables -t nat -P OUTPUT ACCEPT 
 +/​sbin/​iptables -t mangle -P PREROUTING ACCEPT 
 +/​sbin/​iptables -t mangle -P OUTPUT ACCEPT 
 +/​sbin/​iptables -t mangle -P POSTROUTING ACCEPT 
 +  
 +echo "​NAT/​MANGLE [ALL RULES .... [FLUSH] ..... POLICY ......> [ACCEPT]"​ 
 +echo "INFO ......> [NAT/DNAT is OFF]"​ 
 +echo "INFO ......> [FILTER STILL SET UP]"
 RETVAL=$? RETVAL=$?
 ;; ;;
 *) *)
-echo "​Usage:​ $0 { start | stop | restart | clean}"+echo "​Usage:​ $0 { start | stop | restart | status | flush | deletnat ​}"
 RETVAL=1 RETVAL=1
 ;; ;;
Ligne 1116: Ligne 1104:
 </​code>​ </​code>​
  
-Et voilà, c'​est ​fini !\\ +  * Pour l'​installation du script 
 +Suivre la même méthode que pour [[atelier:​chantier:​iptables-pare-feu-pour-un-client?&#​pour-les-fadas-du-scripting-shell|firewall-client comme script init]].\\  
 + 
 +  * Ou si l'on préfère utiliser les commandes iptables-save et iptables-restore  
 +Il n'y qu'à récupérer les commandes iptables du script, en commentant le reste.\\  
 +Puis lancer les commandes nécessaires à l'​exécution du script (droits d'​exécution et en root ''​bash /​chemin/​du/​script''​)\\  
 +Enfin éditer /​etc/​network/​interfaces : 
 +<​code>#​ The loopback network interface 
 +auto lo 
 +iface lo inet loopback 
 + 
 +#carte vers la box 
 +auto eth0 
 +iface eth0 inet static 
 +address 192.168.0.1 
 +network 192.168.0.0 
 +netmask 255.255.255.0 
 +gateway 192.168.0.254 
 +post-up iptables-restore < /​etc/​firewall_gateway 
 + 
 +#carte vers le LAN 
 +auto eth1 
 +iface eth1 inet static 
 +address 192.168.1.1 
 +network 192.168.1.0 
 +netmask 255.255.255.0</​code>​ 
 + 
 +====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 finirune 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 annule le bail DHCP : 
 + 
 +<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>​ 
 + 
 +  * Côté serveur DHCP : 
 +Observez ce que nous dit "​tcpdump" ​ : 
 + 
 +<​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  l'IP de l'​ordinateur client DHCP 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>​
  
-Pour l'​installation du scriptsuivre 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]]. ​ ^_^+Et voilàc'est fini !  ^_^
  
-La suite concernera le DNAT et SNAT, l'​ajout de quelques règles ​pour certains protocoles laissés ici de côté, en particulier,​ concernant DHCP, cups, et enfin, l'​installation sur cette passerelle d'un proxy transparent pour l'​ensemble su réseau B.+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