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
Prochaine révision
Révision précédente
130netfilter:30-nftables [le 03/04/2025 à 09:10] – [Sauvegarde des règles iptables] prof130netfilter:30-nftables [le 04/10/2025 à 16:00] (Version actuelle) – [Nftables] prof
Ligne 1: Ligne 1:
 ====== Nftables ====== ====== Nftables ======
  
-Le couple Netfilter/Iptables dont le projet fut initié par Paul "Rusty" Russell au tout début du siècle. Si Netfilter reste d'actualité en évoluant au fil du temps, Iptables, de l'aveu même de son initiateur en était arrivé à un point où toute évolution devenait problématique, le code devenant difficile à maintenir et les commandes trop nombreuses (iptables, ip6tables, ebtables, arptables...).+Le couple Netfilter/Iptables dont le projet fut initié par Paul "Rusty" Russell au tout début de ce siècle. Si Netfilter reste d'actualité en évoluant au fil du temps, Iptables, de l'aveu même de son initiateur en était arrivé à un point où toute évolution devenait problématique, le code devenant difficile à maintenir et les commandes trop nombreuses (iptables, ip6tables, ebtables, arptables...).
  
 Nftables, apparu depuis le kernel 3.13 en 2014,  reprend toutes les idées accumulées dans le projet iptables, en les organisant de façon plus cohérente, avec un code entièrement revu. Nftables, apparu depuis le kernel 3.13 en 2014,  reprend toutes les idées accumulées dans le projet iptables, en les organisant de façon plus cohérente, avec un code entièrement revu.
Ligne 123: Ligne 123:
 <code> <code>
 iptables -A INPUT -p tcp --dport 23 -j ACCEPT iptables -A INPUT -p tcp --dport 23 -j ACCEPT
 +iptables -A INPUT -p udp --dport 68 -j ACCEPT
 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 iptables -P INPUT DROP iptables -P INPUT DROP
Ligne 128: Ligne 129:
 En français: En français:
 <code> <code>
-laisser entrer les connexions TCP sur le port 23+laisser entrer les connexions TCP sur le port 23 (Telnet) 
 +laisser entrer les datagrammes  UDP sur le port 68 (DHCP)
 laisser entrer toutes les connexions déjà établies ou relatives à une connexion déjà établie laisser entrer toutes les connexions déjà établies ou relatives à une connexion déjà établie
 mettre tout le reste à la poubelle mettre tout le reste à la poubelle
Ligne 135: Ligne 137:
 <code> <code>
 ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-ip6tables -A INPUT -p icmp6 -j ACCEPT+ip6tables -A INPUT -p ipv6-icmp -j ACCEPT
 ip6tables -A INPUT -s fe80::/64 -j ACCEPT ip6tables -A INPUT -s fe80::/64 -j ACCEPT
 ip6tables -P INPUT DROP ip6tables -P INPUT DROP
Ligne 145: Ligne 147:
 Chain INPUT (policy DROP) Chain INPUT (policy DROP)
 target     prot opt source               destination          target     prot opt source               destination         
-ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED 
 ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:telnet ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:telnet
 +ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc
 +ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
  
 Chain FORWARD (policy ACCEPT) Chain FORWARD (policy ACCEPT)
Ligne 185: Ligne 188:
  <span class="bhly">type filter hook input</span> priority filter; policy <span class="bhly">drop;</span>  <span class="bhly">type filter hook input</span> priority filter; policy <span class="bhly">drop;</span>
  <span class="bhly">tcp dport 23</span> counter packets 1528 bytes 81891 <span class="bhly">accept</span>  <span class="bhly">tcp dport 23</span> counter packets 1528 bytes 81891 <span class="bhly">accept</span>
 + <span class="bhly">udp dport 68</span> counter packets 0 bytes 0 <span class="bhly">accept</span>
  <span class="bhly">ct state related,established</span> counter packets 0 bytes 0 <span class="bhly">accept</span>  <span class="bhly">ct state related,established</span> counter packets 0 bytes 0 <span class="bhly">accept</span>
  }  }
Ligne 211: Ligne 215:
  type filter hook input priority filter; policy drop;  type filter hook input priority filter; policy drop;
  tcp dport 23 counter packets 496 bytes 26436 accept  tcp dport 23 counter packets 496 bytes 26436 accept
 + udp dport 68 counter packets 0 bytes 0 accept
  ct state related,established counter packets 20 bytes 2060 accept  ct state related,established counter packets 20 bytes 2060 accept
  }  }
Ligne 246: Ligne 251:
 add chain ip filter OUTPUT { type filter hook output priority 0; policy accept; } add chain ip filter OUTPUT { type filter hook output priority 0; policy accept; }
 add rule ip filter INPUT tcp dport 23 counter accept add rule ip filter INPUT tcp dport 23 counter accept
 +add rule ip filter INPUT udp dport 68 counter accept
 add rule ip filter INPUT ct state related,established counter accept add rule ip filter INPUT ct state related,established counter accept
 # Completed on Thu Mar 27 11:32:55 2025</span> # Completed on Thu Mar 27 11:32:55 2025</span>
Ligne 258: Ligne 264:
 # Completed on Thu Mar 27 11:33:15 2025</span> # Completed on Thu Mar 27 11:33:15 2025</span>
 </pre></html> </pre></html>
 +==== Création du fichier de configuration nftables ====
 +Très simple. On commence par virer les éventuels parasites, puis on injecte notre fichier de traduction:
 +<html><pre class="code">
 +<b>nft flush ruleset</b>
 +
 +<b>nft -f ruleset.nft</b>
 +</pre></html>
 +Et l'on admire le résultat:
 +<html><pre class="code">
 +<b>nft list ruleset</b>
 +
 +<span class="hly">table ip filter {
 + chain INPUT {
 + type filter hook input priority filter; policy drop;
 + tcp dport 23 counter packets 35 bytes 1837 accept
 + UDP DPORT 68 counter packets 0 bytes 0 accept
 + ct state established,related counter packets 0 bytes 0 accept
 + }</span>
 +
 + chain FORWARD {
 + type filter hook forward priority filter; policy accept;
 + }
 +
 + chain OUTPUT {
 + type filter hook output priority filter; policy accept;
 + }
 +}
 +<span class="hlo">table ip6 filter {
 + chain INPUT {
 + type filter hook input priority filter; policy drop;
 + ct state established,related counter packets 0 bytes 0 accept
 + meta l4proto ipv6-icmp counter packets 2 bytes 200 accept
 + ip6 saddr fe80::/64 counter packets 0 bytes 0 accept
 + }</span>
 +
 + chain FORWARD {
 + type filter hook forward priority filter; policy accept;
 + }
 +
 + chain OUTPUT {
 + type filter hook output priority filter; policy accept;
 + }
 +}
 +</pre></html>
 +Le système a rajouté les chaînes INPUT et FORWARD qui restent vides dans notre cas (trop) simple. En effet, il a été omis d'autoriser les entrées et les sorties sur l'interface locale, aussi bien en IPv4 qu'en IPv6, ce qui pourrait perturber le fonctionnement de certains services utilisant un socket inet plutôt qu'un socket unix pour communiquer entre eux.
 +
Nftables: Dernière modification le: 03/04/2025 à 09:10 par prof