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

0 Membres et 4 Invités sur ce sujet

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 269
Filtrer les raw socket avec nftables ?
« le: 02 juillet 2024 à 22:09:51 »
Peut-on filtrer les « raw packets » avec nftables ?

C'est juste pour savoir si on peut le faire avec le nouveau hook « egress » de nftables.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 269
Filtrer les raw socket avec nftables ?
« Réponse #1 le: 03 juillet 2024 à 06:29:32 »
C'est le Wiki Netfilter.org qui me fait penser cela.

Citer
Base chain hooks

ingress (only in netdev family since Linux kernel 4.2, and inet family since Linux kernel 5.10): sees packets immediately after they are passed up from the NIC driver, before even prerouting. So you have an alternative to tc.


Citer
Introduction

nftables can replace not even iptables, but it can be used to replace very poorly documented tc filter rules and allow user to classify packets into tc class / qdisc infrastructure.
[...]
* action used to classify packets into tc structure is meta set priority "1:0x2" - 0x can be omitted, but says clearly it is hex number - double quotes are required


Citer
Ingress hook

You can use nftables with the ingress hook to enforce very early filtering policies that take effect even before prerouting. Do note that at this very early stage, fragmented datagrams have not yet been reassembled. So, for example, matching ip saddr and daddr works for all ip packets, but matching L4 headers like udp dport works only for unfragmented packets, or the first fragment.


Personnellement, je préfère que le client DHCP soit modifié si nécessaire afin de définir un PCP (priority code point) adéquat sur le paquet DHCP (trame) « Discovery ».

Mastah

  • Abonné Orange Fibre
  • *
  • Messages: 388
  • XGS-PON et G-PON
Filtrer les raw socket avec nftables ?
« Réponse #2 le: 03 juillet 2024 à 23:23:56 »
Bah d'après la doc il semble que oui, si ils parlent de remplacer TC

Je suis sur un kernel 6.1.0 et nft 1.0.6. Je dois donc pouvoir testé. Par contre j'ai la mega flemme de faire ça solo :D

Mastah

  • Abonné Orange Fibre
  • *
  • Messages: 388
  • XGS-PON et G-PON
Filtrer les raw socket avec nftables ?
« Réponse #3 le: 03 juillet 2024 à 23:30:01 »
Personnellement, je préfère que le client DHCP soit modifié si nécessaire afin de définir un PCP (priority code point) adéquat sur le paquet DHCP (trame) « Discovery ».

De mon coté je préfère qu'un serveur DHCP n'ait pas à ce soucier de la prio des packets qu'il émet. Chaque couche devrait avoir sa responsabilité bien partagé.
Je préfère faire ça autrement. La solution via NFTable est pas mal du coup. A voir si fonctionnel cela dit.

Après j'ai un doute qu'avec NFTable tu puisses modifié un packet autre que l'accepter ou le refuser.

Mastah

  • Abonné Orange Fibre
  • *
  • Messages: 388
  • XGS-PON et G-PON
Filtrer les raw socket avec nftables ?
« Réponse #4 le: 03 juillet 2024 à 23:43:58 »
Peut-être que si en faite, mais j'ai un gros doute.

Citer
Since nftables v0.7 you can match the packet priority, the tc classid:
nft add rule filter forward meta priority abcd:1234cf. https://wiki.nftables.org/wiki-nftables/index.php/Matching_packet_metainformation


nft add rule mangle postrouting tcp sport 80 meta priority set 1ou
tcp dport 25565 ip dscp set cs6

Potentiel recherche : nftables "802.1p" egress netdev
« Modifié: 04 juillet 2024 à 01:42:22 par Mastah »

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 269
Filtrer les raw socket avec nftables ?
« Réponse #5 le: 04 juillet 2024 à 09:21:24 »
Mon objectif c'est de faire de l'auto-hébergement Web. Mais face à l'amplification des cyberattaques, je préfère me former. Il y a trop de choses que je ne connais pas
et ma technique d'apprentissage n'est pas forcément très efficace. Je pense que j'assimile les choses de manière trop séquentielle, cela me freine car je n'expérimente
pas de la bonne façon. Je lis le Wiki Netfilter.org alors que j'aurais pu essayer de réaliser des tests avec des machines virtuelles sur mon PC. Je ne sais pas pourquoi
mais cela ne me dit rien, ou je n'en ai pas vraiment envie. Je pense que c'est faire face à la complexité qui me fait peur. Bref !

