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

0 Membres et 1 Invité sur ce sujet

Mastah

  • Abonné Orange Fibre
  • *
  • Messages: 470
  • XGS-PON et G-PON
Filtrer les raw socket avec nftables ?
« Réponse #12 le: 06 juillet 2024 à 04:19:52 »
Je pense que la configuration ci-dessous pourrait fonctionner (à tester).

  table netdev filter {
        chain egress {
                type filter hook egress device eth1 priority 0;
                ip daddr 255.255.255.255 meta priority set 0:6 comment "Set CoS value to 6 for DHCPv4 packets"
                ip6 daddr ff02::1:2 meta priority set 0:6 comment "Set CoS value to 6 for DHCPv6 packets"
        }
  }

J'ai testé ça à l'air OK.
04:17:37.253275 xx:xx:xx:xx:xx:xx > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 444: vlan 832, p 6, ethertype IPv4 (0x0800), (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 426)
La partie importante p 6 (sans ça c'est en p 0).
Je vais comparé avec un export des packets sous wireshark (meilleurs visualisation)

Mastah

  • Abonné Orange Fibre
  • *
  • Messages: 470
  • XGS-PON et G-PON
Filtrer les raw socket avec nftables ?
« Réponse #13 le: 06 juillet 2024 à 04:24:01 »
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.
« Modifié: 06 juillet 2024 à 06:23:45 par Mastah »

Mastah

  • Abonné Orange Fibre
  • *
  • Messages: 470
  • XGS-PON et G-PON
Filtrer les raw socket avec nftables ?
« Réponse #14 le: 06 juillet 2024 à 04:50:19 »
Voila le code pour l'injection

nft add "table netdev filter"
nft add "chain netdev filter egress { type filter hook egress device vlan832 priority 0; }"
nft insert "rule netdev filter egress ip daddr 255.255.255.255 meta priority set 0:6 comment \"Set CoS value to 6 for DHCPv4 packets\""
nft insert "rule netdev filter egress ip6 daddr ff02::1:2 meta priority set 0:6 comment \"Set CoS value to 6 for DHCPv6 packets\""

Changez vlan832 par l'interface correspondant au vlan 832.


EDIT:

Encore mieux avec
table netdev filter {
      chain egress {
              type filter hook egress device eth1 priority 0;
              udp dport { 67, 547 } meta priority set 0:6 comment "Set CoS value to 6 for DHCPv4/v6 packets"
      }
}
nft insert "rule netdev filter egress udp dport { 67, 547 } meta priority set 0:6 comment \"Set CoS value to 6 for DHCPv4/v6 packets\""
« Modifié: 06 juillet 2024 à 06:24:35 par Mastah »

jeremyp3

  • Abonné Orange Fibre
  • *
  • Messages: 724
  • Pau (64)
Filtrer les raw socket avec nftables ?
« Réponse #15 le: 06 juillet 2024 à 05:19:30 »
Bonjour,

pour moi c'est pas bon entièrement. ça marchera pour la première demande de bail, mais pour le renouvellement, c'est mort, à moins de rajouter l'ip de notre BNG orange en plus

Mastah

  • Abonné Orange Fibre
  • *
  • Messages: 470
  • XGS-PON et G-PON
Filtrer les raw socket avec nftables ?
« Réponse #16 le: 06 juillet 2024 à 05:39:42 »
Bonjour,

pour moi c'est pas bon entièrement. ça marchera pour la première demande de bail, mais pour le renouvellement, c'est mort, à moins de rajouter l'ip de notre BNG orange en plus

Comment ça, de rajouter l'ip de "notre BNG" ?

Les rules nftable reste tant qu'elles ne sont pas delete. Je vois pas comment un renew ne fonctionnerait pas. Sauf si un packet DHCP renew n'utilise pas le port udp 67/547

jeremyp3

  • Abonné Orange Fibre
  • *
  • Messages: 724
  • Pau (64)
Filtrer les raw socket avec nftables ?
« Réponse #17 le: 06 juillet 2024 à 05:48:32 »
re,

Au temps pour moi, j'étais rester sur l'adresse 255.255.255.255 dans la rule. j'avais pas fait attention qu'il y a juste les ports dests dans le dernier exemple.

du coup, désolé pour le bruit :)

