Recherche de site Web

Gestion avancée du pare-feu avec nftables : Transition d’iptables


nftables est le successeur d’iptables sur les systèmes Linux, et est depuis devenu le pare-feu par défaut. Si vous n’êtes pas encore passé à nftables, vous passez à côté de performances améliorées, d’une syntaxe de commande plus simple et d’une manière globalement plus simple de gérer les règles de pare-feu. Dans ce tutoriel, vous allez apprendre comment passer d’iptables à nftables. Pour ce faire, nous devons nous familiariser avec la façon dont nftables diffère d’iptables d’un point de vue fonctionnel, ainsi qu’avec la nouvelle syntaxe de commande pour configurer les règles.

Dans ce tutoriel, vous allez apprendre :

  • En quoi nftables fonctionne-t-il différemment d’iptables ?
  • Comment les commandes iptables sont automatiquement traduites en nftables
  • Comment commencer la transition vers nftables, du point de vue d’iptables

nftables vs. iptables : différences de fonctionnalité

iptables est livré avec plusieurs outils tels que iptables, ip6tables, arptables et ebtables. Cela peut rendre la gestion des règles assez complexe, car nous devons gérer plusieurs ensembles de règles en fonction de ce que nous essayons de filtrer. Au minimum, à l’ère de la généralisation d’IPv6, cela signifie que nous devons écrire des filtres à la fois dans iptables et ip6tables presque chaque fois que nous voulons ajouter une règle à notre pare-feu.

NFTretables combine tout en un seul outil. De plus, nftables nous donne plus de contrôle sur la structure de nos règles de pare-feu. Au lieu des chaînes par défaut INPUT, OUTPUT, et FORWARD qui sont présentes dans iptables, ainsi que des tables mangle, nat, filter et raw, nftables n’est pas livré avec des chaînes ou des tables créées automatiquement. Nous devons créer et nommer nos propres tables et chaînes, puis les remplir avec des règles et lier les fonctionnalités entre elles. Le résultat est un contrôle beaucoup plus granulaire sur la façon dont notre pare-feu traite le trafic réseau.

De plus, il y a aussi une différence de performance. Étant donné qu’iptables nous impose des chaînes et des tables par défaut, cette structure est touchée à chaque paquet circulant dans notre système, et a un impact mesurable sur les performances du réseau, même si aucune règle n’a été configurée ! Comme nftables nous permet de configurer exactement ce dont nous avons besoin, nous pouvons réduire les parties inutiles introduites par iptables.

Transition automatique de iptables à nftables

La bonne nouvelle, c’est qu’une partie de la transition vers nftables est prise en charge automatiquement.

LE SAVIEZ-VOUS ?
Même si vous utilisez les commandes iptables obsolètes sur votre système, ces règles sont traduites en l’équivalent de nftables, et la configuration est appliquée par nftables. C’est-à-dire, à moins que vous n’utilisiez un système gravement obsolète (par exemple, de 2019 ou avant) qui utilise toujours iptables sous le capot.

La commande iptables peut toujours être utilisée sur la plupart des systèmes, mais elle est maintenant liée à un outil qui traduit l’entrée en règles nftables équivalentes, avant de transmettre la configuration à nftables pour application.

Vous pouvez le constater par vous-même en utilisant la commande readlink pour voir que la commande iptables n’est qu’un lien symbolique vers un autre outil. Sur notre système de test Ubuntu, xtables-nft-multi est ce qui est réellement exécuté chaque fois que nous tapons iptables :


readlink -f $(which iptables)
/usr/sbin/xtables-nft-multi

Si nous ouvrons la page de manuel de cet outil avec man xtables-nft-multi, nous pouvons voir ce qu’il fait réellement :


xtables-nft — iptables using nftables kernel api

Ainsi, cet outil envoie simplement les commandes iptables à l’API nftables.

Bien que cette traduction se fasse automatiquement pour nous, il est toujours recommandé d’abandonner l’ancienne syntaxe de commande iptables en faveur de nftables. Pour les règles complexes, la traduction via l’API peut ne pas fonctionner comme prévu, il est donc préférable d’interagir directement avec nftables via la commande nft. De plus, la syntaxe de commande est plus facile et les règles sont plus simples à maintenir.

De plus, iptables est susceptible de devenir complètement obsolète dans les futures versions, et cette couche de compatibilité peut cesser de fonctionner ou inclure les fonctions nécessaires. Bref, la transition est inévitable et avantageuse pour les administrateurs système.

Traduire iptables en nftables

Les règles complexes qui sont écrites dans iptables devront sans aucun doute être converties manuellement sur nftables. Cependant, pour des règles plus simples, la commande iptables-translate fait un travail décent pour prendre une commande iptables en entrée et sortir la commande nft équivalente. Voici un exemple qui accepte toutes les connexions établies et associées :


iptables-translate -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
nft add rule ip filter INPUT ct state related,established counter accept

Nous spécifions la commande iptables mais utilisons iptables-translate au lieu de iptables. Le reste des arguments est typique d’iptables. Ensuite, en sortie, on nous donne une commande nft qui se traduit directement par la même règle iptables.

Voici un autre exemple qui pourrait supprimer le trafic ICMP entrant :


iptables-translate -t mangle -A PREROUTING -p icmp -j DROP
nft add rule ip mangle PREROUTING ip protocol icmp counter drop

NOTE
Malheureusement, l’outil iptables-translate n’est pas parfait, et assez facile à déjouer une fois que vous commencez à lui donner des règles iptables plus complexes pour lesquelles il n’y a pas d’équivalent direct avec la commande nft.

