Mise en place d’un NAT avec filtrage IP et redirection
Ici, nous allons suivre le schéma suivi et le flux réseau correspondant :
I. Explication du contexte
Dans cette architecture, qui peut être reproduite via des machines virtuelles. Nous aurons trois machines :
- Un serveur Linux faisant office de routeur qui séparera le LAN du WAN. Il disposera donc de deux interfaces ainsi que de nftables pour effectuer du NAT source unidirectionnel et diverses opérations de filtrage.
- Un serveur web, dans le LAN. Celui-ci fera tourner son service web sur le port 80.
- Un client qui aura seulement besoin d'aller sur le web (DNS, HTTP, HTTPS), dans le LAN également.
Un petit indice : Rappelez-vous du rôle du hook FORWARD vu dans le module sur le fonctionnement de NetFilter.
II. Attention ! Voila le corrigé
Voici maintenant le corrigé que je vous propose pour cet exercice :
table ip mon_filtreIPv4 { chain prerouting { type nat hook prerouting; iif eth0 tcp dport http dnat 192.168.240.131 # handle 96 } chain postrouting { type nat hook postrouting; ip saddr 192.168.240.0/24 oif eth0 snat 192.168.10.135 # handle 103 } chain forward { type filter hook forward; ct state established,related accept # handle 97 tcp dport http accept # handle 98 ip saddr 192.168.240.131 tcp sport http accept # handle 99 tcp dport https accept # handle 100 udp dport domain accept # handle 101 drop # handle 102 } }
Comme vous pouvez le voir, nous avons utilisé une nouvelle chaine, dont je vous avais parlé dans les tout premiers chapitres du cours, la chaine FORWARD liée au hook du même nom.
Lors du chapitre sur le NAT, j'ai bien mis en évidence le fait qu'il fallait utiliser les hooks PREROUTING et POSTROUTING pour effectuer le NAT. Cependant entre ces deux hooks se situe FORWARD, un hook qui est utilisé pour effectuer des actions de filtrage sur les paquets ne passant pas par les hook INPUT et OUPUT qui eux gèrent les entrées et sorties de la couche applicative de la machine en elle-même. Cet exercice est donc l'occasion d'utiliser ce hook.
La partie NAT reprend sensiblement ce qui est exposé dans le cours associé. Dans la chaine POSTROUTING, nous allons effectuer notre source NAT, c’est-à-dire que l'on va remplacer, dans les paquets qui quittent le LAN, l'adresse IP source par l'adresse IP de l'interface de sortie de notre routeur (l'adresse IP coté WAN). Il faut donc adapter le nom de l'interface et l'IP de sortie à votre contexte.
Sur la chaine PREROUTING, nous mettons en place notre destination NAT, tout ce qui va arriver sur le port 80 de l'interface WAN sera redirigé sur une adresse IP interne au LAN, rendant ainsi le serveur web accessible sur le WAN (uniquement pour le port TCP/80).
Dans la chaine FORWARD, nous allons autoriser principalement les paquets en sortie. La sécurité aurait pu être améliorée en précisant à chaque fois quelles doivent être les IP (ou la plage IP) autorisée à sortir.