Auteur Sujet: Comment filtrer le flux traduit par le NAT64 (Jool) ?  (Lu 6880 fois)

0 Membres et 3 Invités sur ce sujet

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 833
    • Mon dépôt GitHub
Comment filtrer le flux traduit par le NAT64 (Jool) ?
« Réponse #12 le: 29 mars 2024 à 18:03:51 »
@ppn_sd :

En sortie ? Rien.

Flux eth1 vers veth1 : trafic IPv4 du WAN vers Jool.
Flux eth0 vers veth1 : trafic IPv6 du LAN vers Jool.

ppn_sd

  • Abonné RED by SFR fibre FttH
  • *
  • Messages: 235
  • FLG (28190)
Comment filtrer le flux traduit par le NAT64 (Jool) ?
« Réponse #13 le: 29 mars 2024 à 18:06:34 »
Et tu filtres quoi là dedans ?

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 833
    • Mon dépôt GitHub
Comment filtrer le flux traduit par le NAT64 (Jool) ?
« Réponse #14 le: 29 mars 2024 à 18:29:07 »
Surveiller les connexions et essayer de détecter (capter) celles qui sont suspectes. On marque la séparation entre deux zones.

C'est fait différemment (NAT64 + NAT44 dans le même routeur). Mais sur le principe, c'est pareil que pour le trafic usuel (séparation WAN / LAN).

ppn_sd

  • Abonné RED by SFR fibre FttH
  • *
  • Messages: 235
  • FLG (28190)
Comment filtrer le flux traduit par le NAT64 (Jool) ?
« Réponse #15 le: 29 mars 2024 à 20:45:53 »
Tant pis pour ma curiosité :).

N'hésite pas à poster les suites de commandes quand tu seras parvenu à tes fins.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 833
    • Mon dépôt GitHub
Comment filtrer le flux traduit par le NAT64 (Jool) ?
« Réponse #16 le: 30 mars 2024 à 08:36:42 »
@ppn_sd:

Je pourrais exposer comment mettre en œuvre Jool dans OpenWrt. Car on pourrait éventuellement améliorer son intégration.
Comme je l'ai déjà signifié, je pense qu'on est également dans une configuration standard au niveau du pare-feu.


HS

Normalement, le trafic du réseau local sera essentiellement en IPv6. Il faudrait que je sache quels services externes sont accessibles uniquement en IPv4.
Ainsi, j'espère pouvoir détecter les flux inhabituels pour éventuellement les bloquer. J'aurai vraisemblablement plusieurs niveaux de pare-feu. Mais je débute
et je ne sais pas  encore quelle politique de filtrage appliquer suivant le pare-feu (routeur, station). Il faut penser la sécurité informatique dans son ensemble.
Certaines machines tournent encore sur MS Windows, d'autres sur GNU/Linux. Et certains appareils ne sont éventuellement pas renforcé e.g. l'imprimante.

Je ne préciserai pas la configuration de mon pare-feu en ligne (à quiconque). Avec les outils et techniques actuels, je pense que c'est trop dangereux. Par
exemple, les joueurs d'échecs professionnels étudient les ouvertures des parties de leur adversaire pour augmenter sensiblement leur chance de gagner.
Idem, en sécurité informatique. Il faut ralentir, de façon envisageable (rendre les choses difficiles), les personnes qui veillent sur les ouvertures et dans la
mesure du possible ne pas leur faciliter la mise. Je sais également qu'un pare-feu ne protège que partiellement. Mais je suis débutant et c'est une ligne de
défense parmi d'autres (sécurité en profondeur).

De façon générale, je fais aussi ces remarques car je prévois d'auto-héberger des services en ligne (les risques peuvent devenir accrus en étant branché
non stop) !

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 833
    • Mon dépôt GitHub
Comment filtrer le flux traduit par le NAT64 (Jool) ?
« Réponse #17 le: 30 mars 2024 à 15:40:33 »
J'ai fait des essais d'installation de Jool dans OpenWrt sous GNS3 pour m'exercer. Cela fonctionne !  :)

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 833
    • Mon dépôt GitHub
Configurer Jool dans OpenWrt
« Réponse #18 le: 30 mars 2024 à 17:48:51 »
Code: (/etc/config/network) [Sélectionner]
config device
option name 'veth1'
option type 'veth'
option peer_name 'veth2'
option macaddr '2a:33:f4:07:ba:c4'
option peer_macaddr '36:5d:06:b4:4d:21'

config interface 'jool'
option device 'veth1'
option proto 'static'
option ip6addr 'fd00::1/64'
option ipaddr '192.168.200.1/30'

On peut définir une interface réseau virtuelle avec UCI mais c'est réalisé partiellement. Le périphérique Ethernet virtuel veth2 apparaît dans le même espace de noms réseau que veth1.
Sinon, on aurait pu définir les interfaces dans la configuration UCI network. La configuration des espaces de noms disparaît après un redémarrage du routeur. Par conséquent, il faudrait
idéalement créer un script pour refaire automatiquement la configuration à chaque amorçage.

Certains paramètres peuvent également être spécifiés dans le fichier de configuration de Jool '/etc/jool/jool-nat64.conf.json'.

#opkg update && opkg install kmod-veth ip-full kmod-jool-netfilter jool-tools-netfilter

ip netns add joolns
ip link add veth1 type veth peer name veth2 netns jools

