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.
Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:reseau:iptables-pare-feu-pour-une-passerelle [14/10/2014 16:24] Hypathie créée |
doc:reseau:iptables-pare-feu-pour-une-passerelle [01/11/2015 18:09] milou [iptables: un pare-feu pour une passerelle] |
||
---|---|---|---|
Ligne 2: | Ligne 2: | ||
* Objet : installer un pare-feu pour une passerelle | * Objet : installer un pare-feu pour une passerelle | ||
- | * Niveau requis : FIXME {{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>à-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 : [[:url-invalide | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) FIXME | + | * 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 : Ce wiki prend la suite de celui sur iptables, [[http://wiki.debian-facile.org/atelier:chantier:iptables-pare-feu-pour-un-client#firewall-clientsh-comme-script-init|un pare-feu pour un client]] et complète [[http://wiki.debian-facile.org/atelier:chantier:dhcp|installer DHCP sur une passerelle-routeur debian]].\\ | + | **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. ** |
- | Au programme, description avancée de la table NAT, et des protocoles imcp et tcp. ** | + | |
+ | **Nota :** Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
- | Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
===== 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 35: | 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''. | ||
- | ===Objectif du wiki === | ||
- | Nous allons nous attacher en détail à la table NAT d'iptables.\\ | ||
- | |||
- | Et pour ce faire, nous allons nous attacher principalement à installer un pare-feu sur debian-routeur qui prendra en charge les deux cartes réseaux, c'est-à-dire qu'il permettra principalement de protéger le réseau B, tout en lui laissant la possibilité d'accéder au web; il devra aussi permettre la communication entre le réseau A et le réseau B ; ou encore permettre aux ordinateurs du réseau B d'utiliser les services ssh ; http(s) ; cups, DHCP ... mais de manière sécurisée. | ||
=====La table de routage===== | =====La table de routage===== | ||
Ligne 59: | 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 65: | 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 72: | 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 84: | 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 94: | 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 112: | 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 126: | 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 134: | 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 140: | 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 151: | 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> |
+ | =) | ||
- | *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> |
+ | |||
+ | :-| | ||
Et oui, l'ordinateur A n'est pas derrière la passerelle, et même si sa table de routage est correctement configurée, elle ne peut lui indiquer la route vers le sous réseau 192.168.1.0/24 dont les adresses IP sont, pour tout réseau extérieur au réseau B, y compris le réseau A, identiques à l'IP de la passerelle.\\ | Et oui, l'ordinateur A n'est pas derrière la passerelle, et même si sa table de routage est correctement configurée, elle ne peut lui indiquer la route vers le sous réseau 192.168.1.0/24 dont les adresses IP sont, pour tout réseau extérieur au réseau B, y compris le réseau A, identiques à l'IP de la passerelle.\\ | ||
Ligne 166: | 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 175: | 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 189: | 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 197: | Ligne 209: | ||
Pour se l'éviter, il faut un script init.d (update-rc.d)\\ | Pour se l'éviter, il faut un script init.d (update-rc.d)\\ | ||
Ne le faites pas sur la passerelle, à la limite sur l'ordinateur A.\\ | Ne le faites pas sur la passerelle, à la limite sur l'ordinateur A.\\ | ||
- | Sur la passerelle, le suivi de connexion pour le protocole imcp devrait être suffisant.\\ | + | Sur la passerelle, le suivi de connexion pour le protocole ICMP devrait être suffisant.\\ |
Et pour l'ordinateur A, grâce à la passerelle et à la maîtrise du DNAT/SNAT, on pourrait faire en sorte que l'ordinateur reçoive un ping de la passerelle quand elle reçoit un ping à destination du réseau B. | Et pour l'ordinateur A, grâce à la passerelle et à la maîtrise du DNAT/SNAT, on pourrait faire en sorte que l'ordinateur reçoive un ping de la passerelle quand elle reçoit un ping à destination du réseau B. | ||
</note> | </note> | ||
Ligne 207: | Ligne 219: | ||
La traduction d'adresse est gérée avec les chaînes PREROUTING, POSTROUTING et OUTPUT.\\ | La traduction d'adresse est gérée avec les chaînes PREROUTING, POSTROUTING et OUTPUT.\\ | ||
- | Dans la chaîne PREROUTING (avant routage), on peut modifier l'adresse de destination des paquets qui arrivent sur notre passerelle mais qui doivent aller sur le réseau B. S'ils ne lui sont pas destiné, et qu'au niveau de la passerelle on détermine une redirection pour l'hôte de notre choix, ce serait là faire du DNAT (du "NAT destination").\\ | + | **Dans la chaîne PREROUTING** (avant routage), on peut modifier l'adresse de destination des paquets qui arrivent sur notre passerelle mais qui doivent aller sur le réseau B. S'ils ne lui sont pas destiné, et qu'au niveau de la passerelle on détermine une redirection pour l'hôte de notre choix, ce serait là faire du DNAT (du "NAT destination").\\ |
- | Dans la chaîne POSTROUTING, (après routage), on peut modifier l'adresse source ; celle des hôtes du réseau B, ou d'une seul hôte du réseau B, la passerelle pourrait aussi d'indiquer au réseau A une autre adresse pour l'ordinateur que celle qui est véritablement la sienne. Ce serait là faire du SNAT (NAT source).\\ | + | **Dans la chaîne POSTROUTING**, (après routage), on peut modifier l'adresse source ; celle des hôtes du réseau B, ou d'une seul hôte du réseau B, la passerelle pourrait aussi d'indiquer au réseau A une autre adresse pour l'ordinateur que celle qui est véritablement la sienne. Ce serait là faire du SNAT (NAT source).\\ |
- | Dans la chaîne POSTROUTING, on peut comme nous le savons, "l'IP Masquerade".\\ | + | **Dans la chaîne POSTROUTING, "l'IP Masquerade"**.\\ |
Le masquage d'adresse IP est une forme de traduction d'adresse réseau (NAT), et ressemble au SNAT. Cela permet aux ordinateurs d'un réseau privé n'ayant aucune adresse IP d'accéder à Internet via l'adresser IP unique d'une machine Linux.\\ | Le masquage d'adresse IP est une forme de traduction d'adresse réseau (NAT), et ressemble au SNAT. Cela permet aux ordinateurs d'un réseau privé n'ayant aucune adresse IP d'accéder à Internet via l'adresser IP unique d'une machine Linux.\\ | ||
Voir : [[http://www.inetdoc.net/guides/iptables-tutorial/nattable.html]] | Voir : [[http://www.inetdoc.net/guides/iptables-tutorial/nattable.html]] | ||
Ligne 253: | Ligne 265: | ||
Pour ce qui concerne masquerade et snat, ce qui se passe pour un paquet est représenté par la partie du schéma au dessus de la ligne transversale FORWARD.\\ | Pour ce qui concerne masquerade et snat, ce qui se passe pour un paquet est représenté par la partie du schéma au dessus de la ligne transversale FORWARD.\\ | ||
- | Ce schéma tente de mettre en valeur un pré-requis pour ces paquets qui entrent et sorte par eth0 et eth1 ne sont routés que si de façon sous-jacente, ils sont autoriser à entrer et sortir.\\ | + | Ce schéma tente de mettre en valeur deux pré-requis ; |
+ | * 1) la chaîne FORWARD laisse passer dans les deux sens le flux qu'on veut autoriser; | ||
+ | * 2) les chaînes INPUT et OUTPUT laisse entrer et sortir ces mêmes ces paquets, non seulement par **eth0** mais aussi par **eth1**. | ||
En d'autres termes, la table **FILTER** et les chaînes FORWARD, INPUT et OUTPUT conditionnent le POSTEROUTING (et le PREROUTING).\\ | En d'autres termes, la table **FILTER** et les chaînes FORWARD, INPUT et OUTPUT conditionnent le POSTEROUTING (et le PREROUTING).\\ | ||
- | Ré-préquis déterminant le fait que l'ordinateur B puisse recevoir des paquets, et en envoyer. | + | Ré-préquis qui déterminent le fait que l'ordinateur B puisse recevoir des paquets, et en envoyer. |
- | Ainsi, si La commande installée précédemment \\ ''iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE''\\ permettait la transmission des paquets du réseau interne (eth1), au externe (eth0), et vice-versa c'est parce qu'on avait laissé la police par défaut pour le pare-feu de la passerelle. | + | Ainsi, si La commande installée précédemment \\ |
+ | |||
+ | ''iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE''\\ | ||
+ | |||
+ | permettait la transmission des paquets du réseau interne (eth1), au externe (eth0), et vice-versa c'est parce qu'on avait laissé la police par défaut pour la tables FILTER du pare-feu de la passerelle. | ||
* Nous obtenons pour l'instant : | * Nous obtenons pour l'instant : | ||
- | <code root>iptables -L -t nat</code> | + | <code root>iptables -L -t nat && iptables -L</code> |
- | <code> | + | <file config retour de la commande> |
Chain PREROUTING (policy ACCEPT) | Chain PREROUTING (policy ACCEPT) | ||
- | target prot opt source destination | + | target prot opt source destination |
Chain INPUT (policy ACCEPT) | Chain INPUT (policy ACCEPT) | ||
- | target prot opt source destination | + | target prot opt source destination |
Chain OUTPUT (policy ACCEPT) | Chain OUTPUT (policy ACCEPT) | ||
- | target prot opt source destination | + | target prot opt source destination |
Chain POSTROUTING (policy ACCEPT) | Chain POSTROUTING (policy ACCEPT) | ||
- | target prot opt source destination | + | target prot opt source destination |
- | MASQUERADE all -- anywhere anywhere | + | MASQUERADE all -- anywhere anywhere |
- | </code> | + | Chain INPUT (policy ACCEPT) |
+ | target prot opt source destination | ||
+ | |||
+ | Chain FORWARD (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | |||
+ | Chain OUTPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | </file> | ||
====Dépendance entre NAT et FILTER (FORWARD)==== | ====Dépendance entre NAT et FILTER (FORWARD)==== | ||
Ligne 284: | 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 296: | 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 316: | 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 de ces chaînes INPUT et OUTPUT de la table FILTER. | + | INPUT et OUTPUT, pour ne pas avoir à répéter ce rappel, plus bas, quand nous mettrons en place les règles des chaînes INPUT et OUTPUT de la table FILTER. |
**__Et pour redonner accès à internet à l'ordinateur B.__** | **__Et pour redonner accès à internet à l'ordinateur B.__** | ||
Ligne 335: | 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 les connexions (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, de 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 374: | 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 388: | 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 -t nat -L FORWARD -t filter</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 441: | 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 468: | 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 489: | Ligne 661: | ||
</code> | </code> | ||
- | Super tout fonctionne : nous avons un pare-feu rudimentaire mais dont la politique par défaut pour FILTER est à DROP ; il permet de filtrer les protocoles, entrant et ressortant, essentiels à notre réseau B pour qu'il accède au web, et rejette les autres ! | + | Super ! Tout fonctionne =) |
- | Mais ce n'est pas suffisant. Nous allons détailler davantage ce qu'on laisse entrer, et surtout nous allons le loger. | + | Nous avons un pare-feu rudimentaire mais dont la politique par défaut pour FILTER est à DROP ; il permet de filtrer les protocoles, entrant et ressortant, essentiels à notre réseau B pour qu'il accède au web, et rejette les autres ! |
+ | |||
+ | Mais ce n'est pas suffisant. Nous allons détailler davantage ce qu'on laisse entrer, et surtout nous allons envoyé dans les logs certains protocoles qu'on utilise. | ||
=====Un pare-feu avancé pour le routeur-debian===== | =====Un pare-feu avancé pour le routeur-debian===== | ||
Ligne 497: | 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 505: | Ligne 683: | ||
Ils proviennent de la couche 2 (Liaison de données) du modèle OSI et selon le standard, il ne devrait y avoir de paquets qui utilisent la fragmentation.\\ | Ils proviennent de la couche 2 (Liaison de données) du modèle OSI et selon le standard, il ne devrait y avoir de paquets qui utilisent la fragmentation.\\ | ||
Lorsque cette situation se présente, nous sommes en présence d'un déni de service (DoS). | Lorsque cette situation se présente, nous sommes en présence d'un déni de service (DoS). | ||
- | Nous allons donc essayer de réduire les risques en repérant les paquets fragmentés qui n'ont pas lieu d'être, pour les rejeter. | + | Nous allons donc essayer de réduire les risques en rejetant les paquets fragmentés qui n'ont pas lieu d'être. |
* Créons une chaîne utilisateur : | * Créons une chaîne utilisateur : | ||
Ligne 561: | Ligne 739: | ||
* Le type ICMP 6 : Alternate Host Address | * Le type ICMP 6 : Alternate Host Address | ||
Pour modifier l'adresse hôte. | Pour modifier l'adresse hôte. | ||
- | * Type IMCP 7 : ceux non-assignés | + | * Type ICMP 7 : ceux non-assignés |
* Type ICMP 9 "Router Advertisement" : voir RFC 1256 | * Type ICMP 9 "Router Advertisement" : voir RFC 1256 | ||
- | * Type IMCP 10 "Routeur ICMP sollicitation" : voir aussi RFC 1256 | + | * Type ICMP 10 "Routeur ICMP sollicitation" : voir aussi RFC 1256 |
- | * Type IMCP 11 "ICMP Time Exceeded" : pour le temps dépassé | + | * Type ICMP 11 "ICMP Time Exceeded" : pour le temps dépassé |
<note> | <note> | ||
**codes**\\ | **codes**\\ | ||
Ligne 602: | Ligne 780: | ||
Il y a beaucoup plus de types ICMP que cela mais on peut dire que tout ce qui n'est pas expressément autorisé ci-dessus doit être bloqué. | Il y a beaucoup plus de types ICMP que cela mais on peut dire que tout ce qui n'est pas expressément autorisé ci-dessus doit être bloqué. | ||
- | * Nous allons donc accepter tout ceux-ci et bloquer les autres dans la table NAT: | + | * Nous allons donc accepter tout ceux-ci et bloquer les autres dans la chaîne FORWARD ((nous ferons de même concernant ICMP pour les chaînes INPUT et OUTPUT plus bas quand toutes les chaînes de FILTER seront à DROP.)): |
(Nous laissons passer aussi **provisoirement** une ouverture béante pour les chaînes INPUT et OUTP (FILTER) afin de tester tout cela. | (Nous laissons passer aussi **provisoirement** une ouverture béante pour les chaînes INPUT et OUTP (FILTER) afin de tester tout cela. | ||
Ligne 616: | 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 638: | Ligne 826: | ||
iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.0.0/24 -p icmp\ | iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.0.0/24 -p icmp\ | ||
--icmp-type echo-request -j ACCEPT | --icmp-type echo-request -j ACCEPT | ||
- | #pour le retour nous utilisons la dernière règle | + | |
+ | # Pour le retour nous utilisons la dernière règle | ||
iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -p icmp\ | iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -p icmp\ | ||
--icmp-type echo-reply -j DROP | --icmp-type echo-reply -j DROP | ||
- | #On remets "masquerade" car on a flushé: | + | |
- | 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) ==== | ||
- | À l'étape suivante, il va falloir interdire (DROP) les chaînes INPUT et OUTPUT de la table FILTER pour tous les protocoles dont on a besoin.\\ | + | Cette fois, il va falloir interdire (DROP) les chaînes INPUT et OUTPUT de la table FILTER excepté pour tous les protocoles dont on a besoin.\\ |
- | Mais on en finit d'abord avec IMCP qu'on laisse entrer et sortir (INPUT, OUTPUT) ce qu'on n'a laissé passer par FORWARD. | + | D'abord pour ICMP qu'on ne laisse plus massivement entrer et sortir (table FILTER à DROP pour INPUT et OUTPUT, en plus de FORWARD).\\ |
+ | <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 et on ajoute provisoirement les commandes du [[atelier:chantier:iptables-pare-feu-pour-un-client#pour-les-fadas-du-scripting-shell|script pour station du LAN]] des autres protocoles pour la table FILTER (INPUT et OUTPUT envoyés à DROP). | + | On conserve ce qu'on a fait précédemment en ajoutant 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 677: | 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) |
- | #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 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 704: | 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 725: | Ligne 929: | ||
- | # Les règles imcp pour OUTPUT et INPUT | + | # Les règles ICMP pour OUTPUT et INPUT |
#(en y intégrant celles de testées pour FORWARD) | #(en y intégrant celles de testées pour FORWARD) | ||
Ligne 764: | Ligne 968: | ||
iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.0.0/24 -p icmp\ | iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.0.0/24 -p icmp\ | ||
--icmp-type echo-request -j ACCEPT | --icmp-type echo-request -j ACCEPT | ||
- | #pour le retour nous utilison la derniere regle | + | |
+ | # Pour le retour nous utilisons la dernière règle | ||
iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -p icmp\ | iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -p icmp\ | ||
--icmp-type echo-reply -j DROP | --icmp-type echo-reply -j DROP | ||
Ligne 773: | Ligne 978: | ||
On est content, l'ordination B peut naviguer sur internet et les pings sont fonctionnels : | On est content, l'ordination B peut naviguer sur internet et les pings sont fonctionnels : | ||
- | * de l'ordinateur A vers B((on n'oublie sa table de routage (en root)\\ ''route add -net 192.168.1.0 gw 192.168.0.1 netmask 255.255.255.0 dev eth0'')) | + | * De l'ordinateur A vers B((on n'oublie sa table de routage (en root)\\ ''route add -net 192.168.1.0 gw 192.168.0.1 netmask 255.255.255.0 dev eth0'')) |
<code user>ping 192.168.1.2</code> | <code user>ping 192.168.1.2</code> | ||
- | <code> | + | <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 783: | 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 790: | 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 797: | 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 805: | 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é provisoirement du [[atelier:chantier:iptables-pare-feu-pour-un-client#pour-les-fadas-du-scripting-shell| script pour une station du LAN]].\\ Pour la passerelle on va affiner le filtrage des règles concernant TCP et UDP.\\ Ce sera l'occasion de mettre en place des règles pour le protocole FTP que nous n'avons pas encore abordé. | + | Il faut revenir sur les règles INPUT et OUTPUT que nous avons récupérée provisoirement du [[atelier:chantier:iptables-pare-feu-pour-un-client#pour-les-fadas-du-scripting-shell| script pour une station du LAN]].\\ Pour la passerelle on va affiner le filtrage des règles concernant TCP et UDP.\\ Ce sera l'occasion de mettre en place des règles pour le protocole FTP que nous n'avons pas encore abordé. |
Nous aurons besoin pour cela d'un rappel sur le fonctionnement du protocole TCP | Nous aurons besoin pour cela d'un rappel sur le fonctionnement du protocole TCP | ||
Ligne 900: | 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. |
- | <code text firewall_gateway.sh> | + | 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> | ||
#!/bin/sh | #!/bin/sh | ||
### BEGIN INIT INFO | ### BEGIN INIT INFO | ||
Ligne 920: | Ligne 1130: | ||
# Author: hypathie <hypathie@debian-facile> | # Author: hypathie <hypathie@debian-facile> | ||
# | # | ||
- | ##Set up init.d script | + | ##Set up /etc/init.d/firewall_gateway.sh |
case "$1" in | case "$1" in | ||
'start') | 'start') | ||
- | /sbin/iptables-restore < /etc/config_parefeu | ||
- | RETVAL=$? | ||
- | ;; | ||
- | 'stop') | ||
- | /sbin/iptables-save > /etc/config_parefeu | ||
- | RETVAL=$? | ||
- | ;; | ||
- | 'clean') | ||
- | |||
/sbin/iptables -F | /sbin/iptables -F | ||
/sbin/iptables -X | /sbin/iptables -X | ||
- | /sbin/iptables -t nat -F | ||
- | /sbin/iptables -t nat -X | ||
- | /sbin/iptables -P INPUT ACCEPT | ||
- | /sbin/iptables -P FORWARD ACCEPT | ||
- | /sbin/iptables -P OUTPUT ACCEPT | ||
- | |||
/sbin/iptables -P INPUT DROP | /sbin/iptables -P INPUT DROP | ||
/sbin/iptables -P OUTPUT DROP | /sbin/iptables -P OUTPUT DROP | ||
/sbin/iptables -P FORWARD DROP | /sbin/iptables -P FORWARD DROP | ||
- | |||
/sbin/iptables -t nat -P PREROUTING ACCEPT | /sbin/iptables -t nat -P PREROUTING ACCEPT | ||
/sbin/iptables -t nat -P POSTROUTING ACCEPT | /sbin/iptables -t nat -P POSTROUTING ACCEPT | ||
Ligne 949: | Ligne 1143: | ||
/sbin/iptables -t nat -P OUTPUT ACCEPT | /sbin/iptables -t nat -P OUTPUT ACCEPT | ||
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | ||
- | + | ##commenter / décommenter et adapter les quatre lignes suivantes pour ne pas mettre en place / mettre en place | |
- | #Maintenant que tout est à DROP il faut s'occuper de la boucle local | + | ##un proxy transparent (squid) |
+ | /sbin/iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.0.1:3129 | ||
+ | /sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3129 | ||
+ | /sbin/iptables -t mangle -A PREROUTING -p tcp --dport 3128 -j DROP | ||
+ | /sbin/iptables -t mangle -A PREROUTING -p tcp --dport 3129 -j DROP | ||
+ | #accepter l'interface lo | ||
/sbin/iptables -A INPUT -i lo -j ACCEPT | /sbin/iptables -A INPUT -i lo -j ACCEPT | ||
/sbin/iptables -A OUTPUT -o lo -j ACCEPT | /sbin/iptables -A OUTPUT -o lo -j ACCEPT | ||
- | + | #accepter le sous-réseau | |
- | # Et notre interface interne : | + | |
/sbin/iptables -A INPUT -i eth1 -j ACCEPT | /sbin/iptables -A INPUT -i eth1 -j ACCEPT | ||
/sbin/iptables -A OUTPUT -o eth1 -j ACCEPT | /sbin/iptables -A OUTPUT -o eth1 -j ACCEPT | ||
- | + | #permettre le passage de tcp entre les deux interfaces eternet de la passerelle | |
- | #On garde nos règles concernant le DROP sur FORWARD (FILTER) | + | /sbin/iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -p tcp\ |
- | #mais on oublie pas eth1 ! | + | -m state --state NEW,ESTABLISHED -j ACCEPT |
- | /sbin/iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24\ | + | /sbin/iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0 -d 192.168.1.0/24 -p tcp\ |
- | -d 0.0.0.0/0 -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT | + | -m state --state ESTABLISHED -j ACCEPT |
- | + | #Si pas de DNS configurer on dé-commente les règles udp suivantes : | |
- | /sbin/iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0\ | + | #iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -p udp\ |
- | -d 192.168.1.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT | + | # --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 | ||
- | + | ||
- | /sbin/iptables -t filter -A INPUT -p icmp -i eth0 -m conntrack\ | + | #accepter le ping entre les réseaux locaux |
- | --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\ | + | /sbin/iptables -t filter -A INPUT -p icmp -i eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT |
- | --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 INPUT -p icmp -i eth1 -m conntrack\ | + | |
- | --ctstate ESTABLISHED,RELATED -j ACCEPT | + | |
- | + | ||
- | /sbin/iptables -t filter -A OUTPUT -p icmp -o eth1 -m conntrack\ | + | |
- | --ctstate ESTABLISHED,RELATED -j ACCEPT | + | |
- | + | ||
- | # Et on prend soin de laisser entrer et sortir (INPUT, OUTPUT de FILTER) | + | |
- | # le flux nécessaire au DNS (53) et au web (80, 443..) | + | |
- | # et là encore on n'oublie pas eth1 | + | |
- | + | ||
- | /sbin/iptables -t filter -A OUTPUT -o eth0 -p udp -m udp --dport 53\ | + | |
- | -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | + | |
- | + | ||
- | /sbin/iptables -t filter -A INPUT -i eth0 -p udp -m udp --sport 53\ | + | |
- | -m state --state RELATED,ESTABLISHED -j ACCEPT | + | |
- | + | ||
- | /sbin/iptables -t filter -A OUTPUT -o eth1 -p udp -m udp --dport 53\ | + | |
- | -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | + | |
- | + | ||
- | /sbin/iptables -t filter -A INPUT -i eth1 -p udp -m udp --sport 53\ | + | |
- | -m state --state RELATED,ESTABLISHED -j ACCEPT | + | |
- | + | ||
- | /sbin/iptables -t filter -A OUTPUT -o eth0 -p tcp -m multiport --dports\ | + | |
- | 80,443,8000 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | + | |
- | + | ||
- | /sbin/iptables -t filter -A INPUT -i eth0 -p tcp -m multiport --sports\ | + | |
- | 80,443,8000 -m state --state RELATED,ESTABLISHED -j ACCEPT | + | |
- | + | ||
- | /sbin/iptables -A OUTPUT -o eth1 -p tcp -m multiport --dports 80,443,8000 -j ACCEPT | + | |
- | /sbin/iptables -A INPUT -i eth1 -p tcp -m multiport --sports 80,443,8000 -j ACCEPT | + | |
- | + | ||
- | + | ||
- | # Les règles imcp pour OUTPUT INPUT et FORWARD | + | |
- | + | ||
/sbin/iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT | /sbin/iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT | ||
/sbin/iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT | /sbin/iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT | ||
/sbin/iptables -A FORWARD -p icmp --icmp-type 0 -j ACCEPT | /sbin/iptables -A FORWARD -p icmp --icmp-type 0 -j ACCEPT | ||
- | |||
/sbin/iptables -A INPUT -p icmp --icmp-type 3/4 -j ACCEPT | /sbin/iptables -A INPUT -p icmp --icmp-type 3/4 -j ACCEPT | ||
/sbin/iptables -A OUTPUT -p icmp --icmp-type 3/4 -j ACCEPT | /sbin/iptables -A OUTPUT -p icmp --icmp-type 3/4 -j ACCEPT | ||
/sbin/iptables -A FORWARD -p icmp --icmp-type 3/4 -j ACCEPT | /sbin/iptables -A FORWARD -p icmp --icmp-type 3/4 -j ACCEPT | ||
- | |||
/sbin/iptables -A FORWARD -p icmp --icmp-type 3/3 -j ACCEPT | /sbin/iptables -A FORWARD -p icmp --icmp-type 3/3 -j ACCEPT | ||
/sbin/iptables -A OUTPUT -p icmp --icmp-type 3/3 -j ACCEPT | /sbin/iptables -A OUTPUT -p icmp --icmp-type 3/3 -j ACCEPT | ||
/sbin/iptables -A INPUT -p icmp --icmp-type 3/3 -j ACCEPT | /sbin/iptables -A INPUT -p icmp --icmp-type 3/3 -j ACCEPT | ||
- | |||
/sbin/iptables -A FORWARD -p icmp --icmp-type 3/1 -j ACCEPT | /sbin/iptables -A FORWARD -p icmp --icmp-type 3/1 -j ACCEPT | ||
/sbin/iptables -A INPUT -p icmp --icmp-type 3/1 -j ACCEPT | /sbin/iptables -A INPUT -p icmp --icmp-type 3/1 -j ACCEPT | ||
/sbin/iptables -A OUTPUT -p icmp --icmp-type 3/1 -j ACCEPT | /sbin/iptables -A OUTPUT -p icmp --icmp-type 3/1 -j ACCEPT | ||
- | |||
/sbin/iptables -A INPUT -p icmp --icmp-type 4 -j ACCEPT | /sbin/iptables -A INPUT -p icmp --icmp-type 4 -j ACCEPT | ||
/sbin/iptables -A OUTPUT -p icmp --icmp-type 4 -j ACCEPT | /sbin/iptables -A OUTPUT -p icmp --icmp-type 4 -j ACCEPT | ||
/sbin/iptables -A FORWARD -p icmp --icmp-type 4 -j ACCEPT | /sbin/iptables -A FORWARD -p icmp --icmp-type 4 -j ACCEPT | ||
- | |||
/sbin/iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 2/s -j ACCEPT | /sbin/iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 2/s -j ACCEPT | ||
/sbin/iptables -A INPUT -p icmp --icmp-type 8 -j LOG --log-prefix "ICMP/in/8 Excessive: " | /sbin/iptables -A INPUT -p icmp --icmp-type 8 -j LOG --log-prefix "ICMP/in/8 Excessive: " | ||
Ligne 1033: | Ligne 1194: | ||
/sbin/iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT | /sbin/iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT | ||
/sbin/iptables -A FORWARD -p icmp --icmp-type 8 -j ACCEPT | /sbin/iptables -A FORWARD -p icmp --icmp-type 8 -j ACCEPT | ||
- | |||
/sbin/iptables -A INPUT -p icmp --icmp-type 11 -j ACCEPT | /sbin/iptables -A INPUT -p icmp --icmp-type 11 -j ACCEPT | ||
/sbin/iptables -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT | /sbin/iptables -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT | ||
/sbin/iptables -A FORWARD -p icmp --icmp-type 11 -j ACCEPT | /sbin/iptables -A FORWARD -p icmp --icmp-type 11 -j ACCEPT | ||
- | |||
/sbin/iptables -A INPUT -p icmp --icmp-type 12 -j ACCEPT | /sbin/iptables -A INPUT -p icmp --icmp-type 12 -j ACCEPT | ||
/sbin/iptables -A OUTPUT -p icmp --icmp-type 12 -j ACCEPT | /sbin/iptables -A OUTPUT -p icmp --icmp-type 12 -j ACCEPT | ||
/sbin/iptables -A FORWARD -p icmp --icmp-type 12 -j ACCEPT | /sbin/iptables -A FORWARD -p icmp --icmp-type 12 -j ACCEPT | ||
- | + | /sbin/iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.0.0/24 -p icmp --icmp-type echo-request -j ACCEPT | |
- | /sbin/iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.0.0/24 -p icmp\ | + | /sbin/iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -p icmp --icmp-type echo-reply -j DROP |
- | --icmp-type echo-request -j ACCEPT | + | |
- | + | ||
- | # Pour le retour nous utilisons la dernière règle | + | |
- | /sbin/iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -p icmp\ | + | |
- | --icmp-type echo-reply -j DROP | + | |
- | + | ||
/sbin/iptables -A INPUT -p icmp -m limit -j LOG --log-prefix "ICMP/IN: " | /sbin/iptables -A INPUT -p icmp -m limit -j LOG --log-prefix "ICMP/IN: " | ||
/sbin/iptables -A OUTPUT -p icmp -m limit -j LOG --log-prefix "ICMP/OUT: " | /sbin/iptables -A OUTPUT -p icmp -m limit -j LOG --log-prefix "ICMP/OUT: " | ||
- | |||
- | |||
- | #TCP_BAD | ||
- | |||
/sbin/iptables -N syn_flood | /sbin/iptables -N syn_flood | ||
/sbin/iptables -I INPUT -p tcp --syn -j syn_flood | /sbin/iptables -I INPUT -p tcp --syn -j syn_flood | ||
Ligne 1060: | Ligne 1209: | ||
/sbin/iptables -A syn_flood -j LOG --log-prefix '[SYN_FLOOD] : ' | /sbin/iptables -A syn_flood -j LOG --log-prefix '[SYN_FLOOD] : ' | ||
/sbin/iptables -A syn_flood -j DROP | /sbin/iptables -A syn_flood -j DROP | ||
- | + | #autoriser la connexion avec les serveurs DNS | |
- | # SSH | + | /sbin/iptables -t filter -A OUTPUT -o eth0 -p udp -m udp --dport 53 -m state --state NEW,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\ | + | /sbin/iptables -I INPUT -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j InComingSSH |
- | --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j InComingSSH | + | |
/sbin/iptables -A InComingSSH -j LOG --log-prefix '[INCOMING_SSH] : ' | /sbin/iptables -A InComingSSH -j LOG --log-prefix '[INCOMING_SSH] : ' | ||
/sbin/iptables -A InComingSSH -j ACCEPT | /sbin/iptables -A InComingSSH -j ACCEPT | ||
- | + | /sbin/iptables -t filter -A OUTPUT -o eth0 -p tcp -m tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT | |
- | /sbin/iptables -t filter -A OUTPUT -o eth0 -p tcp -m tcp\ | + | /sbin/iptables -t filter -A OUTPUT -o eth1 -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT |
- | --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT | + | /sbin/iptables -t filter -A INPUT -i eth1 -s 192.168.0.0/24 -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
- | + | #créer une chaîne utilisateur pour les connexions ftp, et les accepter | |
- | /sbin/iptables -t filter -A OUTPUT -o eth1 -p tcp -m tcp\ | + | |
- | --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT | + | |
- | + | ||
- | /sbin/iptables -t filter -A INPUT -i eth1 -s 192.168.0.0/24 -p tcp\ | + | |
- | --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT | + | |
- | + | ||
- | #FTP_IN | + | |
- | + | ||
/sbin/iptables -N ftp_in_accept | /sbin/iptables -N ftp_in_accept | ||
- | /sbin/iptables -I INPUT -i eth0 -p tcp --sport 21 -m state\ | + | /sbin/iptables -I INPUT -i eth0 -p tcp --sport 21 -m state --state ESTABLISHED,RELATED -j ftp_in_accept |
- | --state ESTABLISHED,RELATED -j ftp_in_accept | + | /sbin/iptables -I INPUT -i eth0 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ftp_in_accept |
- | + | /sbin/iptables -I INPUT -i eth0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ftp_in_accept | |
- | /sbin/iptables -I INPUT -i eth0 -p tcp --sport 20 -m state\ | + | |
- | --state ESTABLISHED,RELATED -j ftp_in_accept | + | |
- | + | ||
- | /sbin/iptables -I INPUT -i eth0 -p tcp --sport 1024:65535 --dport\ | + | |
- | 1024:65535 -m state --state ESTABLISHED -j ftp_in_accept | + | |
- | + | ||
/sbin/iptables -A ftp_in_accept -p tcp -j ACCEPT | /sbin/iptables -A ftp_in_accept -p tcp -j ACCEPT | ||
- | + | /sbin/iptables -A INPUT -i eth1 -p tcp --sport 21 -m state --state ESTABLISHED,RELATED -j ACCEPT | |
- | + | /sbin/iptables -A INPUT -i eth1 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT | |
- | /sbin/iptables -A INPUT -i eth1 -p tcp --sport 21 -m state\ | + | /sbin/iptables -I INPUT -i eth1 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT |
- | --state ESTABLISHED,RELATED -j ACCEPT | + | echo "set up firewall_gateway.sh .........> [OK]" |
- | /sbin/iptables -A NPUT -i eth1 -p tcp --sport 20 -m state\ | + | /sbin/iptables-save > /etc/firewall_gateway.sh |
- | --state ESTABLISHED,RELATED -j ACCEPT | + | echo "iptables-save > /etc/firewall_gateway.sh .........> [OK]" |
- | /sbin/iptables -I INPUT -i eth1 -p tcp --sport 1024:65535 --dport\ | + | RETVAL=$? |
- | 1024:65535 -m state --state ESTABLISHED -j ACCEPT | + | ;; |
+ | 'stop') | ||
+ | # Supprime toutes les règles de la tables FILTER et pose la police ACCEPT pour toutes les chaînes | ||
+ | /sbin/iptables -t filter -F | ||
+ | /sbin/iptables -t filter -X | ||
+ | /sbin/iptables -t filter -P INPUT ACCEPT | ||
+ | /sbin/iptables -t filter -P OUTPUT ACCEPT | ||
+ | /sbin/iptables -t filter -P FORWARD ACCEPT | ||
+ | echo "FILTER [ALL firewall_gateway.sh's rules .... [FLUSH] ..... POLICY ......> [ACCEPT]" | ||
+ | echo "NAT ...POSTROUTING ... MASQUERADE .... [STILL SET UP]" | ||
RETVAL=$? | RETVAL=$? | ||
;; | ;; | ||
'restart') | 'restart') | ||
- | $0 stop && $0 start | + | #ré-installe le pare-feu complet, y compris NAT (masquerade), DNAT (port 631) |
+ | /sbin/iptables-restore < /etc/firewall_gateway.sh | ||
+ | echo "/etc/firewall-client ........> [OK]" | ||
+ | echo "NAT (masquerade) ........> [OK]" | ||
+ | echo "DNAT (port 631) ........> [OK]" | ||
+ | RETVAL=$? | ||
+ | ;; | ||
+ | 'status') | ||
+ | /sbin/iptables -L -n --line-numbers | ||
+ | /sbin/iptables -t nat -L -n --line-numbers | ||
+ | RETVAL=$? | ||
+ | ;; | ||
+ | 'flush') | ||
+ | #supprime toutes les règles de toutes les tables ; accepte tout | ||
+ | /sbin/iptables -t filter -F | ||
+ | /sbin/iptables -t nat -F | ||
+ | /sbin/iptables -t mangle -F | ||
+ | /sbin/iptables -t raw -F | ||
+ | /sbin/iptables -t filter -P INPUT ACCEPT | ||
+ | /sbin/iptables -t filter -P OUTPUT ACCEPT | ||
+ | /sbin/iptables -t filter -P FORWARD ACCEPT | ||
+ | echo "FILTER [ALL RULES .......> [FLUSH]" | ||
+ | echo "WARNING ........ ALL POLICY ......> [ACCEPT]" | ||
+ | RETVAL=$? | ||
+ | ;; | ||
+ | 'deletnat') | ||
+ | /sbin/iptables -t nat -F | ||
+ | /sbin/iptables -t nat -X | ||
+ | /sbin/iptables -t mangle -F | ||
+ | /sbin/iptables -t nat -P PREROUTING ACCEPT | ||
+ | /sbin/iptables -t nat -P POSTROUTING ACCEPT | ||
+ | /sbin/iptables -t nat -P OUTPUT ACCEPT | ||
+ | /sbin/iptables -t mangle -P PREROUTING ACCEPT | ||
+ | /sbin/iptables -t mangle -P OUTPUT ACCEPT | ||
+ | /sbin/iptables -t mangle -P POSTROUTING ACCEPT | ||
+ | |||
+ | echo "NAT/MANGLE [ALL RULES .... [FLUSH] ..... POLICY ......> [ACCEPT]" | ||
+ | echo "INFO ......> [NAT/DNAT is OFF]" | ||
+ | echo "INFO ......> [FILTER STILL SET UP]" | ||
RETVAL=$? | RETVAL=$? | ||
;; | ;; | ||
*) | *) | ||
- | echo "Usage: $0 { start | stop | restart | clean}" | + | echo "Usage: $0 { start | stop | restart | status | flush | deletnat }" |
RETVAL=1 | RETVAL=1 | ||
;; | ;; | ||
Ligne 1112: | Ligne 1306: | ||
</code> | </code> | ||
- | Et voilà, pour l'installation, suivre la même méthode que pour [[atelier:chantier:iptables-pare-feu-pour-un-client#firewall-clientsh-comme-script-init|firewall-client comme script init]]. ^_^ | + | <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 | ||
+ | Suivre la même méthode que pour [[atelier:chantier:iptables-pare-feu-pour-un-client?&#pour-les-fadas-du-scripting-shell|firewall-client comme script init]].\\ | ||
+ | |||
+ | * Ou si l'on préfère utiliser les commandes iptables-save et iptables-restore | ||
+ | Il n'y qu'à récupérer les commandes iptables du script, en commentant le reste.\\ | ||
+ | Puis lancer les commandes nécessaires à l'exécution du script (droits d'exécution et en root ''bash /chemin/du/script'')\\ | ||
+ | Enfin éditer /etc/network/interfaces : | ||
+ | <code># The loopback network interface | ||
+ | auto lo | ||
+ | iface lo inet loopback | ||
+ | |||
+ | #carte vers la box | ||
+ | auto eth0 | ||
+ | iface eth0 inet static | ||
+ | address 192.168.0.1 | ||
+ | network 192.168.0.0 | ||
+ | netmask 255.255.255.0 | ||
+ | gateway 192.168.0.254 | ||
+ | post-up iptables-restore < /etc/firewall_gateway | ||
+ | |||
+ | #carte vers le LAN | ||
+ | auto eth1 | ||
+ | iface eth1 inet static | ||
+ | address 192.168.1.1 | ||
+ | network 192.168.1.0 | ||
+ | netmask 255.255.255.0</code> | ||
+ | |||
+ | ====Le cas du serveur DHCP ==== | ||
+ | ===Aurions-nous oublié une règle pour DHCP ?=== | ||
+ | Rassurez-vous, il est inutile d'ouvrir les ports UDP (67, 68) pour que le serveur DHCP installé sur cette passerelle puisse continué d'attribuer des IP à notre réseau B. | ||
+ | |||
+ | * "Ne pas ajouter de règle aveuglément !" | ||
+ | Voici une autre maxime à laquelle il faudra se tenir. | ||
+ | |||
+ | On voit dans de nombreux wiki l'ajout aberrant de cette règle :\\ | ||
+ | |||
+ | ''IPTABLES -I INPUT -i <interface-interne> -p udp --dport 67:68 --sport 67:68 -j ACCEPT''\\ | ||
+ | |||
+ | Nous ne l'ajouterons pas ! | ||
+ | |||
+ | * Dans notre script nous avons mis en effet : | ||
+ | <code root>iptables -A INPUT -i eth1 -j ACCEPT | ||
+ | iptables -A OUTPUT -o eth1 -j ACCEPT</code> | ||
+ | |||
+ | Et nous allons à apprendre pour finir, une technique pour n'ajouter une règle que si elle fait réellement défaut. Il s'agit de l'outil tcpdump. | ||
+ | |||
+ | ===Utiliser tcpdump=== | ||
+ | * On l'installe : | ||
+ | <code root>apt-get install tcpdump</code> | ||
+ | |||
+ | * Puis on lance sur le serveur : | ||
+ | <code root>tcpdump -i eth1 port 67 or port 68</code> | ||
+ | |||
+ | Rien ne se passe... et c'est normal !\\ | ||
+ | |||
+ | Pour voir quelque chose, il faut générer du flux depuis le client du réseau B.\\ | ||
+ | On laisse le terminal (de la passerelle) en état d'attente, et on passe sur le terminal du client B. | ||
+ | |||
+ | * Côté **client** DHCP (ordinateur B) on annule le bail DHCP : | ||
+ | |||
+ | <code root> | ||
+ | dhclient -r eth0 | ||
+ | </code> | ||
+ | |||
+ | |||
+ | >Il n'y a plus d'IP : | ||
+ | |||
+ | <code root>eth0 Link encap:Ethernet HWaddr 00:1e:0b:67:9b:b7 | ||
+ | adr inet6: xxxxxxxxxxxx Scope:Lien</code> | ||
+ | |||
+ | * On lance une requête DHCP | ||
+ | <code root> | ||
+ | dhclient eth0 | ||
+ | </code> | ||
+ | |||
+ | * Côté serveur DHCP : | ||
+ | Observez ce que nous dit "tcpdump" : | ||
+ | |||
+ | <code> | ||
+ | tcpdump: verbose output suppressed, use -v or -vv for full | ||
+ | protocol decode listening on eth1, link-type EN10MB (Ethernet), | ||
+ | capture size 65535 bytes 07:47:00.535348 | ||
+ | IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, | ||
+ | Request from xx:xx:xx:xx:xx:xx (oui Unknown), length 300 | ||
+ | 07:47:00.535553 IP debian-serveur.mondomaine.hyp.bootps > | ||
+ | debian-hp.local.bootpc: BOOTP/DHCP, Reply, length 302 | ||
+ | 07:47:00.535745 IP 0.0.0.0.bootpc > | ||
+ | 255.255.255.255.bootps: BOOTP/DHCP, Request from xx:xx:xx:xx:xx:xx | ||
+ | (oui Unknown), length 300 | ||
+ | 07:47:00.626390 IP debian-serveur.mondomaine.hyp.bootps | ||
+ | > debian-hp.local.bootpc: BOOTP/DHCP, Reply, length 302 | ||
+ | ^C | ||
+ | 4 packets captured | ||
+ | 4 packets received by filter | ||
+ | </code> | ||
+ | |||
+ | * Et l'IP de l'ordinateur client DHCP a bien changé ! | ||
+ | |||
+ | <code>INET_IP=`ifconfig $INET_IFACE | grep inet | \ | ||
+ | cut -d : -f 2 | cut -d ' ' -f 1` && echo $INET_IP</code> | ||
+ | <code root>192.168.1.4 127.0.0.1</code> | ||
+ | |||
+ | <note tip> | ||
+ | **__Comme promis un petit rappel sur tcpdump.__**\\ | ||
+ | |||
+ | (//Tout se lance en root//) | ||
+ | |||
+ | * Affichage standard: ''tcpdump'' | ||
+ | * Affichage verbeux (verbose): ''tcpdump -v'' | ||
+ | * Interfaces réseaux disponibles pour la capture: ''tcpdump -D'' | ||
+ | * Affichage des adresses numériques((plutôt que des adresses symboliques (DNS))): ''tcpdump -n'' | ||
+ | * Affichage rapide: ''tcpdump -q'' | ||
+ | * Capture du traffic d'une interface particulière: ''tcpdump -i eth1'' | ||
+ | * Capture du trafic UDP: ''tcpdump udp'' | ||
+ | * Capture du trafic du port TCP 80: ''tcpdump port http'' | ||
+ | * Capture du trafic à partir d'un fichier stocké dans un fichier: ''tcpdump -F file_name'' | ||
+ | * Envoi du résultat dans un fichier à la place de directement à l'écran:\\ ''tcpdump -w capture.log'' | ||
+ | * Lecture d'un fichier de capture: ''tcpdump -r capture.log'' | ||
+ | * Arrêter la capture après n paquets : ''tcpdump -c n''((où ''n'' est un nombre, 10 par exemple)) | ||
+ | |||
+ | **Pour aller plus loin : ''man tcpdump''**. | ||
+ | </note> | ||
+ | |||
+ | Et voilà, c'est fini ! ^_^ | ||
+ | La suite concernera le DNAT et SNAT, pour un serveur web apache installé sur un client du réseau B, et enfin, l'installation sur cette passerelle d'un proxy transparent pour l'ensemble su réseau B. | ||