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 Prochaine révision Les deux révisions suivantes | ||
doc:reseau:iptables-pare-feu-pour-une-passerelle [06/11/2014 17:41] Hypathie [Détail pour les protocole TCP et UDP] |
doc:reseau:iptables-pare-feu-pour-une-passerelle [24/09/2015 17:41] milou [Les règles du pare-feu pas à pas] |
||
---|---|---|---|
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 <...> FIXME | ||
Ligne 15: | Ligne 14: | ||
===== 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 33: | ||
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é [[atelier:chantier:iptables-pare-feu-pour-un-client#pour-les-fadas-du-scripting-shell|ce pare-feu]].\\ | ||
Ligne 41: | Ligne 40: | ||
- 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\\ | - [[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\\ | ||
- | - 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 [[atelier:chantier: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 66: | ||
<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 72: | ||
--- 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 79: | ||
<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 91: | ||
<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 101: | ||
<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 119: | ||
* 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 134: | ||
<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 142: | ||
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 148: | ||
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 159: | ||
--- 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 165: | ||
* 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 177: | ||
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 186: | ||
<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 200: | ||
--- 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 271: | ||
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 300: | ||
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 310: | ||
<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 321: | ||
-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 341: | ||
**__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 360: | ||
- 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 454: | ||
--- 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 468: | ||
--- 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 599: | ||
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 639: | ||
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 627: | Ligne 789: | ||
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 826: | ||
--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 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, comptes 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 [[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 690: | Ligne 867: | ||
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 903: | ||
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 914: | Ligne 1100: | ||
</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 934: | Ligne 1125: | ||
# 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 | ||
Ligne 961: | Ligne 1138: | ||
/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 | ||
+ | ##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 | ||
/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 | ||
- | /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 | + | #permettre le passage de tcp entre les deux interfaces eternet de la passerelle |
- | /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 -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 | ||
/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 | ||
/sbin/iptables -t filter -A OUTPUT -p icmp -o eth0 -m conntrack --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 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 | /sbin/iptables -t filter -A OUTPUT -p icmp -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | ||
- | /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 | ||
/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 | ||
Ligne 1015: | Ligne 1204: | ||
/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 | ||
+ | /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 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 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,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 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,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 | ||
/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 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j InComingSSH | /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 | ||
Ligne 1022: | Ligne 1226: | ||
/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 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 | /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 -N ftp_in_accept | /sbin/iptables -N ftp_in_accept | ||
/sbin/iptables -I INPUT -i eth0 -p tcp --sport 21 -m state --state ESTABLISHED,RELATED -j ftp_in_accept | /sbin/iptables -I INPUT -i eth0 -p tcp --sport 21 -m state --state ESTABLISHED,RELATED -j ftp_in_accept | ||
Ligne 1030: | Ligne 1235: | ||
/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 20 -m state --state ESTABLISHED,RELATED -j ACCEPT | ||
/sbin/iptables -I INPUT -i eth1 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT | /sbin/iptables -I INPUT -i eth1 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT | ||
+ | echo "set up firewall_gateway.sh .........> [OK]" | ||
+ | /sbin/iptables-save > /etc/firewall_gateway.sh | ||
+ | echo "iptables-save > /etc/firewall_gateway.sh .........> [OK]" | ||
+ | RETVAL=$? | ||
+ | ;; | ||
+ | '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 1044: | Ligne 1300: | ||
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 | ||
- | 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]].\\ | + | 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 | * Ou si l'on préfère utiliser les commandes iptables-save et iptables-restore | ||
Ligne 1102: | Ligne 1373: | ||
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 1111: | Ligne 1380: | ||
- | -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 1140: | Ligne 1411: | ||
</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 | \ |