Publication du filtre de paquets nftables 0.9.5

Publié publication du filtre de paquets nftables 0.9.5, développant une alternative à iptables, ip6tables, arptables et ebtables grâce à l'unification des interfaces de filtrage des paquets pour IPv4, IPv6, ARP et les ponts réseau. Le paquet nftables inclut des composants de filtrage de paquets fonctionnant en espace utilisateur, tandis qu'au niveau du noyau, le fonctionnement est assuré par le sous-système nf_tables, intégré au noyau Linux depuis la version 3.13. Les modifications nécessaires pour le fonctionnement de la version nftables 0.9.5 sont incluses dans le noyau Linux 5.7.

Au niveau du noyau, un seul interface général est fourni, sans dépendance à un protocole spécifique, offrant des fonctions de base pour extraire des données des paquets, effectuer des opérations sur les données et gérer le flux. Les règles de filtrage spécifiques et les gestionnaires de protocoles sont compilés en bytecode en espace utilisateur, après quoi ce bytecode est chargé dans le noyau via l'interface Netlink et exécuté dans le noyau dans une machine virtuelle spéciale, ressemblant à BPF (Berkeley Packet Filters). Cette approche permet de réduire considérablement la taille du code de filtrage fonctionnant au niveau du noyau et de déporter toutes les fonctions d'analyse des règles et de logique de traitement des protocoles en espace utilisateur.

Les principales nouveautés :

  • La prise en charge des compteurs de paquets et de trafic, associés aux éléments de l'ensemble, a été ajoutée. Les compteurs sont activés à l'aide du mot-clé « counter » :

    table ip x {
    set y {
    typeof ip saddr
    counter
    elements = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    chaîne z {
    type filtre hook sortie priorité filtre ; politique accepter ;
    ip daddr @y
    }
    }

  • Pour définir les valeurs initiales des compteurs, par exemple pour restaurer des compteurs précédents après un redémarrage, la commande « nft -f » peut être utilisée :

    # cat ruleset.nft
    table ip x {
    set y {
    typeof ip saddr
    counter
    éléments = { 192.168.10.35 compteur paquets 1 octets 84, 192.168.10.101 \
    compteur p 192.168.10.135 compteur paquets 0 octets 0 }
    }

    chaîne z {
    type filtre hook sortie priorité filtre ; politique accepter ;
    ip daddr @y
    }
    }
    # nft -f ruleset.nft
    # nft list ruleset
    table ip x {
    set y {
    typeof ip saddr
    counter
    éléments = { 192.168.10.35 compteur paquets 1 octets 84, 192.168.10.101 \
    compteur p 192.168.10.135 compteur paquets 0 octets 0 }
    }

    chaîne z {
    type filtre hook sortie priorité filtre ; politique accepter ;
    ip daddr @y
    }
    }

  • Le support des compteurs a également été ajouté aux tables de flux :

    table ip foo {
    table de flux bar {
    hook entrée priorité -100
    dispositifs = { eth0, eth1 }
    counter
    }

    chaîne forward {
    type filtre hook forward priorité filtre ;
    flux ajout @bar compteur
    }
    }

    Une liste des compteurs peut être consultée avec la commande « conntrack -L » :

    tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 paquets=9 octets=608 \
    src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 paquets=8 octets=428 [OFFLOAD] marque=0 \
    secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
    paquets=1005763 octets=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
    paquets=967505 octets=50310268 [OFFLOAD] marque=0 secctx=null use=2

  • Dans les ensembles pour les concaténations (concatenation, ensembles spécifiques d'adresses et de ports qui simplifient la correspondance), il est possible d'utiliser la directive « typeof », qui définit le type de données des éléments pour les parties d'éléments d'ensemble :

    table ip foo {
    set whitelist {
    typeof ip saddr . tcp dport
    éléments = { 192.168.10.35 . 80, 192.168.10.101 . 80 }
    }

    chain bar {
    type filter hook prerouting priority filter; policy drop;
    ip daddr . tcp dport @whitelist accepter
    }
    }

  • La directive typeof est maintenant également applicable pour les concaténations dans les listes map :

    table ip foo {
    map addr2mark {
    typeof ip saddr . tcp dport : meta mark
    éléments = { 192.168.10.35 . 80 : 0x00000001,
    192.168.10.135 . 80 : 0x00000002 }
    }

    chain bar {
    type filter hook prerouting priority filter; policy drop;
    meta mark set ip daddr . tcp dport carte @addr2mark accepter
    }
    }

  • Prise en charge des concaténations avec des plages dans des ensembles anonymes (non nommés) :

    # nft add rule inet filter input ip daddr . tcp dport \
    { 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8 . 80-443 } accepter

  • Possibilité de rejeter des paquets avec des drapeaux 802.1q (VLAN) lors du traitement des ponts réseau :

    # nft add rule bridge foo bar ether type vlan reject with tcp reset

  • Ajout de la prise en charge de la correspondance par identifiant de session TCP (conntrack ID). Pour déterminer l'identifiant conntrack, l'option « --output id » peut être utilisée :

    # conntrack -L —output id
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 paquets=2 \
    octets=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 paquets=2 octets=320 \
    [ASSURED] marque=0 use=1 id=2779986232

    # nft add rule foo bar ct id 2779986232 counter

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster