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 →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Dernière révision Les deux révisions suivantes | ||
doc:reseau:iptables-pare-feu-pour-une-passerelle [07/11/2014 12:28] Hypathie [Détail pour les protocole TCP et UDP] |
doc:reseau:iptables-pare-feu-pour-une-passerelle [01/11/2015 18:13] milou [Détail pour les protocole TCP et UDP] |
||
---|---|---|---|
Ligne 4: | Ligne 4: | ||
* Niveau requis : {{tag> avisé}} | * Niveau requis : {{tag> avisé}} | ||
* Commentaires : Fignoler le routage, installer un pare-feu sur une passerelle debian. | * Commentaires : Fignoler le routage, installer un pare-feu sur une passerelle debian. | ||
- | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | + | * Suivi : {{tag>à-tester}} |
- | * Suivi : {{tag>à-tester à-placer}} | + | |
* Création par [[user>Hypathie]] 14/10/2014 | * Création par [[user>Hypathie]] 14/10/2014 | ||
- | * Testé par <...> le <...> FIXME | + | * Testé par <...> le <...> |
* 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 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. ** | **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 ! | + | **Nota :** Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! |
===== Introduction ===== | ===== Introduction ===== | ||
- | Pour ce qui concerne iptables, ce wiki prend la suite du wiki [[http://wiki.debian-facile.org/atelier:chantier:iptables-pare-feu-pour-un-client|iptables-pare-feu-pour-un-client]], où les connaissances de base sur les commandes iptables ont été abordées.\\ | + | Pour ce qui concerne iptables, ce wiki prend la suite du wiki [[doc:reseau:iptables-pare-feu-pour-un-client?&#sauvegarder-ses-reglest|iptables-pare-feu-pour-un-client]], où les connaissances de base sur les commandes iptables ont été abordées.\\ |
Pour ce qui concerne les exemplifications qui vont suivre, je considérerai qu'une passerelle a été mise en place et que les commandes de base d'iptables sont connues. | Pour ce qui concerne les exemplifications qui vont suivre, je considérerai qu'une passerelle a été mise en place et que les commandes de base d'iptables sont connues. | ||
Ligne 34: | Ligne 34: | ||
L'ordinateur B appartient au sous sous-réseau : 192.168.1.0/255.255.255.0 | L'ordinateur B appartient au sous sous-réseau : 192.168.1.0/255.255.255.0 | ||
- | * Les services installés : | + | * Les services installés : |
- | __Sur l'ordinateur A (IP: 192.168.0.22)__, on a installé [[atelier:chantier:iptables-pare-feu-pour-un-client#pour-les-fadas-du-scripting-shell|ce pare-feu]].\\ | + | __Sur l'ordinateur A (IP: 192.168.0.22)__, on a installé [[doc:reseau:iptables-pare-feu-pour-un-client#pour-les-fadas-du-scripting-shell|ce pare-feu]].\\ |
__Sur debian-routeur(IP: 192.168.0.1)__, on a installé:\\ | __Sur debian-routeur(IP: 192.168.0.1)__, on a installé:\\ | ||
- aucune interface graphique lors de son installation : on le configure en passant par ssh depuis l'ordinateur A\\ | - aucune interface graphique lors de son installation : on le configure en passant par ssh depuis l'ordinateur A\\ | ||
- | - [[atelier:chantier:dhcp#mise-en-place-basique-du-sercice-dhcp-sur-notre-reseau-local|un serveur DHCP basique]] qui fournit l'IP 192.168.1.2 a l'ordinateur B\\ | + | - [[doc:reseau:dhcp#mise-en-place-basique-du-sercice-dhcp-sur-notre-reseau-local|un serveur DHCP basique]] qui fournit l'IP 192.168.1.2 a l'ordinateur B\\ |
- | - La table NAT a été modifiée très simplement pour l'instant afin [[atelier:chantier:dhcp#installation-de-la-passerelle-debian|de le transformer en passerelle]].\\ | + | - Un [[atelier:chantier:dns-bind9-sur-wheezy|serveur DNS (bind9)]]\\ |
+ | - le fichier **/etc/hosts de l'ordi B** est complété(( FQDN (Fully Qualified Domain Name)), par exemple: | ||
+ | <code> | ||
+ | 127.0.0.1 localhost | ||
+ | 127.0.1.1 debian-hpmondomaine.hyp debian-hp | ||
+ | </code> | ||
+ | - le fichier **/etc/resolv.conf de l'ordi B** a connaissance de l'ip du serveur DNS : | ||
+ | <code> | ||
+ | domaine mondomaine.hyp | ||
+ | search mondomaine.hyp | ||
+ | nameserver 192.168.1.1 | ||
+ | </code> | ||
+ | - De même le fichier **/etc/hosts de la passerelle** connaît l'ordi B : Par exemple ''192.168.1.3 debian-hp'' | ||
+ | - La table NAT a été modifiée très simplement pour l'instant afin [[doc:reseau:dhcp#installation-de-la-passerelle-debian|de le transformer en passerelle]] avec masquerade sur eth0 (interface web).\\ | ||
- le fichier /etc/sysctl.conf a été modifié : la ligne ''net.ipv4.ip_forward=0'' est devenue ''net.ipv4.ip_forward=1''. | - le fichier /etc/sysctl.conf a été modifié : la ligne ''net.ipv4.ip_forward=0'' est devenue ''net.ipv4.ip_forward=1''. | ||
Ligne 54: | Ligne 67: | ||
<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. | + | <file config retour de la commande>PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. |
64 bytes from 192.168.1.2: icmp_req=1 ttl=64 time=0.132 ms | 64 bytes from 192.168.1.2: icmp_req=1 ttl=64 time=0.132 ms | ||
64 bytes from 192.168.1.2: icmp_req=2 ttl=64 time=0.123 ms | 64 bytes from 192.168.1.2: icmp_req=2 ttl=64 time=0.123 ms | ||
Ligne 60: | Ligne 73: | ||
--- 192.168.1.2 ping statistics --- | --- 192.168.1.2 ping statistics --- | ||
2 packets transmitted, 2 received, 0% packet loss, time 999ms | 2 packets transmitted, 2 received, 0% packet loss, time 999ms | ||
- | rtt min/avg/max/mdev = 0.123/0.127/0.132/0.012 ms</code> | + | rtt min/avg/max/mdev = 0.123/0.127/0.132/0.012 ms</file> |
^_^ | ^_^ | ||
Ligne 67: | Ligne 80: | ||
<code user>ping 192.168.0.22</code> | <code user>ping 192.168.0.22</code> | ||
- | <code>PING 192.168.0.22 (192.168.0.22) 56(84) bytes of data. | + | <file config retour de la commande>PING 192.168.0.22 (192.168.0.22) 56(84) bytes of data. |
^C | ^C | ||
--- 192.168.0.22 ping statistics --- | --- 192.168.0.22 ping statistics --- | ||
- | 2 packets transmitted, 0 received, 100% packet loss, time 1007ms</code> | + | 2 packets transmitted, 0 received, 100% packet loss, time 1007ms</file> |
8-) | 8-) | ||
Ligne 79: | Ligne 92: | ||
<code user>ping 192.168.0.22</code> | <code user>ping 192.168.0.22</code> | ||
- | <code>PING 192.168.0.22 (192.168.0.22) 56(84) bytes of data. | + | <file config retour de la commande>PING 192.168.0.22 (192.168.0.22) 56(84) bytes of data. |
^C | ^C | ||
--- 192.168.0.22 ping statistics --- | --- 192.168.0.22 ping statistics --- | ||
- | 6 packets transmitted, 0 received, 100% packet loss, time 4999ms</code> | + | 6 packets transmitted, 0 received, 100% packet loss, time 4999ms</file> |
:-\ | :-\ | ||
Ligne 89: | Ligne 102: | ||
<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. | + | <file config retour de la commande>PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. |
^C | ^C | ||
--- 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</file> |
:-/ | :-/ | ||
Ligne 107: | Ligne 120: | ||
* La table de routage actuelle de debian-routeur : | * La table de routage actuelle de debian-routeur : | ||
<code user>route -n</code> | <code user>route -n</code> | ||
- | <code>Table de routage IP du noyau | + | <file config retour de la commande>Table de routage IP du noyau |
Destination Passerelle Genmask Indic Metric Ref Use Iface | Destination Passerelle Genmask Indic Metric Ref Use Iface | ||
default 192.168.0.254 0.0.0.0 UG 0 0 0 eth0 | default 192.168.0.254 0.0.0.0 UG 0 0 0 eth0 | ||
| | ||
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0 | 192.168.0.0 * 255.255.255.0 U 0 0 0 eth0 | ||
- | 192.168.1.0 * 255.255.255.0 U 0 0 0 eth1</code> | + | 192.168.1.0 * 255.255.255.0 U 0 0 0 eth1</file> |
- | L'étoile ''*'' dans la colonne ''Passerelle'' indique que le réseau de destination ''192.168.0.0'' (i.e.192.168.0.0/24) n'a pas de passerelle.\\ | + | L'étoile ''*'' dans la colonne ''Passerelle'' indique que le réseau de destination ''192.168.0.0'' (i.e.192.168.0.0/24) n'a pas de passerelle.\\ |
+ | |||
De même (''*'') le réseau de destination 192.168.1.0/24 n'a pas de passerelle. | De même (''*'') le réseau de destination 192.168.1.0/24 n'a pas de passerelle. | ||
Ligne 121: | Ligne 135: | ||
<code root> | <code root> | ||
- | route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.1 dev eth0 | + | route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.1 dev eth0</code> |
- | route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth1 | + | <code root>route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth1 |
</code> | </code> | ||
Ligne 129: | Ligne 143: | ||
ou en root ;-) | ou en root ;-) | ||
<code root>route -n</code> | <code root>route -n</code> | ||
- | <code>Table de routage IP du noyau | + | <file config retour de la commande>Table de routage IP du noyau |
Destination Passerelle Genmask Indic Metric Ref Use Iface | Destination Passerelle Genmask Indic Metric Ref Use Iface | ||
0.0.0.0 192.168.0.254 0.0.0.0 UG 0 0 0 eth0 | 0.0.0.0 192.168.0.254 0.0.0.0 UG 0 0 0 eth0 | ||
Ligne 135: | Ligne 149: | ||
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 | 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 | ||
192.168.1.0 192.168.1.1 255.255.255.0 UG 0 0 0 eth1 | 192.168.1.0 192.168.1.1 255.255.255.0 UG 0 0 0 eth1 | ||
- | 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1</code> | + | 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1</file> |
* Ping de l'ordinateur B (192.168.1.0/24) vers l'ordinateur A (192.168.0.0/24) | * Ping de l'ordinateur B (192.168.1.0/24) vers l'ordinateur A (192.168.0.0/24) | ||
<code user>ping 192.168.0.22</code> | <code user>ping 192.168.0.22</code> | ||
- | <code>PING 192.168.0.22 (192.168.0.22) 56(84) bytes of data. | + | <file config retour de la commande>PING 192.168.0.22 (192.168.0.22) 56(84) bytes of data. |
64 bytes from 192.168.0.22: icmp_req=1 ttl=63 time=0.546 ms | 64 bytes from 192.168.0.22: icmp_req=1 ttl=63 time=0.546 ms | ||
64 bytes from 192.168.0.22: icmp_req=2 ttl=63 time=0.338 ms | 64 bytes from 192.168.0.22: icmp_req=2 ttl=63 time=0.338 ms | ||
Ligne 146: | Ligne 160: | ||
--- 192.168.0.22 ping statistics --- | --- 192.168.0.22 ping statistics --- | ||
3 packets transmitted, 3 received, 0% packet loss, time 2000ms | 3 packets transmitted, 3 received, 0% packet loss, time 2000ms | ||
- | 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</file> |
=) | =) | ||
Ligne 152: | Ligne 166: | ||
* 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. | + | <file config retour de la commande>PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. |
^C | ^C | ||
--- 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</file> |
:-| | :-| | ||
Ligne 164: | Ligne 178: | ||
Sur l'ordinateur A, IP:192.168.0.22 : | Sur l'ordinateur A, IP:192.168.0.22 : | ||
<code root>route -n</code> | <code root>route -n</code> | ||
- | <code>Table de routage IP du noyau | + | <file config retour de la commande>Table de routage IP du noyau |
Destination Passerelle Genmask Indic Metric Ref Use Iface | Destination Passerelle Genmask Indic Metric Ref Use Iface | ||
0.0.0.0 192.168.0.254 0.0.0.0 UG 0 0 0 eth0 | 0.0.0.0 192.168.0.254 0.0.0.0 UG 0 0 0 eth0 | ||
- | 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0</code> | + | 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0</file> |
Il faut donc instruire la table de routage de l'ordinateur A de l'existence du réseau B et lui indiquer que la route à prendre est la passerelle ! | Il faut donc instruire la table de routage de l'ordinateur A de l'existence du réseau B et lui indiquer que la route à prendre est la passerelle ! | ||
Ligne 173: | Ligne 187: | ||
<code root>route -n</code> | <code root>route -n</code> | ||
- | <code>Table de routage IP du noyau | + | <file config retour de la commande>Table de routage IP du noyau |
Destination Passerelle Genmask Indic Metric Ref Use Iface | Destination Passerelle Genmask Indic Metric Ref Use Iface | ||
0.0.0.0 192.168.0.254 0.0.0.0 UG 0 0 0 eth0 | 0.0.0.0 192.168.0.254 0.0.0.0 UG 0 0 0 eth0 | ||
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 | 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 | ||
- | 192.168.1.0 192.168.0.1 255.255.255.0 UG 0 0 0 eth0</code> | + | 192.168.1.0 192.168.0.1 255.255.255.0 UG 0 0 0 eth0</file> |
* Et maintenant le ping de l'ordinateur A vers l'ordinateur B: | * Et maintenant le ping de l'ordinateur A vers l'ordinateur B: | ||
<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. | + | <file config retour de la commande>PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. |
64 bytes from 192.168.1.2: icmp_req=1 ttl=63 time=0.504 ms | 64 bytes from 192.168.1.2: icmp_req=1 ttl=63 time=0.504 ms | ||
64 bytes from 192.168.1.2: icmp_req=2 ttl=63 time=0.308 ms | 64 bytes from 192.168.1.2: icmp_req=2 ttl=63 time=0.308 ms | ||
Ligne 187: | Ligne 201: | ||
--- 192.168.1.2 ping statistics --- | --- 192.168.1.2 ping statistics --- | ||
2 packets transmitted, 2 received, 0% packet loss, time 999ms | 2 packets transmitted, 2 received, 0% packet loss, time 999ms | ||
- | rtt min/avg/max/mdev = 0.308/0.406/0.504/0.098 ms</code> | + | rtt min/avg/max/mdev = 0.308/0.406/0.504/0.098 ms</file> |
8-) | 8-) | ||
Ligne 258: | Ligne 272: | ||
Ré-préquis qui déterminent 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 la tables FILTER du 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 && iptables -L</code> | <code root>iptables -L -t nat && iptables -L</code> | ||
- | <code> | + | <file config retour de la commande> |
Chain PREROUTING (policy ACCEPT) | Chain PREROUTING (policy ACCEPT) | ||
target prot opt source destination | target prot opt source destination | ||
Ligne 283: | Ligne 301: | ||
Chain OUTPUT (policy ACCEPT) | Chain OUTPUT (policy ACCEPT) | ||
target prot opt source destination | target prot opt source destination | ||
- | </code> | + | </file> |
====Dépendance entre NAT et FILTER (FORWARD)==== | ====Dépendance entre NAT et FILTER (FORWARD)==== | ||
Ligne 293: | Ligne 311: | ||
<code root> | <code root> | ||
- | iptables -P FORWARD DROP | + | iptables -F</code> |
- | iptables -F | + | <code root>iptables -X</code> |
- | iptables -X | + | <code root>iptables -t nat -F</code> |
- | iptables -t nat -F | + | <code root>iptables -t nat -X</code> |
- | iptables -t nat -X | + | <code root>iptables -P FORWARD DROP</code> |
- | iptables -P FORWARD DROP | + | <code root>iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE |
- | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | + | |
</code> | </code> | ||
Ligne 305: | Ligne 322: | ||
-Ping de l'ordinateur A vers B : | -Ping de l'ordinateur A vers B : | ||
<code user>ping 192.168.1.2</code> | <code user>ping 192.168.1.2</code> | ||
- | <code> | + | <file config retour de la commande> |
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. | PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. | ||
^C | ^C | ||
--- 192.168.1.2 ping statistics --- | --- 192.168.1.2 ping statistics --- | ||
3 packets transmitted, 0 received, 100% packet loss, time 2017ms | 3 packets transmitted, 0 received, 100% packet loss, time 2017ms | ||
- | </code> | + | </file> |
-Ping de l'ordinateur A vers l'IP de google.fr : | -Ping de l'ordinateur A vers l'IP de google.fr : | ||
<code user>ping 64.233.166.94</code> | <code user>ping 64.233.166.94</code> | ||
- | <code> | + | <file config retour de la commande> |
PING 64.233.166.94 (64.233.166.94) 56(84) bytes of data. | PING 64.233.166.94 (64.233.166.94) 56(84) bytes of data. | ||
^C | ^C | ||
--- 64.233.166.94 ping statistics --- | --- 64.233.166.94 ping statistics --- | ||
3 packets transmitted, 0 received, 100% packet loss, time 2014m | 3 packets transmitted, 0 received, 100% packet loss, time 2014m | ||
- | </code> | + | </file> |
//De même on peut tester : depuis l'ordinateur B au moyen du navigateur pour constater qu'il n'y a plus de navigation.// | //De même on peut tester : depuis l'ordinateur B au moyen du navigateur pour constater qu'il n'y a plus de navigation.// | ||
Ligne 325: | Ligne 342: | ||
**__Les commandes pour tout annuler et revenir à l'état précédent__** : | **__Les commandes pour tout annuler et revenir à l'état précédent__** : | ||
<code root> | <code root> | ||
- | iptables -F | + | iptables -F</code> |
- | iptables -X | + | <code root>iptables -X</code> |
- | iptables -t nat -F | + | <code root>iptables -t nat -F</code> |
- | iptables -t nat -X | + | <code root>iptables -t nat -X</code> |
- | iptables -P INPUT ACCEPT | + | <code root>iptables -P INPUT ACCEPT</code> |
- | iptables -P FORWARD ACCEPT | + | <code root>iptables -P FORWARD ACCEPT</code> |
- | iptables -P OUTPUT ACCEPT | + | <code root>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 des 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. | ||
Ligne 344: | Ligne 361: | ||
- Interdire par défaut (DROP) la chaîne FORWARD | - Interdire par défaut (DROP) la chaîne FORWARD | ||
- Filter ce qui passe par FORWARD | - Filter ce qui passe par FORWARD | ||
- | - Autoriser (provisoirement) les entrées et sorties entre le <nowiki>LAN</nowiki> et le web. | + | - Par exemple pour autoriser la connexion au web du <nowiki>LAN</nowiki> on autorise tcp |
- | - Autoriser les pings depuis le pare-feu vers l'internet, uniquement si ceux-ci proviennent de connexions déjà établies ou dépendantes d'une connexion en cours. | + | - On autorise ICMP pour les pings |
- | - Autoriser la réponse du ping, que ce soit depuis le réseau interne, ou de la box-machin. | + | - Et bien sûr, ne pas oublier si on a "flushé" la table NAT, la commande avec MASQUERADE |
- | - Et bien sûr, ne pas oublier après avoir flusher la table NAT, la commande avec MASQUERADE | + | |
(//Puisque la politique par défaut de la table FILTER des chaînes INPUT et OUTPUT n'ont pas encore été modifiées, on peut déjà tester ces commandes.//) | (//Puisque la politique par défaut de la table FILTER des chaînes INPUT et OUTPUT n'ont pas encore été modifiées, on peut déjà tester ces commandes.//) | ||
* __Comme ceci__ : | * __Comme ceci__ : | ||
<code root> | <code root> | ||
- | ... | + | iptables -F |
+ | iptables -X | ||
+ | iptables -t nat -F | ||
+ | iptables -t nat -X | ||
+ | iptables -P INPUT ACCEPT | ||
+ | iptables -P FORWARD ACCEPT | ||
+ | iptables -P OUTPUT ACCEPT | ||
+ | |||
+ | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | ||
iptables -P FORWARD DROP | iptables -P FORWARD DROP | ||
- | ... | + | |
- | iptables -t filter -A FORWARD -i eth1 -o eth0 -p tcp -m multiport\ | + | iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -p\ |
- | --dports 80,443,8000 -j ACCEPT | + | tcp -m state --state NEW,ESTABLISHED -j ACCEPT |
- | iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0\ | + | |
- | -d 192.168.1.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT | + | 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 -j ACCEPT | ||
+ | </code> | ||
+ | |||
+ | * Ce qui donne : | ||
+ | <code root>iptables -L</code> | ||
+ | <file config retour de la commande> | ||
+ | Chain INPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | |||
+ | Chain FORWARD (policy DROP) | ||
+ | target prot opt source destination | ||
+ | ACCEPT tcp -- 192.168.1.0/24 anywhere state NEW,ESTABLISHED | ||
+ | ACCEPT tcp -- anywhere 192.168.1.0/24 state ESTABLISHED | ||
+ | |||
+ | Chain OUTPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | </file> | ||
+ | > La navigation web fonctionne | ||
+ | > Le ping vers google et vers 192.168.0.22 est bloqué car on a autorisé seulement tcp | ||
+ | |||
+ | * On ajoute une autorisation pour icmp : | ||
+ | |||
+ | <code root> | ||
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 | ||
</code> | </code> | ||
- | <note> | ||
- | Ou sans suivi de connexion :\\ | ||
- | iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT\\ | + | * Ce qui donne : |
- | iptables -A FORWARD -o eth1 -i eth0 -j ACCEPT | + | |
- | </note> | + | <code root>iptables -L FORWARD</code> |
- | * On vérifie si le ping fonctionne de la machine A vers la machine B : | + | <file config retour de la commande> |
- | <code user> | + | Chain FORWARD (policy DROP) |
- | ping 192.168.1.2 | + | target prot opt source destination |
+ | ACCEPT tcp -- 192.168.1.0/24 anywhere state NEW,ESTABLISHED | ||
+ | ACCEPT tcp -- anywhere 192.168.1.0/24 state ESTABLISHED | ||
+ | ACCEPT icmp -- anywhere anywhere | ||
+ | </file> | ||
+ | |||
+ | * OU de manière plus précise : | ||
+ | <code root> | ||
+ | iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -p icmp\ | ||
+ | -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT | ||
+ | |||
+ | iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0 -d 192.168.1.0/24 -p icmp\ | ||
+ | -m state --state ESTABLISHED,RELATED -j ACCEPT | ||
</code> | </code> | ||
+ | |||
+ | * Ce qui donnerait cette fois : | ||
+ | <code root>iptables -L FORWARD</code> | ||
+ | <file config retour de la commande> | ||
+ | Chain FORWARD (policy DROP) | ||
+ | target prot opt source destination | ||
+ | ACCEPT tcp -- 192.168.1.0/24 anywhere state NEW,RELATED,ESTABLISHED | ||
+ | ACCEPT tcp -- anywhere 192.168.1.0/24 state RELATED,ESTABLISHED | ||
+ | ACCEPT icmp -- 192.168.1.0/24 anywhere state NEW,RELATED,ESTABLISHED | ||
+ | ACCEPT icmp -- anywhere 192.168.1.0/24 state RELATED,ESTABLISHED | ||
+ | </file> | ||
+ | |||
+ | > Le web et le ping fonctionne : | ||
+ | |||
+ | * De la machine A vers la machine B : | ||
+ | <code user> | ||
+ | ping 192.168.1.2</code> | ||
+ | <file config retour de la commande> | ||
<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. | ||
64 bytes from 192.168.1.2: icmp_req=1 ttl=63 time=0.402 ms | 64 bytes from 192.168.1.2: icmp_req=1 ttl=63 time=0.402 ms | ||
Ligne 383: | Ligne 455: | ||
--- 192.168.1.2 ping statistics --- | --- 192.168.1.2 ping statistics --- | ||
3 packets transmitted, 3 received, 0% packet loss, time 1998ms | 3 packets transmitted, 3 received, 0% packet loss, time 1998ms | ||
- | rtt min/avg/max/mdev = 0.306/0.341/0.402/0.043 ms</code> | + | rtt min/avg/max/mdev = 0.306/0.341/0.402/0.043 ms</file> |
:-D | :-D | ||
- | * Et de la machine B vers la machine A : | + | * De la machine B vers la machine A : |
<code user> | <code user> | ||
ping 192.168.0.22</code> | ping 192.168.0.22</code> | ||
- | <code>PING 192.168.0.22 (192.168.0.22) 56(84) bytes of data. | + | <file config retour de la commande>PING 192.168.0.22 (192.168.0.22) 56(84) bytes of data. |
64 bytes from 192.168.0.22: icmp_req=1 ttl=63 time=0.370 ms | 64 bytes from 192.168.0.22: icmp_req=1 ttl=63 time=0.370 ms | ||
64 bytes from 192.168.0.22: icmp_req=2 ttl=63 time=0.341 ms | 64 bytes from 192.168.0.22: icmp_req=2 ttl=63 time=0.341 ms | ||
Ligne 397: | Ligne 469: | ||
--- 192.168.0.22 ping statistics --- | --- 192.168.0.22 ping statistics --- | ||
3 packets transmitted, 3 received, 0% packet loss, time 2000ms | 3 packets transmitted, 3 received, 0% packet loss, time 2000ms | ||
- | rtt min/avg/max/mdev = 0.326/0.345/0.370/0.028 ms</code> | + | rtt min/avg/max/mdev = 0.326/0.345/0.370/0.028 ms</file> |
8-) | 8-) | ||
- | * Pour voir ce qu'on a fait : | + | <note tip> |
- | <code root>iptables -L -t nat && iptables -L</code> | + | |
+ | **__Quelques exlications :__** | ||
+ | |||
+ | * __On autorise toute connexion pour le LAN__ | ||
+ | |||
+ | iptables -A FORWARD -i eth1 -j ACCEPT | ||
+ | iptables -A FORWARD -o eth1 -j ACCEPT | ||
+ | |||
+ | iptables -L | ||
+ | Chain INPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | Chain FORWARD (policy DROP) | ||
+ | target prot opt source destination | ||
+ | ACCEPT all -- anywhere anywhere | ||
+ | ACCEPT all -- anywhere anywhere | ||
+ | Chain OUTPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | |||
+ | > Ce qui entre ''-i'' et ce qui sort ''-o'' | ||
+ | > La navigation internet depuis un ordi du réseau 192.168.1.0/24 est possible | ||
+ | > ping de l'un de ces ordi vers google est ok | ||
+ | |||
+ | * __Dans les deux sens d'une interface à l'autre__ : | ||
+ | |||
+ | iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT | ||
+ | iptables -A FORWARD -o eth1 -i eth0 -j ACCEPT | ||
+ | |||
+ | > On constate que sans préciser de protocole ni de réseau, cela revient au même que précédemment | ||
+ | |||
+ | iptables -L | ||
+ | Chain INPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | Chain FORWARD (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | ACCEPT all -- anywhere anywhere | ||
+ | ACCEPT all -- anywhere anywhere | ||
+ | Chain OUTPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | |||
+ | > On autorise le passage de eth1 à eth0 et de eth0 à eth1 | ||
+ | |||
+ | * __Avec suivi de connexion d'une interface à l'autre avec des règles différentes__ : | ||
+ | |||
+ | iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT | ||
+ | iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0 -d 192.168.1.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT | ||
+ | |||
+ | > On autorise le passage de tous protocoles avec suivi de connexion, de eth1 à eth0, et inversement, en précisant les réseaux source et destination. | ||
+ | |||
+ | iptables -L | ||
+ | Chain INPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | Chain FORWARD (policy DROP) | ||
+ | target prot opt source destination | ||
+ | ACCEPT all -- 192.168.1.0/24 anywhere state NEW,RELATED,ESTABLISHED | ||
+ | ACCEPT all -- anywhere 192.168.1.0/24 state RELATED,ESTABLISHED | ||
+ | Chain OUTPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | |||
+ | > Là encore la navigation est possible pour un ordi du sous-réseau 192.168.1.0/24 | ||
+ | > Et le ping fonctionne vers google et l'ordi 192.168.0.22 sans besoin d'ajouter de règle imcp car on a autorisé TOUS les protocoles | ||
+ | |||
+ | **Enfin il est inutile d'ajouter une règle udp pour la résolution de nom si le serveur de nom est installé et correctement paramétré.**\\ | ||
+ | Dans le cas contraire on ajouterait : | ||
+ | <code root> | ||
+ | iptables -t filter -A FORWARD -p udp --dport 53 -j ACCEPT | ||
+ | </code> | ||
+ | |||
+ | Ou pour être plus précis : | ||
+ | |||
+ | <code root> | ||
+ | iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -p udp\ | ||
+ | --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT | ||
+ | |||
+ | iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0 -d 192.168.1.0/24 -p udp\ | ||
+ | --dport 53 -m state --state ESTABLISHED -j ACCEPT | ||
+ | </code> | ||
+ | |||
+ | </note> | ||
====Dépendance du NAT et des chaînes FILTER sur l'interface interne (eth1)==== | ====Dépendance du NAT et des chaînes FILTER sur l'interface interne (eth1)==== | ||
Ligne 450: | Ligne 600: | ||
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 ! | #mais 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\ |
- | -d 0.0.0.0/0 -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT | + | tcp -m state --state NEW,ESTABLISHED -j ACCEPT |
- | iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0\ | + | iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0 -d 192.168.1.0/24 -p\ |
- | -d 192.168.1.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT | + | tcp -m state --state ESTABLISHED -j ACCEPT |
- | iptables -t filter -A FORWARD -p icmp -j ACCEPT | + | iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -p icmp\ |
+ | -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT | ||
+ | |||
+ | iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0 -d 192.168.1.0/24 -p icmp\ | ||
+ | -m state --state ESTABLISHED,RELATED -j ACCEPT | ||
+ | |||
+ | #décocher les deux règles ci-dessous si un serveur DNS n'est pas installé sur la passerelle | ||
+ | |||
+ | #iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -p udp\ | ||
+ | # --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT | ||
+ | |||
+ | #iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0 -d 192.168.1.0/24 -p udp\ | ||
+ | # --dport 53 -m state --state ESTABLISHED -j ACCEPT | ||
+ | ##Règles icmp pour INPUT et OUTPUT | ||
iptables -t filter -A INPUT -p icmp -i eth0 -m conntrack\ | iptables -t filter -A INPUT -p icmp -i eth0 -m conntrack\ | ||
--ctstate ESTABLISHED,RELATED -j ACCEPT | --ctstate ESTABLISHED,RELATED -j ACCEPT | ||
Ligne 477: | Ligne 640: | ||
iptables -t filter -A OUTPUT -o eth0 -p udp -m udp --dport 53\ | iptables -t filter -A OUTPUT -o eth0 -p udp -m udp --dport 53\ | ||
- | -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | + | -m state --state NEW,ESTABLISHED -j ACCEPT |
iptables -t filter -A INPUT -i eth0 -p udp -m udp --sport 53\ | iptables -t filter -A INPUT -i eth0 -p udp -m udp --sport 53\ | ||
- | -m state --state RELATED,ESTABLISHED -j ACCEPT | + | -m state --state ESTABLISHED -j ACCEPT |
iptables -t filter -A OUTPUT -o eth1 -p udp -m udp --dport 53\ | iptables -t filter -A OUTPUT -o eth1 -p udp -m udp --dport 53\ | ||
- | -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | + | -m state --state NEW,ESTABLISHED -j ACCEPT |
iptables -t filter -A INPUT -i eth1 -p udp -m udp --sport 53\ | iptables -t filter -A INPUT -i eth1 -p udp -m udp --sport 53\ | ||
- | -m state --state RELATED,ESTABLISHED -j ACCEPT | + | -m state --state ESTABLISHED -j ACCEPT |
iptables -t filter -A OUTPUT -o eth0 -p tcp -m multiport --dports\ | iptables -t filter -A OUTPUT -o eth0 -p tcp -m multiport --dports\ | ||
- | 80,443,8000 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | + | 80,443,8000 -m state --state NEW,ESTABLISHED -j ACCEPT |
iptables -t filter -A INPUT -i eth0 -p tcp -m multiport --sports\ | iptables -t filter -A INPUT -i eth0 -p tcp -m multiport --sports\ | ||
- | 80,443,8000 -m state --state RELATED,ESTABLISHED -j ACCEPT | + | 80,443,8000 -m state --state ESTABLISHED -j ACCEPT |
iptables -A OUTPUT -o eth1 -p tcp -m multiport --dports 80,443,8000 -j ACCEPT | iptables -A OUTPUT -o eth1 -p tcp -m multiport --dports 80,443,8000 -j ACCEPT | ||
Ligne 508: | Ligne 671: | ||
====Revisiter ICMP ==== | ====Revisiter ICMP ==== | ||
- | Puisqu'on a abordé la question du ping, revenons sur cette règle \\ ''iptables -A FORWARD -p icmp -j ACCEPT''\\ un peut trop permissive par rapport à la bonne vielle attaque doS (denial of service attack), ou "[[http://fr.wikipedia.org/wiki/Attaque_par_d%C3%A9ni_de_service|attaque par déni de service]]".\\ | + | Puisqu'on a abordé la question du ping, revenons sur cette règle \\ |
+ | |||
+ | ''iptables -A FORWARD -p icmp -j ACCEPT''\\ | ||
+ | |||
+ | un peu trop permissive par rapport à la bonne vieille attaque doS (denial of service attack), ou "[[http://fr.wikipedia.org/wiki/Attaque_par_d%C3%A9ni_de_service|attaque par déni de service]]".\\ | ||
Cette chaîne va être utilisée pour bloquer seulement certains paquets ICMP provenant de l'internet (WAN).\\ | Cette chaîne va être utilisée pour bloquer seulement certains paquets ICMP provenant de l'internet (WAN).\\ | ||
Ligne 627: | Ligne 794: | ||
iptables -P FORWARD DROP | iptables -P FORWARD DROP | ||
- | iptables -A FORWARD -i eth1 -o eth0 -d 192.168.1.0/24 -s 0.0.0.0/0 -j ACCEPT | + | #On remets "masquerade" car on a flushé: |
- | iptables -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0\ | + | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE |
- | -d 192.168.1.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT | + | |
- | iptables -A FORWARD -i eth1 -o eth0 -p tcp -m multiport\ | + | iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -p tcp\ |
- | --dports 80,443,8000 -j ACCEPT | + | -m state --state NEW,ESTABLISHED -j ACCEPT |
- | iptables -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0\ | + | |
- | -d 192.168.1.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT | + | 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 -j ACCEPT | ||
+ | |||
+ | #Si pas de DNS configurer on dé-commente les règles udp suivantes : | ||
+ | |||
+ | #iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -p udp\ | ||
+ | # --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT | ||
+ | |||
+ | #iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0 -d 192.168.1.0/24 -p udp\ | ||
+ | # --dport 53 -m state --state ESTABLISHED -j ACCEPT | ||
+ | |||
+ | iptables -t filter -A FORWARD -p icmp -j ACCEPT | ||
iptables -N icmp_packets | iptables -N icmp_packets | ||
Ligne 654: | Ligne 831: | ||
--icmp-type echo-reply -j DROP | --icmp-type echo-reply -j DROP | ||
- | #On remets "masquerade" car on a flushé: | ||
- | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | ||
</code> | </code> | ||
+ | |||
+ | > La navigation web fonctionne pour l'ordi B | ||
+ | > Les ping de même | ||
+ | |||
====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 excepté 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 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**. | + | 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, compte ici. | ||
+ | </note> | ||
- | 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. | + | On conserve ce qu'on a fait précédemment en ajoutant simplement les commandes du [[doc:reseau: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 690: | Ligne 872: | ||
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 FORWARD (FILTER) |
- | # 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\ |
- | -d 0.0.0.0/0 -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT | + | -m state --state NEW,ESTABLISHED -j ACCEPT |
- | + | ||
- | iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0\ | + | iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0 -d 192.168.1.0/24 -p tcp\ |
- | -d 192.168.1.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT | + | -m state --state ESTABLISHED -j ACCEPT |
+ | |||
+ | #Si pas de DNS configurer on dé-commente les règles udp suivantes : | ||
+ | |||
+ | #iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -p udp\ | ||
+ | # --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT | ||
+ | #iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0 -d 192.168.1.0/24 -p udp\ | ||
+ | # --dport 53 -m state --state ESTABLISHED -j ACCEPT | ||
+ | |||
iptables -t filter -A FORWARD -p icmp -j ACCEPT | iptables -t filter -A FORWARD -p icmp -j ACCEPT | ||
- | + | ||
+ | # règles icmp sur INPUT et OUTPUT | ||
iptables -t filter -A INPUT -p icmp -i eth0 -m conntrack\ | iptables -t filter -A INPUT -p icmp -i eth0 -m conntrack\ | ||
--ctstate ESTABLISHED,RELATED -j ACCEPT | --ctstate ESTABLISHED,RELATED -j ACCEPT | ||
Ligne 717: | Ligne 908: | ||
iptables -t filter -A OUTPUT -o eth0 -p udp -m udp --dport 53\ | iptables -t filter -A OUTPUT -o eth0 -p udp -m udp --dport 53\ | ||
- | -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | + | -m state --state NEW,ESTABLISHED -j ACCEPT |
iptables -t filter -A INPUT -i eth0 -p udp -m udp --sport 53\ | iptables -t filter -A INPUT -i eth0 -p udp -m udp --sport 53\ | ||
- | -m state --state RELATED,ESTABLISHED -j ACCEPT | + | -m state --state ESTABLISHED -j ACCEPT |
iptables -t filter -A OUTPUT -o eth1 -p udp -m udp --dport 53\ | iptables -t filter -A OUTPUT -o eth1 -p udp -m udp --dport 53\ | ||
- | -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | + | -m state --state NEW,ESTABLISHED -j ACCEPT |
iptables -t filter -A INPUT -i eth1 -p udp -m udp --sport 53\ | iptables -t filter -A INPUT -i eth1 -p udp -m udp --sport 53\ | ||
- | -m state --state RELATED,ESTABLISHED -j ACCEPT | + | -m state --state ESTABLISHED -j ACCEPT |
iptables -t filter -A OUTPUT -o eth0 -p tcp -m multiport --dports\ | iptables -t filter -A OUTPUT -o eth0 -p tcp -m multiport --dports\ | ||
- | 80,443,8000 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | + | 80,443,8000 -m state --state NEW,ESTABLISHED -j ACCEPT |
iptables -t filter -A INPUT -i eth0 -p tcp -m multiport --sports\ | iptables -t filter -A INPUT -i eth0 -p tcp -m multiport --sports\ | ||
- | 80,443,8000 -m state --state RELATED,ESTABLISHED -j ACCEPT | + | 80,443,8000 -m state --state ESTABLISHED -j ACCEPT |
iptables -A OUTPUT -o eth1 -p tcp -m multiport --dports 80,443,8000 -j ACCEPT | iptables -A OUTPUT -o eth1 -p tcp -m multiport --dports 80,443,8000 -j ACCEPT | ||
Ligne 789: | Ligne 980: | ||
* 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> | + | <file config retour de la commande> |
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. | PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. | ||
64 bytes from 192.168.1.2: icmp_req=1 ttl=63 time=0.341 ms | 64 bytes from 192.168.1.2: icmp_req=1 ttl=63 time=0.341 ms | ||
Ligne 797: | Ligne 988: | ||
2 packets transmitted, 2 received, 0% packet loss, time 999ms | 2 packets transmitted, 2 received, 0% packet loss, time 999ms | ||
rtt min/avg/max/mdev = 0.316/0.328/0.341/0.022 ms | rtt min/avg/max/mdev = 0.316/0.328/0.341/0.022 ms | ||
- | </code> | + | </file> |
=) | =) | ||
Ligne 804: | Ligne 995: | ||
<code user> ping 192.168.0.22</code> | <code user> ping 192.168.0.22</code> | ||
- | <code>PING 192.168.0.22 (192.168.0.22) 56(84) bytes of data. | + | <file config retour de la commande>PING 192.168.0.22 (192.168.0.22) 56(84) bytes of data. |
64 bytes from 192.168.0.22: icmp_req=1 ttl=63 time=0.538 ms | 64 bytes from 192.168.0.22: icmp_req=1 ttl=63 time=0.538 ms | ||
64 bytes from 192.168.0.22: icmp_req=2 ttl=63 time=0.312 ms | 64 bytes from 192.168.0.22: icmp_req=2 ttl=63 time=0.312 ms | ||
Ligne 811: | Ligne 1002: | ||
--- 192.168.0.22 ping statistics --- | --- 192.168.0.22 ping statistics --- | ||
3 packets transmitted, 3 received, 0% packet loss, time 1998ms | 3 packets transmitted, 3 received, 0% packet loss, time 1998ms | ||
- | rtt min/avg/max/mdev = 0.312/0.388/0.538/0.108 ms</code> | + | rtt min/avg/max/mdev = 0.312/0.388/0.538/0.108 ms</file> |
8-) | 8-) | ||
Ligne 819: | Ligne 1010: | ||
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é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é. | + | Il faut revenir sur les règles INPUT et OUTPUT que nous avons récupérée provisoirement du [[doc:reseau: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 914: | Ligne 1105: | ||
</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 959: | Ligne 1155: | ||
/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 | + | #permettre le passage de tcp entre les deux interfaces eternet de la passerelle |
- | /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 eth1 -o eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -p tcp\ |
- | /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 | + | -m state --state NEW,ESTABLISHED -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 -j ACCEPT | ||
+ | #Si pas de DNS configurer on dé-commente les règles udp suivantes : | ||
+ | #iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -p udp\ | ||
+ | # --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT | ||
+ | #iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0 -d 192.168.1.0/24 -p udp\ | ||
+ | # --dport 53 -m state --state ESTABLISHED -j ACCEPT | ||
+ | |||
+ | #autoriser le ping avec le sous-réseau 192.168.1.0/24 | ||
/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 | #accepter le ping entre les réseaux locaux | ||
/sbin/iptables -t filter -A INPUT -p icmp -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | /sbin/iptables -t filter -A INPUT -p icmp -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | ||
Ligne 1004: | Ligne 1210: | ||
/sbin/iptables -A syn_flood -j DROP | /sbin/iptables -A syn_flood -j DROP | ||
#autoriser la connexion avec les serveurs DNS | #autoriser la connexion avec les serveurs DNS | ||
- | /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 OUTPUT -o eth0 -p udp -m udp --dport 53 -m state --state NEW,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 INPUT -i eth0 -p udp -m udp --sport 53 -m state --state 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 OUTPUT -o eth1 -p udp -m udp --dport 53 -m state --state NEW,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 INPUT -i eth1 -p udp -m udp --sport 53 -m state --state ESTABLISHED -j ACCEPT |
#autoriser la navigation web | #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 OUTPUT -o eth0 -p tcp -m multiport --dports 80,443,8000 -m state --state NEW,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 -t filter -A INPUT -i eth0 -p tcp -m multiport --sports 80,443,8000 -m state --state ESTABLISHED -j ACCEPT |
/sbin/iptables -A OUTPUT -o eth1 -p tcp -m multiport --dports 80,443,8000 -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 | /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 | #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 : | # 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 INPUT -i eth0 -s 192.168.0.22 -d 192.168.0.1 -p tcp --sport 631 -m state --state NEW,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 | + | /sbin/iptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.22 -p tcp --dport 631 -m state --state NEW,ESTABLISHED -j ACCEPT |
#créer une chaîne utilisateur pour les connexion ssh, les loguer et les accepter | #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 | ||
Ligne 1099: | Ligne 1305: | ||
exit $RETVAL | exit $RETVAL | ||
</code> | </code> | ||
+ | |||
+ | <note tip> | ||
+ | **Pour autoriser la plateforme de jeux STEAM** | ||
+ | |||
+ | <code root> | ||
+ | /sbin/iptables -A INPUT -i eth1 -p udp -m udp --sport 27000 -m\ | ||
+ | state --state NEW,ESTABLISHED -j ACCEPT | ||
+ | /sbin/iptables -A INPUT -i eth0 -p udp -m udp --sport 27000 -m\ | ||
+ | state --state ESTABLISHED -j ACCEPT | ||
+ | </code> | ||
+ | |||
+ | Merci à robert2a pour cet ajout 8-) | ||
+ | |||
+ | [[http://debian-facile.org/viewtopic.php?pid=102028#p102028|Voir ce fil]] | ||
+ | </note> | ||
* Pour l'installation du script | * Pour l'installation du script | ||
Ligne 1134: | Ligne 1355: | ||
Voici une autre maxime à laquelle il faudra se tenir. | Voici une autre maxime à laquelle il faudra se tenir. | ||
- | On voit dans de nombreux wiki l'ajout aberrant de cette règle :\\ | + | 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''\\ | ''IPTABLES -I INPUT -i <interface-interne> -p udp --dport 67:68 --sport 67:68 -j ACCEPT''\\ | ||
Ligne 1157: | Ligne 1379: | ||
On laisse le terminal (de la passerelle) en état d'attente, et on passe sur le terminal du client 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) : | + | * Côté **client** DHCP (ordinateur B) on annule le bail DHCP : |
- | + | ||
- | -On commence par annuler le bail DHCP.\\ Comme ceci : | + | |
<code root> | <code root> | ||
Ligne 1166: | Ligne 1386: | ||
- | -Il n'y a plus d'IP : | + | >Il n'y a plus d'IP : |
<code root>eth0 Link encap:Ethernet HWaddr 00:1e:0b:67:9b:b7 | <code root>eth0 Link encap:Ethernet HWaddr 00:1e:0b:67:9b:b7 | ||
adr inet6: xxxxxxxxxxxx Scope:Lien</code> | adr inet6: xxxxxxxxxxxx Scope:Lien</code> | ||
- | - On lance une requête DHCP | + | * On lance une requête DHCP |
<code root> | <code root> | ||
dhclient eth0 | dhclient eth0 | ||
</code> | </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) : | + | * Côté serveur DHCP : |
+ | Observez ce que nous dit "tcpdump" : | ||
<code> | <code> | ||
Ligne 1195: | Ligne 1417: | ||
</code> | </code> | ||
- | - Et en plus l'IP de l'ordinateur B a bien changé ! | + | * Et l'IP de l'ordinateur client DHCP a bien changé ! |
<code>INET_IP=`ifconfig $INET_IFACE | grep inet | \ | <code>INET_IP=`ifconfig $INET_IFACE | grep inet | \ |