Outils pour utilisateurs

Outils du site


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
150-cpl-nftables:500-nouveautes [le 20/06/2025 à 14:46] – supprimée - modification externe (Date inconnue) 127.0.0.1150-cpl-nftables:500-nouveautes [le 20/06/2025 à 14:46] (Version actuelle) – ↷ Page déplacée de 135nftables:500-nouveautes à 150-cpl-nftables:500-nouveautes prof
Ligne 1: Ligne 1:
 +====== Quelques nouveautés en vrac ======
 +===== Persistance =====
 +Avec ''iptables'' et consorts, pour rendre les règles persistantes, il fallait avoir recours à des scripts lancés après l'initialisation des interfaces réseau ou utiliser les services du paquet "iptables-persistent". Ici, le paquet ''nftables'' fournit un service pour ''systemd'' qui peut être activé, nous l'avons vu, permettant alors de charger toutes les règles contenues dans ''/etc/nftables.conf''.
 +===== Scripts =====
 +le service ''nftables.service'' permet d'exécuter le fichier ''/etc/nftables.conf''. Rappelons que ce fichier __**doit**__ commencer par la ligne ''#!/usr/sbin/nft -f'', dans la tradition des scripts shell. Autrement dit, ''/etc/nftables.conf'' est à considérer comme un script. et généralement dans un script, on peut:
 +==== Insérer des commentaires ====
 +Il suffit de commencer la ligne par un "sharp":
 +  # ceci est un commentaire
 +==== Définir des variables ====
 +des choses simples comme:
 +  define ifLan = enp7s0
 +  define ifWan = enp1s0
 +Ce qui nous permettra de rendre les règles bien plus lisibles.
  
 +Aussi des "sets". Par exemple:
 +  define open_dns = {208.67.222.123, 208.67.220.123}
 +==== Exemple ====
 +Supposons que nous voulions empêcher les clients de notre lan (192.168.61.0/24) d'utiliser les serveurs "open DNS", nous pourrions modifier notre ''/etc/nftables.conf'' de la façon suivante:
 +<html><pre class="code">
 +#!/usr/sbin/nft -f
 +
 +<span class="txtb"># Pour rendre les règles plus lisibles</span>
 +<span class="hly">define ifLan = enp7s0
 +define ifWan = enp1s0
 +define open_dns = {208.67.222.123, 208.67.220.123}</span>
 +
 +table ip nat {
 + chain PREROUTING {
 + type nat hook prerouting priority -100; policy accept;
 + }
 +
 + chain INPUT {
 + type nat hook input priority 100; policy accept;
 + }
 +
 + chain POSTROUTING {
 + type nat hook postrouting priority 100; policy accept;
 + oifname <span class="bhly">$ifWan</span> counter packets 1 bytes 76 masquerade
 + }
 +
 + chain OUTPUT {
 + type nat hook output priority -100; policy accept;
 + }
 +}
 +table ip filter {
 + chain INPUT {
 + type filter hook input priority 0; policy accept;
 + iifname "lo" counter packets 0 bytes 0 accept
 + iifname <span class="bhly">$ifLan</span> counter packets 0 bytes 0 accept
 + }
 +
 + chain FORWARD {
 + type filter hook forward priority 0; policy accept;
 + <span class="txtb"># open_dns ne passera pas !</span>
 + ip daddr <span class="bhly">$open_dns</span> counter packets 0 bytes 0 drop
 + iifname <span class="bhly">$ifLan</span> oifname <span class="bhly">$ifWan</span> ct state established,related,new counter packets 0 bytes 0 accept
 + iifname <span class="bhly">$ifWan</span> oifname <span class="bhly">$ifLan</span> ct state established,related counter packets 0 bytes 0 accept
 + }
 +
 + chain OUTPUT {
 + type filter hook output priority 0; policy accept;
 + oifname "lo" counter packets 0 bytes 0 accept
 + oifname <span class="bhly">$ifLan</span> counter packets 0 bytes 0 accept
 + }
 +}
 +</pre></html>
 +Bien entendu, une fois ce script exécuté, ''nft list ruleset'' affichera les "vraies" valeurs sans les commentaires.
 +===== Éclatement =====
 +Dans le cas où nous aurions un très grand nombre de chaînes et de règles dans ces chaînes, il serait alors possible de créer par exemple un fichier par chaîne et de les faire lire séquentiellement par ''/etc/nftables.conf'' en s'y prenant comme ceci (c'est juste un exemple):
 +Création d'un répertoire ''/etc/nftables'':
 +  mkdir /etc/nftables
 +Création d'un fichier ''/etc/nftables.conf'' contenant ceci:
 +  #!/usr/sbin/nft -f
 +  # include all files in a given directory using an absolute path
 +  include "/etc/nftables/*.nft"
 +Les fichiers du répertoire ''/etc/nftables'' seront alors lus __**par ordre alphabétique**__. Attention donc à les nommer de façon cohérente.
 +Nous pouvons donc créer dans ''/etc/nftables'' un fichier ''00-variables.nft'' contenant:
 +  # Pour rendre les règles plus lisibles
 +  define ifLan = enp7s0
 +  define ifWan = enp1s0
 +  define open_dns = {208.67.222.123, 208.67.220.123}
 +un fichier ''10-nat.nft'' contenant:
 +<code>
 +table ip nat {
 + chain PREROUTING {
 + type nat hook prerouting priority -100; policy accept;
 + }
 +
 + chain INPUT {
 + type nat hook input priority 100; policy accept;
 + }
 +
 + chain POSTROUTING {
 + type nat hook postrouting priority 100; policy accept;
 + oifname $ifWan counter packets 1 bytes 76 masquerade
 + }
 +
 + chain OUTPUT {
 + type nat hook output priority -100; policy accept;
 + }
 +}
 +</code>
 +et un fichier ''20-filter.nft''contenant:
 +<code>
 +table ip filter {
 + chain INPUT {
 + type filter hook input priority 0; policy accept;
 + iifname "lo" counter packets 0 bytes 0 accept
 + iifname $ifLan counter packets 0 bytes 0 accept
 + }
 +
 + chain FORWARD {
 + type filter hook forward priority 0; policy accept;
 + # open_dns ne passera pas !
 + ip daddr $open_dns counter packets 0 bytes 0 drop
 + iifname $ifLan oifname $ifWan ct state established,related,new counter packets 0 bytes 0 accept
 + iifname $ifWan oifname $ifLan ct state established,related counter packets 0 bytes 0 accept
 + }
 +
 + chain OUTPUT {
 + type filter hook output priority 0; policy accept;
 + oifname "lo" counter packets 0 bytes 0 accept
 + oifname $ifLan counter packets 0 bytes 0 accept
 + }
 +}
 +</code>
 +Je vous laisse vérifier que ça fonctionne.
 +
 +Nous pouvons nous douter que ''nftables'' va s'avérer plus facile à maintenir que le bon vieux filtrage par ''iptables''.
Quelques nouveautés en vrac: Dernière modification le: 01/01/1970 à 00:00 par