ip link set dev veth1 up
ip addr add 192.168.200.1/30 dev veth1
ip addr add fd00::1/64 dev veth1

ip netns exec joolns ip link set dev lo up
ip netns exec joolns ip link set dev veth2 up

ip netns exec joolns ip addr add dev veth2 192.168.200.2/30
ip netns exec joolns ip addr add fd00::2/64 dev veth2
ip netns exec joolns ip route add default via 192.168.200.1

ip netns exec joolns modprobe jool
ip netns exec joolns jool instance add --netfilter --pool6 64:ff9b::/96
ip netns exec joolns jool global update lowest-ipv6-mtu 1500
ip netns exec joolns jool pool4 add 192.168.200.2 33000-65535 --tcp
ip netns exec joolns jool pool4 add 192.168.200.2 33000-65535 --udp
ip netns exec joolns jool pool4 add 192.168.200.2 33000-65535 --icmp

On peut aussi définir la route vers 64:ff9b::/96 avec la configuration UCI.

Code: (/etc/config/network) [Sélectionner]
config route6 'nat64'
option interface 'jool'
option target '64:ff9b::/96'
option gateway 'fd00::2'

Ou en ligne de commande.

ip -6 route add 64:ff9b::/96 via fd00::2 dev veth1

Enfin, pour finir, ce qui m'a bloqué : configurer le pare-feu en ajoutant par exemple l'interface 'jool' dans la zone LAN du pare-feu.

uci add_list firewall.@zone[0].network='jool'

Code: (/etc/config/firewall) [Sélectionner]
config zone
option name 'lan'
list network 'lan'
list network 'jool'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
« Modifié: 31 mars 2024 à 08:41:38 par basilix »

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 833
    • Mon dépôt GitHub
Comment filtrer le flux traduit par le NAT64 (Jool) ?
« Réponse #19 le: 30 mars 2024 à 18:01:25 »
J'utilise un préfixe local (ULA prefix) au site administratif (ou campus) pour définir l'adresse de veth2. Dans la démo, c'est bien une adresse locale au lien (link-local address) qui est employée.
Mais je n'en connais pas la raison car je ne saisis pas très bien le principe d'emploi des adresses lien-local.

C'est sûrement la table de routage.
« Modifié: 30 mars 2024 à 18:21:52 par basilix »

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 833
    • Mon dépôt GitHub
Comment filtrer le flux traduit par le NAT64 (Jool) ?
« Réponse #20 le: 04 mai 2024 à 15:05:44 »
La page Wiki OpenWrt sur Jool a été complété récemment.

J'aurais bien voulu savoir si on pouvait lancer Jool dans un nouvel espace de nom réseau grâce à procd ?

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 833
    • Mon dépôt GitHub
Comment filtrer le flux traduit par le NAT64 (Jool) ?
« Réponse #21 le: Aujourd'hui à 18:08:15 »
Pourquoi Jool n'est-il pas lancé dans l'espace réseau principal ?

Citation de: ydahhrk
As I said in this comment, I do not see any problems with filtering in mangle, but some iptables documentation does (apparently). I do not know the reasoning, so I will neither discourage nor encourage it.
On the other hand, now that Jool can be enclosed in a namespace, filtering can be done in the forwarding chains. This might not look as clean as it could be, but is no different than if Jool were a device
driver. So either way, it looks like this is no longer an issue.


Source : GitHub

Citer
Alternatively, if you know what you’re doing, you can filter on mangle.

Source : Netfilter design



Dans l'image ci-dessus, on voit DNAT dans Prerouting Hook et SNAT dans Postrouting Hook.

prerouting: sees all incoming packets, before any routing decision has been made. Packets may be addressed to the local or remote systems.
postrouting: sees all packets after routing, just before they leave the local system.

Source : Configuring chains

Dans la doc. de nftables, on peut voir que l'on peut filtrer dans la famille inet, dans une chaîne de type filter, aux crochets prerouting et postrouting.

Sur le site Web de Jool on recommande d'utiliser un espace de nom séparé pour le filtrage des paquets. Mais l'auteur reconnaît sa méconnaissance.

Le passage ci-dessous provient de la documentation OpenWrt. Il a été re-basé ultérieurement en suivant un tutoriel d'Ondřej Caletka.

Citer
Option 1 - Running in the main network namespace

Pros
  • easy to activate
  • basic integration with the uci configuration system
Cons
  • hard to enforce firewall rules
  • translation not available for locally (on the router) generated traffic
  • fights over dynamic port numbers
  • needs to be reconfigured every time the public IPv4 changes

Source : OpenWrt.org

Au final, il me semble que les arguments avancés ci-dessus ne sont pas valides.

Les deux derniers points sont également présents dans un NAT44. Le routeur est en double pile donc le trafic IPv4 local ne devrait pas transiter par le traducteur NAT64.

Le premier point s'avère effectivement problématique. Est-ce que l'on peut filtrer normalement le trafic n'étant pas destiné à traverser le NAT64 (IPv6 natif) ? Il semblerait
qu'en principe tout le trafic soit intercepté par le traducteur. C'est la partie obscure. De plus, faut-il aussi filtrer dans le sens inverse IPv4 WAN (NAPT) vers IPv6 du LAN ?
Il me semble que non car le trafic doit avoir été initié par un hôte du réseau local mais je ne maîtrise pas ces concepts.

Édition : Le troisième point peut être problématique si on a des réseaux IPv4 et IPv6.