Comme je suis prof depuis assez longtemps pour avoir compris qu'il n'y a rien de plus frustrant que de se taper des heures de théorie avant de pouvoir passer, enfin, à la pratique, nous allons d'abord réaliser vite fait une passerelle opérationnelle. Sommaire, rudimentaire, mais opérationnelle.
Après, nous verrons plus en détail comment tout ceci fonctionne.
Netfilter, c'est le système de filtrage des paquets. C'est lui qui va permettre de réaliser le routage dans de bonnes conditions. Les bonnes distributions l'intègrent sous forme de modules.
IPtables, c'est en quelque sorte l'interface qui permet de configurer Netfilter. Là, il vous faudra vérifier que le paquetage iptables est bien installé, ce qui est maintenant unanimement le cas.
Dans la suite, ne confondez pas le script /etc/init.d/iptables avec /sbin/iptables, qui est un exécutable.
Incantation magique | Signification |
---|---|
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE | On applique le « masquerading » sur tout ce qui doit sortir par ppp0 |
echo 1 > /proc/sys/net/ipv4/ip_forward | On déverrouille le « forwarding », autrement dit, on active le routage. |
Et voilà. La passerelle fonctionne. Assurez-vous d'abord que votre connexion PPPoE est bien active, par exemple en faisant un
ifconfig ppp0
qui doit vous indiquer que cette interface est bien montée. Si ce n'est pas le cas, commencez par arriver à obtenir ce lien.
Essayez maintenant, depuis un poste quelconque de votre réseau local, de faire un ping sur www.oleane.fr :
$ ping -c 3 mir1.ovh.net PING mir1.ovh.net (213.186.33.37) 56(84) bytes of data. 64 bytes from mir1.ovh.net (213.186.33.37): icmp_seq=1 ttl=55 time=90.8 ms 64 bytes from mir1.ovh.net (213.186.33.37): icmp_seq=2 ttl=55 time=82.1 ms 64 bytes from mir1.ovh.net (213.186.33.37): icmp_seq=3 ttl=55 time=78.5 ms --- mir1.ovh.net ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 78.523/83.855/90.890/5.200 ms
Les règles iptables sont volatiles. Si vous redémarrez votre machine, il faudra les réécrire. Pour éviter ce désagrément, une fois vos règles établies, créez un répertoire /etc/iptables
et utilisez la commande iptables-save
pour créer un fichier contenant vos règles :
~# mkdir /etc/iptables ~# iptables-save > iptables-active
Si nous regardons ce que nous avons dans /etc/iptables/iptables-active
:
:~# cat /etc/iptables/iptables-sactive
# Generated by iptables-save v1.3.8 on Fri May 23 19:13:20 2008
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [4:228]
:OUTPUT ACCEPT [4:228]
-A POSTROUTING -o ppp0 -j MASQUERADE
COMMIT
# Completed on Fri May 23 19:13:20 2008
# Generated by iptables-save v1.3.8 on Fri May 23 19:13:20 2008
*filter
:INPUT ACCEPT [45334:56750206]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [33598:2416238]
COMMIT
# Completed on Fri May 23 19:13:20 2008
Ce n'est pas tout, il nous faudra aussi ajouter la ligne :
pre-up iptables-restore < /etc/iptables/iptables-active
Dans /etc/network/interfaces
à la configuration de l'interface connectée au modem (eth1 ou ppp0 suivant le cas). Exemple :
auto eth0
iface eth0 inet static
address 192.168.0.253
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
auto ppp0
iface ppp0 inet ppp
provider dsl-provider
pre-up iptables-restore < /etc/iptables/iptables-active
Pour être tout à fait propres, il faudrait également ajouter le ligne :
post-down iptables -t nat -F
Pour vider la table nat
lorsque ppp0 (ou eth1) est désactivée. Ce qui donne finalement :
auto eth0
iface eth0 inet static
address 192.168.0.253
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
auto ppp0
iface ppp0 inet ppp
provider dsl-provider
pre-up iptables-restore < /etc/iptables/iptables-active
post-down iptables -t nat -F
Le déverrouillage du « forwarding » est également volatile par défaut. Pour remédier à ce problème :
/etc/sysctl.conf
net.ipv4.ip_forward=1
Au prochain redémarrage, vous devrez retrouver la valeur 1
dans /proc/sys/net/ipv4/ip_forward
:
:~# cat /proc/sys/net/ipv4/ip_forward 1
Votre passerelle fonctionne, certes, mais c'est un vaste trou béant au sens de la sécurité. Pour faire quelque chose de propre, il vous faudra lire le chapitre sur la sécurité ]et aussi celui sur Netfilter, pour comprendre mieux ce qu'il y a à faire.
Dans l'état actuel des choses, vous être fortement exposé à toutes sortes d'ennuis…
Sur vos postes du réseau privé, vous devez indiquer « en dur » l'adresse IP des DNS de votre FAI. Ce n'est pas pratique, parce qu'ils peuvent changer sans vous le dire. Il vaut mieux installer sur votre passerelle un service DNS qui pourra soit résoudre les noms directement par lui même, soit servir de proxy DNS, c'est à dire retransmettre au DNS de votre FAI les requêtes de résolution que vous lui adresserez.
Dans ce cas, vous indiquerez sur vos clients l'adresse de votre passerelle pour le DNS et c'est elle qui se chargera de vous communiquer les résolutions.
A vous de voir ce qui vous convient le mieux. Normalement, un proxy DNS est suffisant. Vous pouvez faire ça assez simplement avec BIND. Lisez le chapitre consacré au DNS pour en savoir plus.
Configurer ses clients du réseau privé à la main, c'est bien, mais c'est vite fastidieux si vous en avez beaucoup. Il existe une possibilité de faire ça automatiquement au démarrage de vos machines en utilisant les services de DHCP. Vous pouvez aussi installer un serveur DHCP sur votre passerelle. C'est vraiment du luxe pour un petit réseau domestique, mais comme ce luxe ne vous coûtera rien de plus que de lire le chapitre sur DHCP…
Mais, avant tout, pensez d'abord à la sécurité et passez à Netfilter au plus vite.