nftables vs. iptables : faire la transition

Dans cette section, nous allons partir du principe que le lecteur est un administrateur système qui connaît raisonnablement iptables, mais ne connaît rien à nftables. Cela servira d’introduction pour vous familiariser avec nftables, tout en supposant que vous avez un peu de connaissances en iptables pour vous aider à comprendre.

Passons en revue le processus d’application d’une configuration de pare-feu de base dans nftables, tout en montrant comment le même processus serait effectué à l’ancienne manière dans iptables :

  1. Comme mentionné précédemment, nftables nous donne une ardoise vierge sans tables ni chaînes créées par défaut. Donc, contrairement à iptables, nous devrions commencer par créer une table. Les tables sont les principaux conteneurs utilisés pour organiser nos règles de pare-feu. Commençons par créer une table appelée filter :

    
    sudo nft add table inet filter
    

    NFT démarre la commande et c’est ainsi que nous interagissons avec NFTABLES. add indique à l’utilitaire que nous souhaitons ajouter quelque chose. inet signifie que nous voulons appliquer la règle à la fois à IPv4 et à IPv6 – nous aurions pu spécifier IP ou IP6 si nous voulions seulement filtrer IPv4 ou IPv6, respectivement. Enfin, filter est le nom de la table que nous ajoutons.

  2. Ensuite, nous devons ajouter une chaîne à notre table. Nous nommerons notre entrée de chaîne pour qu’il soit clair que cette chaîne sera utilisée pour traiter les paquets réseau entrants :

    
    sudo nft 'add chain inet filter input { type filter hook input priority 0; }'
    

    Nous avons déjà passé en revue l’utilité de certains des arguments ci-dessus ; Chain spécifie que nous essayons d’ajouter une chaîne à la configuration du pare-feu. filter est le nom de la table à laquelle nous ajoutons la nouvelle chaîne. input est le nom de la chaîne (un nom couramment choisi pour clarifier son objectif). Dans les accolades, nous spécifions le type filter pour indiquer que cette chaîne filtrera les paquets. L’entrée de crochet signifie que la chaîne sera attachée au crochet d’entrée, que NFTtables utilise pour traiter les paquets entrants. Enfin, la priorité 0 donne simplement à la chaîne une priorité plus élevée que les autres chaînes (un nombre inférieur équivaut à une priorité plus élevée, 0 étant la priorité la plus élevée).

  3. Jusqu’à ce point, nous avons une table nommée filter et une chaîne nommée input. Nous pouvons maintenant continuer avec l’ajout de quelques règles à la chaîne. Voyons une simple commande nft pour ajouter une règle qui autorise le trafic entrant sur les ports 80 et 443 :

    
    sudo nft add rule inet filter input tcp dport { 80, 443 } accept
    

    La règle équivalente dans iptables serait :

    
    sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
    

    Ces deux commandes feront la même chose, c’est-à-dire permettre au trafic entrant sur les ports 80 (HTTP) et 443 (HTTPS) de traverser le pare-feu et d’atteindre les services exposés exécutés sur le serveur. La commande nft s’avère plus simple, tout en s’appliquant à la fois à IPv4 et IPv6, contrairement à la commande iptables.

  4. Nous pouvons voir la configuration de nos nftables en exécutant la commande suivante :

    
    sudo nft list ruleset
    table inet filter {
    	chain input {
    		type filter hook input priority filter; policy accept;
    		tcp dport { 80, 443 } accept
    	}
    }
    

    Le résultat est beaucoup plus facile à comprendre que celui d’iptables, la plupart du crédit étant dû à son format structuré. Nous pouvons voir que notre table inet nommée filter contient une chaîne nommée input, que la chaîne est attachée au hook d’entrée et que le trafic destiné aux ports (dport) 80 et 443 est accepté.

En complétant ces étapes, vous avez configuré une table et une chaîne dans nftables, ainsi qu’une règle qui s’applique au trafic entrant, tout en comprenant comment la commande se traduit à partir de l’équivalent iptables d’origine.

VOUS VOUS SENTEZ DÉPASSÉ ?
Bien que nftables s’avère un peu plus facile qu’iptables, les deux ne sont certes pas très conviviaux. Si l’apprentissage de la nouvelle syntaxe vous semble être une tâche ardue, n’oubliez pas que les interfaces plus simples comme firewalld et ufw offrent un moyen beaucoup plus facile d’interagir avec le pare-feu iptables ou nftables sous-jacent sur votre système. Ce sont des alternatives conviviales qui utilisent toujours iptables et nftables, mais qui ont une syntaxe plus facile et font une partie du travail supplémentaire pour vous.

Réflexions finales

Dans ce tutoriel, nous avons vu comment passer du pare-feu iptables au pare-feu nftables sur un système Linux. Cela ne sert qu’d’introduction qui ne fait qu’effleurer la surface, car les deux pare-feu sont complexes et nécessitent beaucoup de dévouement pour ceux qui souhaitent être parfaitement à l’aise avec leur utilisation.

Maintenant que vous savez comment créer des tables, des chaînes et des règles avec la commande nft, et que vous pouvez traduire la syntaxe iptables en nft via l’outil iptables-translate, vous allez pouvoir commencer à faire la transition de iptables à nftables sur votre système Linux. Pour les règles complexes, quelques bricolages supplémentaires seront probablement nécessaires. Nous vous recommandons d’en savoir plus sur le wiki nftables, où vous pouvez voir des exemples de règles avancées et de configuration de nftables.

Articles connexes: