Outils pour utilisateurs

Outils du site


netadmin:nftables:000_start

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
netadmin:nftables:000_start [2024/03/24 18:48] yoannnetadmin:nftables:000_start [2024/12/03 09:15] (Version actuelle) – Corrections yoann
Ligne 1: Ligne 1:
-{{tag>netadmin sécurité linux firewall pare-feu netfilter}}+{{tag>netadmin sécurité linux firewall pare-feu netfilter nft nftables}}
  
 :TODO_DOCUPDATE: :TODO_DOCUPDATE:
Ligne 74: Ligne 74:
  
 # La famille peut être précisée en préfixe # La famille peut être précisée en préfixe
-nft list ip aTableName +nft list table ip aTableName 
-nft list ip6 aTableName +nft list table ip6 aTableName 
-nft list inet aTableName +nft list table inet aTableName 
-nft list arp aTableName +nft list table arp aTableName 
-nft list bridge aTableName +nft list table bridge aTableName 
-nft list netdev aTableName+nft list table netdev aTableName
 </code> </code>
  
Ligne 115: Ligne 115:
 ===== Les chaînes ===== ===== Les chaînes =====
  
-Les chaînes contiennent les séquences de règles. On distingue les **chaînes de base** et les **chaines normales** (regular):+Les chaînes contiennent les séquences de règles. On distingue les **chaînes de base** et les **chaînes normales** (regular):
   * Un **chaîne de base** est un point d'entrée pour les paquets en provenance de la pile réseau. L'association au point d'entrée se fait via un système de hook);   * Un **chaîne de base** est un point d'entrée pour les paquets en provenance de la pile réseau. L'association au point d'entrée se fait via un système de hook);
   * Une **chaîne normale** peut être utilisée comme cible par un saut (jump) elle permet notamment de regrouper et d'organiser un sous ensemble de règles.   * Une **chaîne normale** peut être utilisée comme cible par un saut (jump) elle permet notamment de regrouper et d'organiser un sous ensemble de règles.
Ligne 121: Ligne 121:
 <code> <code>
 add chain aTableName inbound { type filter hook input priority 0; comment "Filtrage du trafic entrant"; } add chain aTableName inbound { type filter hook input priority 0; comment "Filtrage du trafic entrant"; }
 +</code>
 +
 +===== Lister les règles d'une chaine =====
 +
 +Pour lister les règles contenues dans une chaine :
 +<code>
 +nft list chain aTablename aChain
 </code> </code>
  
Ligne 135: Ligne 142:
 ===== Les règles ===== ===== Les règles =====
  
 +**Ajouter** une nouvelle règle dans une chaine avec la syntaxe suivante :
  
-Suppression de la règle d'identifiant (handle) 5:+<code> 
 +</code> 
 + 
 + 
 +**Remplacer** une règle existante toujours via le handler :
  
 <code> <code>
 +# On remplace la règle de la chaine "inbound" dans la table "ipfilter"
 +# désignée par le handler 21 par la définition qui suit
 +
 +replace rule ipfilter inbound handle 21 iif lo counter accept comment "Accepte le trafic local sur l'interface loopback"
 +</code>
 +
 +Pour **inserer** une règle on s'appuie sur le handler et l'argument "position" :
 +
 +<code>
 +# Insertion d'une règle dns la chaine "outbound" de la table "ipfilter"
 +# au niveau du handler 12
 +
 +insert rule ipfilter outbound position 12 oif lo ct state established,related counter accept comment "Accepte tout paquet en lien avec un trafic sortant explicitement autorise sur la boucle locale"
 +</code>
 +
 +**Supprimer** la règle désignée par le contrôleur 5 (handler) :
 +
 +<code>
 +# Supprime la règle de la chaine "aChain" dans la table "aTable"
 +# identifiée par le handle 5
 +
 delete rule aTable aChain handle 5 delete rule aTable aChain handle 5
 </code> </code>
 +
 +
 +
 +
 +==== Désignation des interfaces =====
 +
 +:TODO_DOCUPDATE:
 +
 +Les règles peuvent intégrer des critères de sélection des interfaces
 +
 +Source : [[https://serverfault.com/questions/985158/what-is-the-difference-between-iifname-and-iif-in-nftables|Différence entre iifname et iif (serverfault.com)]]
 +
 +
 +==== Les états ====
 +
 +Une petite précision sur les états des **connexions TCP** disponibles via ct (conntrack),  il en existe 5 :
 +
 +  * **NEW** : Il s'agit des premiers paquets d'une connexion (Exemple : premier paquet TCP SYN d'une connexion TCP).
 +  * **ESTABLISHED** : Echange de paquet dans les deux sens, la connexion est dite "établie".
 +  * **RELATED** : Connexion qui se réfère d'une connexion ESTABLISHED et créé par elle (Exemple, une connexion FTP-DATA après une authentification correcte via le protocole FTP).
 +  * **INVALID** : Paquet sans état et ne pouvant être rattaché à une connexion déjà connue, à dropper.
 +  * **UNTRACKED** : Paquet ne faisant pas partie d'une connexion connue.
 +
 +
 +==== Les sets (ensembles) ====
 +
 +Voir la note [[netadmin/nftables/gestion_des_ensembles|Gestion des ensembles avec nftables]].
  
 ===== Compteurs ===== ===== Compteurs =====
Ligne 150: Ligne 210:
 </code> </code>
  
 +
 +
 +===== Journalisation =====
 +
 +:TODO_DOCUPDATE:
 +
 +Les valeurs possibles pour **level** correspondent aux niveau de syslog : emerg, alert, crit, err, warn (valeur par défault), notice, info, debug
  
 ===== Limites ===== ===== Limites =====
Ligne 180: Ligne 247:
 La suppression d'une limite nommée n'est possible que lorsqu' elle n'est plus utilisée. Dans le cas contraire on obtient une erreur du type ''Error: Could not process rule: Device or resource busy''. La suppression d'une limite nommée n'est possible que lorsqu' elle n'est plus utilisée. Dans le cas contraire on obtient une erreur du type ''Error: Could not process rule: Device or resource busy''.
 </note> </note>
 +
 +===== Activer le service nftables ======
 +
 +Sur les distributions récentes basées sur systemd, le service existe mais il n'est pas activé par défaut :
 +
 +<code bash>
 +systemctl status nftables.service 
 +○ nftables.service - nftables
 +     Loaded: loaded (/lib/systemd/system/nftables.service; disabled; preset: enabled)
 +     Active: inactive (dead)
 +       Docs: man:nft(8)
 +             http://wiki.nftables.org
 +</code>
 +
 +Activer le service ''nftables.service'' :
 +
 +<code bash>
 +systemctl enable --now nftables.service
 +</code>
 +
 +Le ruleset ''/etc/nftables.conf'' utilisé par défaut par le service est vide, il faudra  définir vos règles. 
 +
  
 ===== Exemple ===== ===== Exemple =====
Ligne 215: Ligne 304:
   * https://wiki.nftables.org/wiki-nftables/index.php/Rejecting_traffic   * https://wiki.nftables.org/wiki-nftables/index.php/Rejecting_traffic
   * https://www.linuxembedded.fr/2022/06/introduction-a-nftables   * https://www.linuxembedded.fr/2022/06/introduction-a-nftables
-  * https://blog.debugo.fr/nftables-serie-tutos/+  * [[https://blog.debugo.fr/nftables-serie-tutos/|tutoriel netfilter nftables (debugo.fr)]]
   * https://wiki.csnu.org/index.php/Nftables   * https://wiki.csnu.org/index.php/Nftables
   * https://www.youtube.com/watch?v=EGKhIljDPCw   * https://www.youtube.com/watch?v=EGKhIljDPCw
 +  * [[https://wiki.nftables.org/wiki-nftables/index.php/Logging_traffic|Journalisation du trafic (nftables.org)]]
 +  * [[https://wiki.archlinux.org/title/Nftables|guide d'utilisation de nftables (archlinux.org)]]
 +  * [[https://thermalcircle.de/doku.php?id=blog:linux:connection_tracking_1_modules_and_hooks|Fonctionnement de conntrack]]
netadmin/nftables/000_start.1711306109.txt.gz · Dernière modification : 2024/03/24 18:48 de yoann