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:40-les_modules [le 20/06/2025 à 14:46] – supprimée - modification externe (Date inconnue) 127.0.0.1150-cpl-nftables:40-les_modules [le 20/06/2025 à 14:46] (Version actuelle) – ↷ Page déplacée de 135nftables:40-les_modules à 150-cpl-nftables:40-les_modules prof
Ligne 1: Ligne 1:
 +====== Du côté des modules "kernel" ======
 +Voyons un peu ce qu'il se passe du côté des modules chargés sur notre routeur ''buster'' suivant le cas
 +===== Démarrage sans aucune règle =====
 +Dans un premier temps, la machine est démarrée sans aucune règle chargée:
 +<html><pre class="code">
 +<b>lsmod | grep table</b>
 +ip_tables              28672  0
 +x_tables               45056  1 ip_tables
 +</pre></html>
 +On se croirait sur une vieille Stretch ou pire, sur une Jessie... 
 +Ces deux modules datent effectivement de l'ancien temps ("legacy")
 +===== Chargement des règles iptables =====
 +<html><pre class="code">
 +<b>iptables-restaure < ~/iptables.ruleset
 +
 +lsmod | grep tables</b>
 +
 +<span class="bhly">nf_tables             143360  27 nft_compat,nft_chain_nat_ipv4,nft_counter
 +nfnetlink              16384  2 nft_compat,nf_tables</span>
 +ip_tables              28672  0
 +x_tables               45056  5 xt_conntrack,nft_compat,xt_state,ipt_MASQUERADE,ip_tables
 +</pre></html>
 +Nous voyons bien arriver le module ''nf_tables'' qui a quelques dépendances assez explicites, de même que le nouveau module ''nfnetlink''. Ceci est bien conforme à ce que nous avons vu, iptables est toujours utilisable, mais dans cette configuration, il s'appuie sur ''nf_tables'' via un module de compatibilité.
 +
 +Autrement dit, dans ce cas de figure, nous bénéficions des améliorations apportées par ''nf_tables'' tout en gardant la lourdeur des règles ''iptables'' (mais que nous avons eu le temps d'assimiler...).
 +===== Changement de pied =====
 +Nous allons faire ce qu'il faut pour démarrer automatiquement avec notre jeu de règles ''nft''.
 +
 +D'abord un re-démarrage pour que les choses soient claires (on se croirait chez un concurrent).
 +
 +Ensuite, comme nous n’avons aucune règle chargée, allons-y directement avec ''nft'':
 +<html><pre class="code">
 +<span class="txtb"># chargement du jeu de règles nftables</span>
 +<b>nft -f ~/nftables.ruleset</b>
 +
 +<span class="txtb"># vérification:</span>
 +<b>nft list ruleset</b>
 +
 +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 "enp1s0" counter packets 2 bytes 152 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 "enp7s0" counter packets 0 bytes 0 accept
 + }
 +
 + chain FORWARD {
 + type filter hook forward priority 0; policy accept;
 + iifname "enp7s0" oifname "enp1s0" ct state established,related,new counter packets 0 bytes 0 accept
 + iifname "enp1s0" oifname "enp7s0" 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 "enp7s0" counter packets 0 bytes 0 accept
 + }
 +}
 +<span class="txtb"># OK. création d'un fichier ''/etc/nftables.conf'' contenant juste ceci:</span>
 +
 +<span class="hly">#!/usr/sbin/nft -f</span>
 +
 +<span class="txtb"># puis ajout du jeu de règles dans ce fichier</span>
 +<b>nft list ruleset >> /etc/nftables.conf</b>
 +
 +<span class="txtb"># vidange du jeu de règles en cours</span>
 +<b>nft delete table ip filter
 +nft delete table ip nat
 +
 +nft list ruleset</b>
 +
 +<span class="txtb"># OK, tout est parti</span>
 +
 +# Test du démarrage de nftable.service
 +
 +<b>systemctl start nftables</b>
 +</pre></html>
 +Si tout s'est bien passé, la commande ''nft list ruleset'' doit ré-afficher les tables et leur contenu. Sinon, cherchez l'erreur...
 +
 +Il reste à activer le service au démarrage:
 +<html><pre class="code">
 +<b>systemctl enable nftables</b>
 +Created symlink /etc/systemd/system/sysinit.target.wants/nftables.service → /lib/systemd/system/nftables.service.
 +</pre></html>
 +Et après un ultime re-démarrage, nous pouvons admirer le résultat:
 +<html><pre class="code">
 +<b>nft list ruleset</b>
 +
 +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 "enp1s0" counter packets 10 bytes 666 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 "enp7s0" counter packets 0 bytes 0 accept
 + }
 +
 + chain FORWARD {
 + type filter hook forward priority 0; policy accept;
 + iifname "enp7s0" oifname "enp1s0" ct state established,related,new counter packets 0 bytes 0 accept
 + iifname "enp1s0" oifname "enp7s0" 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 "enp7s0" counter packets 0 bytes 0 accept
 + }
 +}
 +
 +<span class="txtb"># et du côté des modules:</span>
 +<b>lsmod | grep table</b>
 +nf_tables             143360  33 nft_ct,nft_chain_nat_ipv4,nft_counter,nft_masq,nft_masq_ipv4
 +nfnetlink              16384  1 nf_tables
 +ip_tables              28672  0
 +x_tables               45056  1 ip_tables
 +</pre></html>
 +
 +''x_tables'' et ''ip_tables'' sont désormais tout seuls dans leur coin et ''nf_tables'' ne dépend plus de ''nft_compat''. À ce niveau, il serait pafaitement possible de purger le paquet ''iptables'' sans altérer le fonctionnement du routeur.
 +====== Conclusion ======
 +Avec Debian 10, ''nf-tables'' est normalement toujours utilisé:
 +  - Soit à travers de modules de compatibilité si l'on continue à utiliser les rèles ''iptables'':<html><pre class="code">
 +<span class="hly">nf_tables</span>             143360  27 <span class="bhly">nft_compat</span>,nft_chain_nat_ipv4,nft_counter
 +<span class="hly">nfnetlink</span>              16384  2 <span class="bhly">nft_compat</span>,nf_tables
 +ip_tables              28672  0
 +<span class="hly">x_tables</span>               45056  5 xt_conntrack,<span class="bhly">nft_compat</span>,xt_state,ipt_MASQUERADE,ip_tables
 +<span class="txtb"># iptables -> x_tables -> nft_compat -> nf_tables</span></pre></html>.
 +  - Soit nativement si l'on accepte les règles ''nft'':<html><pre class="code">
 +<span class="hly">nf_tables             143360  33 nft_ct,nft_chain_nat_ipv4,nft_counter,nft_masq,nft_masq_ipv4</span>
 +nfnetlink              16384  1 nf_tables
 +ip_tables              28672  0
 +x_tables               45056  1 ip_tables
 +<span class="txtb"># ip_tables et x_tables HS. nf_tables prend tout en charge</span>
 +</pre></html>
  
Du côté des modules "kernel": Dernière modification le: 01/01/1970 à 00:00 par