Wiki adminsys - Cebador.fr

Wiki d'administration systèmes et réseaux.
Simples notes personnelles et non réelle documentation exhaustive.
Donc désolé pour les coquilles et les inexactitudes.
Doc sous licence GNU FDL 1.3

Outils pour utilisateurs

Outils du site


nftables

Nftables

Éléments théoriques

Tables

Contrairement à Iptables, il n'y a pas de tables prédéfinies. Il existe par contre des familles de tables correspondants aux outils utilisés :

  • Les tables de la famille “IP” qui remplace “IPtables”
  • Les tables de la famille “ARP” qui remplace “arptables”
  • Les tables de la famille “IP6” qui remplace “ip6tables”
  • Les tables de la famille “INET” qui remplace “IPtables” et “ip6btables” qui permettra de faciliter l'administration des routeurs dual-stack (les routeurs qui sont présent sur la pile IPV4 et également sur la pile IPv6, le tout en même temps).
  • Les tables de la famille “bridge”

Commandes

Général

  • Lister les règles d'une table :
    nft list table ip matableIPv4
  • Lister les règles d'une table leur handle (identifiant de chaque règle :
    nft list table ip matableIPv4 -a
  • Exécuter les règles contenues dans un fichier :
    nft -f NOM-FICHIER

Tables

  • Création d'une table :
    nft add table ip matableIPv4
  • Suppression d'une table :
    nft delete table ip matableIPv4
  • Lister les tables :
    nft list tables
  • Flusher une table :
    nft flush table ip matableIPv4

Chains

Création de chains

Nous avons donc vu qu'il fallait créer une chaine INPUT pour traiter les paquets qui arrivaient sur l'interface et une chaine OUPUT pour traiter ceux qui sortaient de l'interface réseau. Pour rappel, nous ne travaillerons ici qu'en IPv4 sur notre table mon_filtreIPv4 :

nft add chain ip mon_filtreIPv4 input { type filter hook input priority 0 \; }

nft add chain ip mon_filtreIPv4 output { type filter hook output priority 0 \; }

Ici, quelques explications s'imposent, on a donc dans une première partie une syntaxe assez claire. On va utiliser “nft” pour ajouter (“add”) une chaine dans la famille “ip” et dans la table “mon_filtreIPv4”. Ce qui suit permet de former une base chain.

Chain ? base chain ? Quelle différence ?

Une base chain est une chaine qui va directement se rattacher à un hook alors qu'une “simple” chain n'est pas rattaché à un Hook. c'est pour cela que l'on précise ensuite “type filter hook input”. Notre chaine INPUT va donc se rattacher au hook “INPUT”. Il s'agit là juste d'une précision quant à la nomenclature à utiliser. Dans la réalité, on parle toujours de chaine.

On retrouve également une notion de priorité. La priorité est ici importante, car elle permet de gérer les cas où plusieurs chaines sont positionnées sur le Hook INPUT par exemple. Nous avons en effet vu qu'une table pouvait avoir plusieurs chaines, et chaque chaine peut être positionnée sur un Hook souhaité, on peut très bien avoir une chaine “INPUT_1” et une chaine “INPUT_2” pour des besoins organisationnels. La priorité la plus basse prend ainsi le pas sur les autres priorités.

Note : il est possible d'avoir des priorités négatives (Exemple : -100) qui sont alors prioritaires sur une priorité 0.

Extrait de IT-connect.fr - Creative Commons License BY-NC-ND 4.0

Règles

  • Ajout de règles :
    #Autorisation du port 80 dans la table pour le trafic entrant (input)
    nft add rule matablePv4 input tcp dport 80 accept
    
    #Ajout d'une règle autorisant le port 22 à la ligne 4 de la chain INPUT
    nft add rule matablePv4 input position 4 tcp dport 22 accept
    
    #Autoriser les connexion relatives et établies en entrant
    nft add rule mytable input ct state established,related accept
    
    #Blocage du reste du trafic entrant dans la table matablePv4
    nft add rule matablePv4 input drop
    
    #Autorisation du port 80 dans la table pour le trafic sortant (output)
    nft add rule matablePv4 output tcp sport 80 accept
    
    #Blocage du reste du trafic sortant dans la table matablePv4
    nft add rule matablePv4 output drop
  • Ajouter une règle ciblant une IP ou un réseau particulier :
    #Accès en SSH autorisé uniquement pour les membres du réseau 192.168.0.0/24
    nft add rule matableIPv4 input tcp dport 22 ip saddr 192.168.0.0/24 accept
    
    #Accès SSH autorisé uniquement pour 192.168.0.45
    nft add rule matableIPv4 input tcp dport 22 ip saddr 192.168.0.45 accept
  • Remplacer la règle handle 9 :
    nft replace rule matableIPv4 output handle 9 tcp dport 22 accept
  • Suppression d'une règle :
    nft delete rule matablePv4 output tcp dport 23 accept
    
    #Suppression de la règle n°22
    nft delete rule matablePv4 output handle 22
  • Insertion d'une règle à une ligne précise :
    nft add rule matablePv4 input position 4 tcp dport 22 accept
  • Insertion d'un commentaire dans la règle :
    nft add rule matablePv4 input position 4 tcp dport 22 accept comment \"Allow SSH\"
  • Intégration de plusieurs matches dans une règle :
    # On autorise de echo-request et le echo-reply pour l'ICMP
    nft add rule filter input icmp type {echo-reply, echo-request} accept

Sauvegarde de la configuration

  • Sauvegarde des règles :
    nft list table mon_filtreIPv4 > /etc/nftables.conf
  • Restauration des règles :
    nft -f /etc/nftables.conf

Appliquer les règles au démarrage

Créer le service Nftables et son lancement au démarrage :

systemctl enable nftables

Sauvegarder la configuration dans le fichier de configuration de Nftables :

nft list table mon_filtreIPv4 > /etc/nftables.conf

Sources/Ressources

nftables.txt · Dernière modification : de Administrateur