J'ai également fait des recherches mais je n'ai pas trouvé tellement d'informations sur le sujet.

Citation de: Mastah
Après j'ai un doute qu'avec NFTable tu puisses modifier un packet autre que l'accepter ou le refuser.

Citation de: nftables.org
Rules take action on network packets (e.g. accepting or dropping them) based on whether they match specified criteria.

Each rule consists of zero or more expressions followed by one or more statements. Each expression tests whether a packet matches a specific payload field or packet/flow metadata. Multiple expressions are linearly evaluated from left to right: if the first expression matches, then the next expression is evaluated and so on. If we reach the final expression, then the packet matches all of the expressions in the rule, and the rule's statements are executed. Each statement takes an action, such as setting the netfilter mark, counting the packet, logging the packet, or rendering a verdict such as accepting or dropping the packet or jumping to another chain. As with expressions, multiple statements are linearly evaluated from left to right: a single rule can take multiple actions by using multiple statements. Do note that a verdict statement by its nature ends the rule.


Source : Nftables Wiki: Simple rule management

Les systèmes d'exploitation ont intégré des fonctionnalités au cours de leur histoire. Et donc cela peut être difficile de s'y retrouver.

Citation de: netfilter.Org
The netfilter project enables packet filtering, network address [and port] translation (NA[P]T), packet logging, userspace packet queueing and other packet mangling.

Source : Netfilter.org

Citation de: nftables.org
Netfilter enables filtering at multiple networking levels. With iptables there is a separate tool for each level: iptables, ip6tables, arptables, ebtables. With nftables the multiple networking levels are abstracted into families, all of which are served by the single tool nft.

Source : Nftables families

Le projet Netfilter qualifie nftables (netfilter tables) de « système de classification de paquets » et pas seulement comme un pare-feu logiciel.

Citation de: netfilter.org
iptables is a generic firewalling software that allows you to define rulesets. Each rule within an IP table consists of a number of classifiers (iptables matches) and one connected action (iptables target).

Citation de: netfilter.org
nftables is the successor of iptables, it allows for much more flexible, scalable and performance packet classification. [...]

Source : Netfilter.org

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 269
Filtrer les raw socket avec nftables ?
« Réponse #6 le: 04 juillet 2024 à 16:02:16 »
J'ai du mal à percevoir comment les familles dans nftables sont appliquées avec netfilter. C'est ennuyant pour saisir le principe !

[19:13] Je croyais que les paquets étaient désencapsulé par le pilote et que le crochet « ingress » était un processus géré par le pilote, lequel aurait été contrôlé par la carte réseau.
Mais le noyau peut implémenter une partie de la couche liaison (L2) ainsi que la couche réseau (L3). D'ailleurs, le pilote fait parti du système d'exploitation et les paquets sont sûrement
désencapsulé lorsqu'ils traversent le crochet « input ». Du coup, je saisi nettement mieux d’où venait mon problème de compréhension.

% nft add rule filter input ether daddr ff:ff:ff:ff:ff:ff counter
Citation de: nftables.org
Do not forget that the layer 2 header information is only available in the input path.

Citation de: Laura Garcia
On Sun, Mar 15, 2020 at 2:29 PM Pablo Neira Ayuso <pablo@netfilter.org> wrote:
>
> Hello Daniel,
>
> On Sat, Mar 14, 2020 at 01:12:02AM +0100, Daniel Borkmann wrote:
> > On 3/13/20 3:55 PM, Pablo Neira Ayuso wrote:
> [...]
> > > We have plans to support for NAT64 and NAT46, this is the right spot
> > > to do this mangling. There is already support for the tunneling
> >
> > But why is existing local-out or post-routing hook _not_ sufficient for
> > NAT64 given it being IP based?
>
> Those hooks are not coming at the end of the IP processing. There is
> very relevant IP code after those hooks that cannot be bypassed such
> as fragmentation, tunneling and neighbour output. Such transformation
> needs to happen after the IP processing, exactly from where Lukas is
> proposing.
>
> [...]
> > > infrastructure in netfilter from ingress, this spot from egress will
> > > allow us to perform the tunneling from here. There is also no way to
> > > drop traffic generated by dhclient, this also allow for filtering such
> > > locally generated traffic. And many more.

Hi,

Any chance to continue with this approach? I'm afraid outbound
af_packets also could not be filtered without this hook.

Thanks.


Source : [nf-next,3/3] netfilter: Introduce egress hook

AF_PACKET désigne les « packet sockets » (man 7 packet).
« Modifié: 04 juillet 2024 à 19:19:18 par basilix »

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 269
Filtrer les raw socket avec nftables ?
« Réponse #7 le: Hier à 08:26:36 »
J'essayerais de modifier la CoS avec nftables dans la configuration de mon routeur. Mais avant, je préfère me former sur le pare-feu.

Nicolas Massé mentionne qu'on devrait pouvoir faire cela avec nftables.

Citation de: Nicolas Massé
Il est à noter qu’à partir du noyau 5.7, le filtre “egress” de netfilter devrait permettre la capture des paquets DHCPv4 et l’étiquetage de leur priorité. Le client DHCP patché ne serait alors plus nécessaire.

Mastah

  • Abonné Orange Fibre
  • *
  • Messages: 388
  • XGS-PON et G-PON
Filtrer les raw socket avec nftables ?
« Réponse #8 le: Hier à 10:12:49 »
Oui mais si il n'y a aucune resource en set sur l'egress, ça ne sera pas possible. Hors de ce que j'ai vu les objet qui permettent d'interagir avec la prio ne sont qu'en get/filter.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 269
Filtrer les raw socket avec nftables ?
« Réponse #9 le: Hier à 12:16:23 »
@Mastah : Je ne sais pas mais il me semble qu'on peut le faire.

  table netdev filter {
        chain egress {
                type filter hook egress devices = { eth0, eth1 } priority 0;
                meta priority set ip saddr map { 192.168.10.2 : abcd:2, 192.168.10.3 : abcd:3 }
        }
  }

Source : https://lore.kernel.org/all/YZZV42ERgpDbk%2FzL@salvia/

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 269
Filtrer les raw socket avec nftables ?
« Réponse #10 le: Hier à 18:31:09 »
Je ne connais pas vraiment DHCPv4.

En DHCPv6, il me semble que les transactions se font généralement avec l'adresse multicast (tous les serveurs et relais DHCP) ff02::1:2.
[21:09] Il me semble que le client DHCPv6 utilise son adresse locale au lien (link-local address: LLA), celle de l'interface connectée au réseau FAI (c.f. RFC 8415, page 16).

Citation de: RFC 8415, page 54
If the client has a source address of sufficient scope that can be used by the server as a return address and the client has received a Server Unicast option (see Section 21.12) from the server, the client
SHOULD unicast any Request, Renew, Release, and Decline messages to the server.


Citation de: RFC 8415, page 89
When the server receives a message via unicast from a client to which the server has not sent a Server Unicast option (or is not currently configured to do so), the server discards that message
and responds with an Advertise (when responding to a Solicit message) or Reply message (when responding to any other messages) containing a Status Code option (see Section 21.13) with
the value UseMulticast
, a Server Identifier option (see Section 21.3) containing the server’s DUID, the Client Identifier option (see Section 21.2) from the client message (if any), and no other options.


Citation de: RFC 8415, page 23
All_DHCP_Relay_Agents_and_Servers (ff02::1:2) A link-scoped multicast address used by a client to communicate with neighboring (i.e., on-link) relay agents and servers.
All servers and relay agents are members of this multicast group.


Je précise cela car il serait facile de filtrer les paquets grâce à l'adresse multicast locale au lien.

[20:58] Il semblerait qu'en DHCPv4 le client communique avec le serveur en « broadcast limité » avec l'IP destination 255.255.255.255.
[21:05] Le paquet DHCP DISCOVER a pour adresse IP source 0.0.0.0 et IP destination 255.255.255.255.


Hyperlien : (IT-CONNECT.FR) : DHCP : Mode de fonctionnement.
« Modifié: Hier à 21:15:42 par basilix »

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 269
Filtrer les raw socket avec nftables ?
« Réponse #11 le: Hier à 21:20:26 »
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"
        }
  }