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 [24/09/2015 17:27] milou [La table NAT] |
doc:reseau:iptables-pare-feu-pour-une-passerelle [01/11/2015 18:12] milou [Un pare-feu avancé pour le routeur-debian] |
||
---|---|---|---|
Ligne 6: | Ligne 6: | ||
* Suivi : {{tag>à-tester}} | * Suivi : {{tag>à-tester}} | ||
* Création par [[user>Hypathie]] 14/10/2014 | * Création par [[user>Hypathie]] 14/10/2014 | ||
- | * Testé par <...> le <...> FIXME | + | * Testé par <...> le <...> |
* Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?pid=99819#p99819 | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | * Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?pid=99819#p99819 | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | ||
**Nota : Au programme, description avancée de la table NAT (iptables), et des protocoles ICMP et TCP (ssh, FTP ... logés) ; pour la mise en place d'un pare-feu iptables sur un système debian faisant office de routeur, muni de deux cartes ethernet. ** | **Nota : Au programme, description avancée de la table NAT (iptables), et des protocoles ICMP et TCP (ssh, FTP ... logés) ; pour la mise en place d'un pare-feu iptables sur un système debian faisant office de routeur, muni de deux cartes ethernet. ** | ||
- | Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | + | **Nota :** Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! |
===== Introduction ===== | ===== Introduction ===== | ||
Ligne 35: | Ligne 36: | ||
* 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\\ |
- Un [[atelier:chantier:dns-bind9-sur-wheezy|serveur DNS (bind9)]]\\ | - 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: | - le fichier **/etc/hosts de l'ordi B** est complété(( FQDN (Fully Qualified Domain Name)), par exemple: | ||
Ligne 53: | Ligne 54: | ||
</code> | </code> | ||
- De même le fichier **/etc/hosts de la passerelle** connaît l'ordi B : Par exemple ''192.168.1.3 debian-hp'' | - 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).\\ | + | - La table NAT a été modifiée très simplement pour l'instant afin [[doc:reseau:dhcp#installation-de-la-passerelle-debian|de le transformer en passerelle]] avec masquerade sur eth0 (interface web).\\ |
- le fichier /etc/sysctl.conf a été modifié : la ligne ''net.ipv4.ip_forward=0'' est devenue ''net.ipv4.ip_forward=1''. | - le fichier /etc/sysctl.conf a été modifié : la ligne ''net.ipv4.ip_forward=0'' est devenue ''net.ipv4.ip_forward=1''. | ||
Ligne 388: | Ligne 389: | ||
* Ce qui donne : | * Ce qui donne : | ||
<code root>iptables -L</code> | <code root>iptables -L</code> | ||
- | <code> | + | <file config retour de la commande> |
Chain INPUT (policy ACCEPT) | Chain INPUT (policy ACCEPT) | ||
target prot opt source destination | target prot opt source destination | ||
Ligne 399: | Ligne 400: | ||
Chain OUTPUT (policy ACCEPT) | Chain OUTPUT (policy ACCEPT) | ||
target prot opt source destination | target prot opt source destination | ||
- | </code> | + | </file> |
> La navigation web fonctionne | > La navigation web fonctionne | ||
> Le ping vers google et vers 192.168.0.22 est bloqué car on a autorisé seulement tcp | > Le ping vers google et vers 192.168.0.22 est bloqué car on a autorisé seulement tcp | ||
Ligne 412: | Ligne 413: | ||
<code root>iptables -L FORWARD</code> | <code root>iptables -L FORWARD</code> | ||
- | <code> | + | <file config retour de la commande> |
Chain FORWARD (policy DROP) | Chain FORWARD (policy DROP) | ||
target prot opt source destination | target prot opt source destination | ||
Ligne 418: | Ligne 419: | ||
ACCEPT tcp -- anywhere 192.168.1.0/24 state ESTABLISHED | ACCEPT tcp -- anywhere 192.168.1.0/24 state ESTABLISHED | ||
ACCEPT icmp -- anywhere anywhere | ACCEPT icmp -- anywhere anywhere | ||
- | </code> | + | </file> |
* OU de manière plus précise : | * OU de manière plus précise : | ||
Ligne 431: | Ligne 432: | ||
* Ce qui donnerait cette fois : | * Ce qui donnerait cette fois : | ||
- | <code>iptables -L FORWARD</code> | + | <code root>iptables -L FORWARD</code> |
- | <code> | + | <file config retour de la commande> |
Chain FORWARD (policy DROP) | Chain FORWARD (policy DROP) | ||
target prot opt source destination | target prot opt source destination | ||
Ligne 439: | Ligne 440: | ||
ACCEPT icmp -- 192.168.1.0/24 anywhere state NEW,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 | ACCEPT icmp -- anywhere 192.168.1.0/24 state RELATED,ESTABLISHED | ||
- | </code> | + | </file> |
> Le web et le ping fonctionne : | > Le web et le ping fonctionne : | ||
Ligne 445: | Ligne 446: | ||
* De la machine A vers la machine B : | * De la machine A vers la machine B : | ||
<code user> | <code user> | ||
- | ping 192.168.1.2 | + | ping 192.168.1.2</code> |
- | </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 454: | 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 | ||
Ligne 461: | Ligne 462: | ||
<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 468: | 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-) | ||
Ligne 670: | 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 835: | Ligne 840: | ||
D'abord pour ICMP qu'on ne laisse plus massivement entrer et sortir (table FILTER à DROP pour INPUT et OUTPUT, en plus de 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> | <note> | ||
- | Attention l'ordre des règles pour IMCP sur INPUT, OUTPUT et FORWARD, comptes ici. | + | Attention l'ordre des règles pour IMCP sur INPUT, OUTPUT et FORWARD, compte ici. |
</note> | </note> | ||
- | 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. | + | On conserve ce qu'on a fait précédemment en ajoutant simplement les commandes du [[doc:reseau:iptables-pare-feu-pour-un-client#pour-les-fadas-du-scripting-shell|script pour un client du LAN]] mais en tenant compte du fait qu'il y a cette fois deux interfaces réseau. |
<code root> | <code root> | ||
Ligne 975: | Ligne 980: | ||
* De l'ordinateur A vers B((on n'oublie sa table de routage (en root)\\ ''route add -net 192.168.1.0 gw 192.168.0.1 netmask 255.255.255.0 dev eth0'')) | * De l'ordinateur A vers B((on n'oublie sa table de routage (en root)\\ ''route add -net 192.168.1.0 gw 192.168.0.1 netmask 255.255.255.0 dev eth0'')) | ||
<code user>ping 192.168.1.2</code> | <code user>ping 192.168.1.2</code> | ||
- | <code> | + | <file config retour de la commande> |
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. | PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. | ||
64 bytes from 192.168.1.2: icmp_req=1 ttl=63 time=0.341 ms | 64 bytes from 192.168.1.2: icmp_req=1 ttl=63 time=0.341 ms | ||
Ligne 983: | 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 990: | 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 997: | 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 1350: | Ligne 1355: | ||
Voici une autre maxime à laquelle il faudra se tenir. | Voici une autre maxime à laquelle il faudra se tenir. | ||
- | On voit dans de nombreux wiki l'ajout aberrant de cette règle :\\ | + | On voit dans de nombreux wiki l'ajout aberrant de cette règle :\\ |
''IPTABLES -I INPUT -i <interface-interne> -p udp --dport 67:68 --sport 67:68 -j ACCEPT''\\ | ''IPTABLES -I INPUT -i <interface-interne> -p udp --dport 67:68 --sport 67:68 -j ACCEPT''\\ | ||