Mastah

  • Abonné Orange Fibre
  • *
  • Messages: 470
  • XGS-PON et G-PON
Filtrer les raw socket avec nftables ?
« Réponse #18 le: 06 juillet 2024 à 05:52:35 »
Du coup je maj mon wiki / github bypass orange sur debian pour virer tout les référence a cgroup/cgexec.

Plus besoin de TC, cgroup ou de patch DHCP client. Amen.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 403
Filtrer les raw socket avec nftables ?
« Réponse #19 le: 06 juillet 2024 à 14:40:35 »
@Mastah : Merci ! :D

Mastah

  • Abonné Orange Fibre
  • *
  • Messages: 470
  • XGS-PON et G-PON
Filtrer les raw socket avec nftables ?
« Réponse #20 le: 06 juillet 2024 à 14:53:15 »
Petite remarque. Il est tjrs nécessaire de set un egress 6:6.

up ip l s $IFACE type vlan egress 6:6

Mastah

  • Abonné Orange Fibre
  • *
  • Messages: 470
  • XGS-PON et G-PON
Filtrer les raw socket avec nftables ?
« Réponse #21 le: 07 juillet 2024 à 15:14:08 »
@basilix, si tu mets en place, peux-tu me confirmer que c'est aussi OK pour toi ?
Ca me permettra d'être sur de pouvoir update mon repo git pour le bypass debian.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 403
Filtrer les raw socket avec nftables ?
« Réponse #22 le: 07 juillet 2024 à 16:43:39 »
@Mastah :

Je pense que je ne pourrais pas confirmer avant le week-end prochain. Mon routeur peut fonctionner avec Debian. Par facilité, j'ai choisi d'utiliser OpenWrt.
Normalement, le résultat devrait rester valide puisque le pare-feu intégré à OpenWrt est également basé sur nftables. En rapportant ma configuration sur le
fil de discussion de OpenWrt il y aurait d'autant plus de personnes qui pourraient signaler, en cas de problème. J'aurais bien aimé aller plus vite mais il ne
faut pas confondre vitesse et précipitation. Vu que je suis encore débutant...

Je rapporterais également le résultat dans ce fil discussion.

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 686
  • Cordon 74 - Orange Fibre Pro
Filtrer les raw socket avec nftables ?
« Réponse #23 le: 11 juillet 2024 à 15:46:16 »
Salut,

on pourrait faire ca pour prendre en compte le DSCP non ?

chain egress {
                type filter hook egress devices = $iface_wan priority 0;
                udp dport { 67, 547 } meta priority set 0:6 ip dscp set cs6 comment "egress_prio_orange_DHCP"
        }

Si j'ai bien compris, plus besoin d'autre chose que nftables pour que le DHCP client fonctionne correctement avec orange ?
Finalement, la version complète donnerait cela :

# ipv4 (for renew)
table ip mangle {
chain prio_orange {
        udp sport 68 udp dport 67 meta priority set 0:6 ip dscp set cs6 counter comment "mangle-prio_orange_DHCP"
}

    chain POSTROUTING {
    type filter hook postrouting priority mangle; policy accept;
        oifname $iface counter jump prio_orange comment "mangle-postrouting_orange"
   }
}

# ipv6
table ip6 mangle {
chain prio_orange {
    icmpv6 type { nd-router-solicit, nd-neighbor-solicit, nd-neighbor-advert } meta priority set 0:6 ip6 dscp set cs6 counter comment "mangle6-prio_orange_ICMP"
        udp sport 546 udp dport 547 meta priority set 0:6 ip6 dscp set cs6 counter comment "mangle6-prio_orange_DHCP"
}

    chain POSTROUTING {
    type filter hook postrouting priority mangle; policy accept;
        oifname $iface ip6 daddr { fe80::/10, ff02::/16 } counter jump prio_orange comment "mangle6-postrouting_orange"
   }
}

# netdev (for requests ipv4/ipv6)
# note : not tested, need to tryout (tc script could NOT be required anymore)...
table netdev filter {
chain egress {
    type filter hook egress devices = $iface_wan priority 0;
        udp dport { 67, 547 } meta priority set 0:6 ip dscp set cs6 comment "egress_prio_orange_DHCP"
        #udp dport { 67, 547 } meta priority set 0:6 comment "egress_prio_orange_DHCP"
}
}