nftables filtre de paquets version 0.9.4

Publié libération du filtre de paquets nfttables 0.9.4, qui se développe en remplacement d'iptables, ip6table, arptables et ebtables en unifiant les interfaces de filtrage de paquets pour IPv4, IPv6, ARP et les ponts réseau. Le package nftables inclut des composants de filtrage de paquets qui s'exécutent dans l'espace utilisateur, tandis que le niveau du noyau est fourni par le sous-système nf_tables, qui fait partie du noyau Linux depuis la version 3.13. Les modifications nécessaires au fonctionnement de la version 0.9.4 de nftables sont incluses dans la future branche du noyau Linux 5.6.

Au niveau du noyau, seule une interface générique indépendante du protocole est fournie qui fournit des fonctions de base pour extraire les données des paquets, effectuer des opérations sur les données et contrôler le flux. Les règles de filtrage elles-mêmes et les gestionnaires spécifiques au protocole sont compilés en bytecode de l'espace utilisateur, après quoi ce bytecode est chargé dans le noyau à l'aide de 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 s'exécutant au niveau du noyau et de déplacer toutes les fonctions de règles d'analyse et la logique de travail avec les protocoles dans l'espace utilisateur.

Principales nouveautés :

  • Prise en charge des plages dans les jointures (concaténation, certaines liaisons d'adresses et de ports qui simplifient la correspondance). Par exemple, pour un ensemble "whitelist" dont les éléments sont une pièce jointe, spécifier le drapeau "intervalle" indiquera que l'ensemble peut inclure des plages dans la pièce jointe (pour la pièce jointe "ipv4_addr . ipv4_addr . inet_service" il était auparavant possible de lister exactement correspond à "192.168.10.35. 192.68.11.123", et maintenant vous pouvez spécifier des groupes d'adresses "80-192.168.10.35-192.168.10.40") :

    table ip foo {
    définir la liste blanche {
    tapez ipv4_addr . adresse_ipv4 . inet_service
    intervalle de drapeaux
    éléments = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80}
    }

    barre de chaîne {
    filtre de type crochet de préacheminement filtre prioritaire ; abandon de politique ;
    ip sadr . ip papa . tcp dport@whitelist accepter
    }
    }

  • Dans les ensembles et les map-lists, il est possible d'utiliser la directive "typeof", qui détermine le format de l'élément lors du mappage.
    Par exemple:

    table ip foo {
    définir la liste blanche {
    type d'ip saddr
    éléments = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    barre de chaîne {
    filtre de type crochet de préacheminement filtre prioritaire ; abandon de politique ;
    ip daddr @whitelist accepter
    }
    }

    table ip foo {
    carte addr2mark {
    typeof ip saddr : marque méta
    éléments = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • Ajout de la possibilité d'utiliser des pièces jointes dans les liaisons NAT, ce qui vous permet de spécifier une adresse et un port lors de la définition de traductions NAT basées sur des listes de cartes ou des ensembles nommés :

    nft ajouter une règle ip nat pre dnat ip addr . mappage port vers ip saddr { 1.1.1.1 : 2.2.2.2 . trente }

    nft add map ip nat destinations { type ipv4_addr . service_inet : adresse_ipv4 . inet_service\\ ; }
    nft ajouter une règle ip nat pre dnat ip addr . port vers ip saddr. carte de port tcp @destinations

  • Prise en charge de l'accélération matérielle avec la suppression de certaines opérations de filtrage sur les épaules de la carte réseau. L'accélération est activée via l'utilitaire ethtool ("ethtool -K eth0 hw-tc-offload on"), après quoi elle est activée dans nftables pour la chaîne principale à l'aide de l'indicateur "offload". Lors de l'utilisation du noyau Linux 5.6, l'accélération matérielle est prise en charge pour la correspondance des champs d'en-tête et l'inspection de l'interface entrante en combinaison avec la réception, la suppression, la duplication (dup) et le transfert (fwd) des paquets. Dans l'exemple ci-dessous, les opérations de suppression de paquets provenant de l'adresse 192.168.30.20 sont effectuées au niveau de la carte réseau, sans passer les paquets au noyau :

    # fichier chat.nft
    table netdev x {
    chaîne y {
    type filter hook ingress device eth0 priorité 10 ; déchargement des drapeaux ;
    ip saddr 192.168.30.20 déposer
    }
    }
    # nft -f fichier.nft

  • Amélioration des informations sur la place d'une erreur dans les règles.

    # règle de suppression nft ip yz handle 7
    Erreur : Impossible de traiter la règle : aucun fichier ou répertoire de ce type
    supprimer la règle ip yz gérer 7
    ^

    # règle de suppression nft ip xx handle 7
    Erreur : Impossible de traiter la règle : aucun fichier ou répertoire de ce type
    supprimer la règle ip xx poignée 7
    ^

    # nft supprimer la table twst
    Erreur : aucun fichier ou répertoire de ce type ; vouliez-vous dire table 'test' in family ip ?
    supprimer la torsion de table
    ^^^^

    Le premier exemple montre que la table 'y' n'est pas présente dans le système, le second montre que le gestionnaire '7' est manquant et le troisième montre une indication de faute de frappe lors de la saisie du nom de la table.

  • Ajout de la prise en charge de la vérification de l'interface esclave en spécifiant "meta sdif" ou "meta sdifname":

    … méta sdifname vrf1 …

  • Ajout de la prise en charge de l'opération de décalage vers la droite ou vers la gauche. Par exemple, pour décaler une étiquette de paquet existante d'un bit vers la gauche et définir le bit inférieur sur 1 :

    … marque méta définir la marque méta lshift 1 ou 0x1 …

  • Implémentation de l'option "-V" pour afficher les informations de version étendues.

    #nft -V
    nftables v0.9.4 (Jive à cinq)
    cli:readline
    json : oui
    minigmp : non
    libxtables : oui

  • Les options de ligne de commande sont désormais obligatoires avant les commandes. Par exemple, vous devez spécifier "nft -a list ruleset", et l'exécution de "nft list ruleset -a" entraînera une erreur.

    Source: opennet.ru

Ajouter un commentaire