Auteur Sujet: Filtrer les raw socket avec nftables ?  (Lu 5629 fois)

0 Membres et 1 Invité sur ce sujet

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 403
Filtrer les raw socket avec nftables ?
« Réponse #60 le: 27 juillet 2024 à 12:06:56 »
@cyayon :

C'est ma configuration OpenWrt qui ne fonctionne pas.

Mon ONU FS semble parvenir à créer le lien optique avec l'OLT. Mais il y a un avertissement qui apparaît dans le journal système.

Citer
sfp sfp-1: please wait, module slow to respond

J'ai un message d'erreur par rapport à ma table netdev. Il faudrait que je vérifie si il apparaît lorsque la fibre optique est branchée au module optique.
Je crois qu'il pourrait y avoir des effets de bords à cause d'une mauvaise configuration de mon client DHCPv6. Je vais corriger si je peux et vérifier à nouveau.

Ces erreurs sont sûrement entrelacées. J'avais une erreur de configuration de mon client DHCPv4 qui empêchait d'émettre le paquet DHCP Discover. Ensuite,
le tag VLAN n'apparaît pas dans la trame encapsulant ce paquet DHCP.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 403
Filtrer les raw socket avec nftables ?
« Réponse #61 le: 27 juillet 2024 à 14:26:01 »
Alors il s'avère que le client DHCPv6 avait une option mal formée et cela remplissait tout l'espace dans le journal.

Citation de: logread
Tue Jul 23 22:03:08 2024 kern.info kernel: [   11.731222] Backport generated by backports.git v6.1.97-1-29-gf1d24a3683b2
Tue Jul 23 22:03:08 2024 kern.info kernel: [   11.742630] sfp sfp-1: Host maximum power 3.0W
Tue Jul 23 22:03:08 2024 kern.info kernel: [   11.747690] sfp sfp-2: Host maximum power 3.0W
Tue Jul 23 22:03:08 2024 user.info kernel: [   11.840893] urngd: v1.0.2 started.
Tue Jul 23 22:03:08 2024 kern.info kernel: [   12.212478] mt798x-wmac 18000000.wifi: HW/SW Version: 0x8a108a10, Build Time: 20221012174743a
Tue Jul 23 22:03:08 2024 kern.info kernel: [   12.212478]
Tue Jul 23 22:03:08 2024 kern.info kernel: [   12.345696] mt798x-wmac 18000000.wifi: WM Firmware Version: ____000000, Build Time: 20221012174805
Tue Jul 23 22:03:08 2024 kern.info kernel: [   12.450033] mt798x-wmac 18000000.wifi: WA Firmware Version: DEV_000000, Build Time: 20221012174937
Tue Jul 23 22:03:08 2024 kern.info kernel: [   12.555482] mt798x-wmac 18000000.wifi: registering led 'mt76-phy0'
Tue Jul 23 22:03:08 2024 kern.info kernel: [   12.563186] mt798x-wmac 18000000.wifi: registering led 'mt76-phy1'
Tue Jul 23 22:03:08 2024 kern.info kernel: [   15.220534] PPP generic driver version 2.4.2
Tue Jul 23 22:03:08 2024 kern.info kernel: [   15.225518] NET: Registered PF_PPPOX protocol family
Tue Jul 23 22:03:08 2024 user.info kernel: [   15.232371] kmodloader: done loading kernel modules from /etc/modules.d/*
Tue Jul 23 22:03:08 2024 kern.warn kernel: [   15.653380] sfp sfp-1: please wait, module slow to respond
Tue Jul 23 22:03:13 2024 authpriv.info dropbear[1735]: Not backgrounding
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall: In file included from /dev/stdin:260:1-39:
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall: /etc/custom-netdev-table.nft:6:41-57: Error: No such file or directory; did you mean chain ‘egress’ in table netdev ‘filter’?
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall:                 type filter hook egress device "eth1.832" priority filter; policy accept;
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall:                                         ^^^^^^^^^^^^^^^^^
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall: In file included from /dev/stdin:260:1-39:
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall: /etc/custom-netdev-table.nft:5:15-20: Error: Could not process rule: No such file or directory
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall:         chain egress {
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall:               ^^^^^^
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall: In file included from /dev/stdin:260:1-39:
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall: /etc/custom-netdev-table.nft:5:15-20: Error: Could not process rule: No such file or directory
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall:         chain egress {
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall:               ^^^^^^
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall: In file included from /dev/stdin:260:1-39:
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall: /etc/custom-netdev-table.nft:5:15-20: Error: Could not process rule: No such file or directory
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall:         chain egress {
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall:               ^^^^^^
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall: In file included from /dev/stdin:260:1-39:
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall: /etc/custom-netdev-table.nft:5:15-20: Error: Could not process rule: No such file or directory
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall:         chain egress {
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall:               ^^^^^^
Tue Jul 23 22:03:14 2024 user.notice : Added device handler type: bonding
Tue Jul 23 22:03:14 2024 user.notice : Added device handler type: 8021ad
Tue Jul 23 22:03:14 2024 user.notice : Added device handler type: 8021q
Tue Jul 23 22:03:14 2024 user.notice : Added device handler type: macvlan
Tue Jul 23 22:03:14 2024 user.notice : Added device handler type: veth
Tue Jul 23 22:03:14 2024 user.notice : Added device handler type: bridge
Tue Jul 23 22:03:14 2024 user.notice : Added device handler type: Network device
Tue Jul 23 22:03:14 2024 user.notice : Added device handler type: tunnel
Tue Jul 23 22:03:14 2024 daemon.notice procd: /etc/rc.d/S25packet_steering: pid 340's current affinity list: 0-3
Tue Jul 23 22:03:14 2024 daemon.notice procd: /etc/rc.d/S25packet_steering: pid 340's new affinity list: 0


Wep c'est bon. Par contre il y a un petit souci. L'interface n'étant pas encore existante au démarrage mais aussi au start du service NFT, il n'est donc pas possible de directement placer la config nftable dans /etc/nftables.conf

Il faut l'injecter dans la phase up du vlan832, juste avant de faire les req DHCP. Il faut aussi delete les rules sur le down de l'interface.


Dans mon cas, je croyais que OpenWrt aurait pu résoudre ce problème de façon automatique.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 403
Filtrer les raw socket avec nftables ?
« Réponse #62 le: 27 juillet 2024 à 15:05:54 »
Peut-être qu'il suffirait de remplacer eth1.832 par eth1 ? À voir.

Mastah

  • Abonné Orange Fibre
  • *
  • Messages: 470
  • XGS-PON et G-PON
Filtrer les raw socket avec nftables ?
« Réponse #63 le: 28 juillet 2024 à 14:25:05 »
Ton problème c'est surtout que nftable se lance avant la couche iface et donc ton iface n'existe pas encore lorsqu'il démarre. D'où l'erreur.
Et c'est bien sur l'iface vlan qu'il faut placer la règle.
C'est pour ça que j'ai aussi ajouter le script d'inject rules, car dans les fait c'est la seule manière de config nftable une fois que l'iface vlan à été créé.

Je voulais t'expliquer ça sur discord, mais tu sembles vouloir tout compliquer :p

# WAN
auto wan
allow-hotplug wan
iface wan inet manual

# VLAN832
auto vlan832
allow-hotplug vlan832
iface vlan832 inet manual

        # Bind vlan
        vlan-raw-device wan

        # LiveBox mac address
        hw-mac-address XX:XX:XX:XX:XX:XX

        # Wait for ONU to be UP
        up /etc/network/wait_for_wan_v2 wan

        # Reload NFTable
        up nft -f /etc/nftables.conf

        # Add nftable PCP 6 / 802.1Q prio 6 on egress DHCPv4/v6 packet
        up /etc/network/inject_pcp_6

        # Add nftable fastpath rules
        up /etc/network/inject_flowtable_fastpath

        # Generate Orange Options (user-class, vendor-class, option 90)
        up /etc/dhcp/dhclient-orange-generator

        # Egress prio 6:6 (aka VLAN-PCP)
        up ip l s $IFACE type vlan egress 6:6
        up sleep 2

        # DHCP Up
        up dhclient -4 -i $IFACE -cf /etc/dhcp/dhclient-orange-v4.conf -df /var/lib/dhcp/dhclient-orange-v4.duid -lf /var/lib/dhcp/dhclient-orange-v4.lease -v
        up sleep 2
        up dhclient -6 -P -D LL -i $IFACE -cf /etc/dhcp/dhclient-orange-v6.conf -df /var/lib/dhcp/dhclient-orange-v6.duid -lf /var/lib/dhcp/dhclient-orange-v6.lease -e interface_internal="$IFACE:01 lan:02" -v

        # DHCP Down
        down dhclient -6 -P -D LL -i $IFACE -cf /etc/dhcp/dhclient-orange-v6.conf -df /var/lib/dhcp/dhclient-orange-v6.duid -lf /var/lib/dhcp/dhclient-orange-v6.lease -e interface_internal="$IFACE:01 lan:02" -v -r
        down sleep 2
        down dhclient -4 -i $IFACE -cf /etc/dhcp/dhclient-orange-v4.conf -df /var/lib/dhcp/dhclient-orange-v4.duid -lf /var/lib/dhcp/dhclient-orange-v4.lease -v -r


=> # Add nftable PCP 6 / 802.1Q prio 6 on egress DHCPv4/v6 packet

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 403
Filtrer les raw socket avec nftables ?
« Réponse #64 le: 28 juillet 2024 à 17:19:52 »
@Mastah :

C'est l'informatique qui est complexe.

Il y a des choses incohérentes que je n'arrive pas à expliquer.

1. On peut changer la priorité interne des paquets dans une table de la famille netdev.

    Car c'est un développeur Netfilter ayant intégré cette fonctionnalité egress dans le
    noyau Linux qui le fait.

2. Les règles dans ma table « netdev filter » parviennent à modifier le DSCP des paquets
    de type 802.1Q mais pas leur PCP (plusieurs déclarations nftables dans la même règle).

      table netdev filter {
        chain egress {
                type filter hook egress device eth1 priority 0;
                udp dport 547 meta priority set 0:6 ip6 dscp set cs6
        }
   }


3. La règle DHCPv6 définie dans une chaîne au crochet postrouting (hook) parvient à modifier le
    DSCP et le PCP des paquets DHCPv6 Discover.

    Donc, la correspondance priorité interne des paquets --> VLAN PCP est appliquée.

4. Pourquoi définir un filtrage sur l'interface 802.1Q alors qu'on peut filtrer avec l'interface eth1 ?

Citation de: man nft
NETDEV ADDRESS FAMILY

The Netdev address family handles packets from the device ingress and egress path. This family allows you to filter packets of any ethertype
such as ARP, VLAN 802.1q, VLAN 802.1ad (Q-in-Q) as well as IPv4 and IPv6 packets.


zoc

  • Abonné Orange Fibre
  • *
  • Messages: 4 456
  • Antibes (06) / Mercury (73)
Filtrer les raw socket avec nftables ?
« Réponse #65 le: 28 juillet 2024 à 17:30:00 »
Ton problème c'est surtout que nftable se lance avant la couche iface
Il y a ce genre de limitation dans nftables ?

Si c’est le cas c’est clairement une régression comparé à iptables où il est tout à fait possible de faire référence à une interface qui n’existe pas encore…

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 403
Filtrer les raw socket avec nftables ?
« Réponse #66 le: 28 juillet 2024 à 17:37:26 »
@Mastah :

Le problème que j'ai mentionné a disparu lorsque j'ai spécifié l'interface eth1 à la place de eth1.832.

Citer
Tue Jul 23 22:03:13 2024 daemon.notice procd: /etc/rc.d/S19firewall: /etc/custom-netdev-table.nft:6:41-57: Error: No such file or directory; did you mean chain ‘egress’ in table netdev ‘filter’?

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 403
Filtrer les raw socket avec nftables ?
« Réponse #67 le: 28 juillet 2024 à 17:41:57 »
Pour moi, il s'agirait d'un bogue. Je tente un dernier test sans trop d'espoir...

Mastah

  • Abonné Orange Fibre
  • *
  • Messages: 470
  • XGS-PON et G-PON
Filtrer les raw socket avec nftables ?
« Réponse #68 le: 28 juillet 2024 à 19:38:43 »
Non c'est pas un bug.

nftable est stateless lorsque tu écris des règles avec le nom d'une interface dans la règles, mais lorsque tu crées une règle SUR l'interface il faut que celle-ci existe. C'est exactement la même chose avec iptable.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 403
Filtrer les raw socket avec nftables ?
« Réponse #69 le: 28 juillet 2024 à 20:06:47 »
@Mastah :

Mais dans mon cas, je te confirme que mes règles dans la table « netdev » sont appliquées.

Donc, cela n'explique toujours pas pourquoi le DSCP est modifié par ces règles mais pas le PCP (tel qu'indiqué par
tcpdump). En outre, je trouve bizarre de filtrer sur l'interface eth1.802 alors que la page de manuel de nft
indique qu'on peut filtrer des paquets de type VLAN 802.1Q.

Mastah

  • Abonné Orange Fibre
  • *
  • Messages: 470
  • XGS-PON et G-PON
Filtrer les raw socket avec nftables ?
« Réponse #70 le: 28 juillet 2024 à 20:09:14 »
Probablement parce que le kernel de openwrt est soit pas complément config, ne support pas encore les nouveau ajout etc ...
Je ne me rappel plus à partir de quel version du kernel c'est dispo.

Et c'est bien sur le vlan qu'il faut faire les modif, pas phy wan

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 403
Filtrer les raw socket avec nftables ?
« Réponse #71 le: 28 juillet 2024 à 20:21:12 »
@Mastah :

C'est disponible à partir de la version 16.

Oui, mais les incohérences persistent.

De plus, la documentation me fait penser que des paquets différents peuvent être filtrés au sein de la même table.

Citation de: man nft
NETDEV ADDRESS FAMILY

The Netdev address family handles packets from the device ingress and egress path. This family allows you to filter packets of any ethertype
such as ARP, VLAN 802.1q, VLAN 802.1ad (Q-in-Q) as well as IPv4 and IPv6 packets.


Les tables dans nftables ne sont que des conteneurs de chaînes. Il est vrai que ce sont les chaînes qui définissent le « paramètre » device. On pourrait donc
penser qu'il faille définir plusieurs chaînes avec des interfaces différentes : e.g. eth1 et eth1.832.

Mais pourquoi mes règles relatives à l'interface eth1 parviennent à modifier le DSCP des paquets encapsulés dans les trames de type 802.1Q ?
Pourquoi le PCP des paquets DHCPv6 Discover est modifiable par une règle similaire mais située dans le crochet (hook) postrouting lequel
est appliqué avant le crochet egress ?