Lancement du filtre de paquets nftables 0.9.1

Après un an de développement présenté publication du filtre de paquets nftables 0.9.1, se développant comme un remplacement d'iptables, ip6tables, arptables et ebtables grâce à l'unification des interfaces de filtrage de paquets pour IPv4, IPv6, ARP et les ponts réseau. Le paquet nftables comprend 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.

Au niveau du noyau, seul une interface générale est fournie, indépendante du protocole spécifique et offrant des fonctions de base pour l'extraction de données des paquets, l'exécution d'opérations sur les données et la gestion du flux.
La logique de filtrage et les gestionnaires spécifiques aux 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 une machine virtuelle spéciale, similaire à 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éplacer toutes les fonctions d'analyse des règles et de logique de traitement des protocoles en espace utilisateur.

Les principales nouveautés :

  • Prise en charge d'IPsec, permettant la correspondance des adresses des tunnels en fonction du paquet, de l'identifiant de demande IPsec et de l'index SPI (Security Parameter Index). Par exemple,

    … ipsec in ip saddr 192.168.1.0/24
    … ipsec in spi 1-65536

    La vérification du passage d'un itinéraire par un tunnel IPsec est également possible. Par exemple, pour bloquer le trafic ne passant pas par IPSec :

    … filter output rt ipsec missing drop

  • Prise en charge du protocole IGMP (Internet Group Management Protocol). Par exemple, pour rejeter les requêtes IGMP d'appartenance à un groupe entrantes, vous pouvez utiliser la règle suivante :

    nft add rule netdev foo bar igmp type membership-query counter drop

  • Possibilité d'utiliser des variables pour définir des chaînes de transition (jump / goto). Par exemple :

    define dest = ber
    add rule ip foo bar jump $dest

  • Soutien aux masques pour identifier les systèmes d'exploitation (OS Fingerprint) sur la base des valeurs TTL dans l'en-tête. Par exemple, pour marquer les paquets en fonction du système d'exploitation de l'expéditeur, vous pouvez utiliser la commande :

    … meta mark set osf ttl skip name map { «Linux» : 0x1,
    «Windows» : 0x2,
    «MacOS» : 0x3,
    «unknown» : 0x0 }
    … osf ttl skip version «Linux:4.20»

  • Possibilité de correspondre l'adresse ARP de l'expéditeur et l'adresse IPv4 de la cible. Par exemple, pour incrémenter le compteur des paquets ARP envoyés depuis l'adresse 192.168.2.1, vous pouvez utiliser la règle :

    table arp x {
    chaîne y {
    type filtre crochet entrée priorité filtre;
    arp saddr ip 192.168.2.1 compteur paquets 1 octets 46
    }
    }

  • Prise en charge du passage transparent des requêtes via un proxy (tproxy). Par exemple, pour rediriger les requêtes vers le port 80 vers le port du proxy 8080 :

    table ip x {
    chaîne y {
    type filtre crochet pré-routage priorité -150;
    tcp dport 80 tproxy vers :8080
    }
    }

  • Prise en charge de la marque des sockets avec possibilité de récupérer la marque définie via setsockopt() en mode SO_MARK. Par exemple :

    table inet x {
    chaîne y {
    type filtre crochet pré-routage priorité -150;
    tcp dport 8080 marquer définir socket mark
    }
    }

  • Prise en charge de la spécification de noms textuels pour les priorités des chaînes. Par exemple :

    nft ajouter chaîne ip x raw { type filtre crochet pré-routage priorité raw; }
    nft ajouter chaîne ip x filtre { type filtre crochet pré-routage priorité filtre; }
    nft ajouter chaîne ip x filtre_plus_tard { type filtre crochet pré-routage priorité filtre + 10; }

  • Prise en charge des étiquettes SELinux (Secmark). Par exemple, pour définir l'étiquette «sshtag» en association avec le contexte SELinux, vous pouvez exécuter :

    nft ajouter secmark inet filtre sshtag «system_u:object_r:ssh_server_packet_t:s0»

    Et ensuite utiliser cette étiquette dans les règles :

    nft ajouter règle inet filtre entrée tcp dport 22 meta secmark définir «sshtag»

    nft ajouter carte inet filtre secmapping { type inet_service : secmark; }
    nft ajouter élément inet filtre secmapping { 22 : «sshtag» }
    nft ajouter règle inet filtre entrée meta secmark définir tcp dport carte @secmapping

  • Capacité à spécifier les ports associés aux protocoles sous forme textuelle, tels qu'ils sont définis dans le fichier /etc/services. Par exemple :

    nft ajouter règle x y tcp dport «ssh»
    nft lister ruleset -l
    table x {
    chaîne y {
    …
    tcp dport «ssh»
    }
    }

  • Possibilité de vérifier le type d'interface réseau. Par exemple :

    ajouter règle inet raw pré-routage meta iifkind «vrf» accepter

  • Amélioration de la prise en charge de la mise à jour dynamique du contenu des ensembles (sets) via la spécification explicite du drapeau «dynamic». Par exemple, pour mettre à jour l'ensemble «s» en ajoutant l'adresse source et en réinitialisant l'enregistrement en cas d'absence de paquets pendant 30 secondes :

    ajouter table x
    ajouter ensemble x s { type ipv4_addr; taille 128; timeout 30s; drapeaux dynamique; }
    ajouter chaîne x y { type filtre crochet entrée priorité 0; }
    ajouter règle x y mettre à jour @s { ip saddr }

  • Capacité à spécifier une condition de délai d'attente distincte. Par exemple, pour redéfinir le délai d'attente par défaut pour les paquets arrivant sur le port 8888, vous pouvez spécifier :

    table ip filtre {
    ct timeout agressive-tcp {
    protocole tcp;
    l3proto ip;
    politique = {établi : 100, close_wait : 4, close : 4}
    }
    chaîne sortie {
    …
    tcp dport 8888 ct timeout définir «agressive-tcp»
    }
    }

  • Prise en charge du NAT pour la famille inet :

    table inet nat {
    …
    ip6 daddr dead::2::1 dnat vers dead:2::99
    }

  • Outils améliorés pour la sortie d'informations sur les erreurs dues aux fautes de frappe :

    nft ajouter chaîne filtre test

    Erreur : Aucun fichier ou répertoire de ce type ; vouliez-vous dire table «filter» dans la famille ip ?
    ajouter chaîne filtre test
    ^^^^^^

  • Capacité à spécifier des noms d'interfaces dans des ensembles (sets) :

    ensemble sc {
    type inet_service . ifname
    éléments = { «ssh» . «eth0» }
    }

  • Syntaxe mise à jour des règles flowtable :

    nft ajouter table x
    nft ajouter flowtable x ft { crochet entrée priorité 0 ; appareils = { eth0, wlan0 }; }
    …
    nft ajouter règle x transférer ip protocole { tcp, udp } flux ajouter @ft

  • Amélioration du support JSON.

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