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 05/04/2025 à 12:56] – [Traduire ces règles en syntaxe nft] 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 279: Ligne 279:
  type filter hook input priority filter; policy drop;  type filter hook input priority filter; policy drop;
  tcp dport 23 counter packets 35 bytes 1837 accept  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  ct state established,related counter packets 0 bytes 0 accept
  }</span>  }</span>
Ligne 308: Ligne 309:
 </pre></html> </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. 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.
-==== Franchir le Rubicon ==== 
-Il faut maintenant activer le service ''nftables'' et **ne plus jamais utiliser les outils iptables!** 
-  systemctl enable nftables.service 
-  systemctl start nftables.service 
-  apt purge iptables 
-En français: 
-  * activer le service nftables sur systemd, 
-  * démarrer ce service, 
-  * virer tout ce qu'avait installé le paquet Iptables. 
-Autrement-dit, si ça a foiré, il faudra tout reprendre à zéro, d'où l'intérêt d'y aller prudemment. 
-==== Ajustement utile ==== 
-Par curiosité, regardons ce que fait le service «nftables» de systemd. Le script se trouve dans ''/usr/lib/systemd/system/'': 
-<html><pre class="code"> 
-<b>cat /usr/lib/systemd/system/nftables.service </b> 
-[Unit] 
-Description=nftables 
-Documentation=man:nft(8) http://wiki.nftables.org 
-Wants=network-pre.target 
-Before=network-pre.target shutdown.target 
-Conflicts=shutdown.target 
-DefaultDependencies=no 
- 
-[Service] 
-Type=oneshot 
-RemainAfterExit=yes 
-StandardInput=null 
-ProtectSystem=full 
-ProtectHome=true 
-<span class="hly"><b>ExecStart=/usr/sbin/nft -f /etc/nftables.conf</b> 
-ExecReload=/usr/sbin/nft -f /etc/nftables.conf 
-<span class="bhlo">ExecStop=/usr/sbin/nft flush ruleset</span> 
- 
-[Install] 
-WantedBy=sysinit.target 
-</pre></html> 
- 
-  * au démarrage (//ou au re-démarrage//) le fichier ''/etc/nftables.conf'' sera chargé; 
-  * à l'arrêt, la configuration est simplement détruite, mais pas sauvée. 
-Il revient donc à l'administrateur de maintenir à jour ce fichier ''/etc/nftables.conf''. 
- 
-Si l'on recharge le fichier de configuration, les règles vont s'inscrire une fois de plus dans les chaînes. Il faut donc penser à nettoyer avant. Il est donc nécessaire de retoucher un peu le script de ce service. La procédure propre est prévue: 
-  - copier le fichier original dans ''/etc/systemd'' en respectant l'arborescence, 
-  - modifier cette copie en fonction des besoins. Ainsi 
-<html><pre class="code"> 
-<b>cp /usr/lib/systemd/system/nftables.service /etc/systemd/system/</b> 
-</pre></html> 
-puis modifier cette copie comme ceci: 
-<html><pre class="code"> 
-[Unit] 
-Description=nftables 
-Documentation=man:nft(8) http://wiki.nftables.org 
-Wants=network-pre.target 
-Before=network-pre.target shutdown.target 
-Conflicts=shutdown.target 
-DefaultDependencies=no 
- 
-[Service] 
-Type=oneshot 
-RemainAfterExit=yes 
-StandardInput=null 
-ProtectSystem=full 
-ProtectHome=true 
-<span class="hly"><b>ExecStart=/usr/sbin/nft flush ruleset</b> 
-ExecStart=/usr/sbin/nft -f /etc/nftables.conf 
-<b>ExecReload=/usr/sbin/nft flush ruleset</b> 
-ExecReload=/usr/sbin/nft -f /etc/nftables.conf</span> 
-ExecStop=/usr/sbin/nft flush ruleset 
- 
-[Install] 
-WantedBy=sysinit.target 
-</pre></html> 
-De cette manière, lorsque l'administrateur aura modifié au moyen de la commande ''nft'' les règles de filtrage, une fois sa modification validée, il devra mettre à jour le fichier ''/etc/nftables.conf'' de manière à assurer la persistance de ces règles aussi bien au redémarrage du service qu'à celui de tout le système.  
-===== Vérification ===== 
-Il reste à confirmer que tout ceci fonctionne comme prévu. Après redémarrage du prototype: 
-<html><pre class="code"> 
-<b>systemctl status nftables</b> 
-● nftables.service - nftables 
-     <span class="bhly">Loaded: loaded</span> (/usr/lib/systemd/system/nftables.service; enabled; preset: enabled) 
-     Active: active (exited) since Thu 2025-04-03 11:28:22 CEST; 5h 1min ago 
-... 
-<b>nft list ruleset</b> 
-table inet filter { 
- chain input { 
- type filter hook input priority filter; policy accept; 
- } 
- 
- chain forward { 
- type filter hook forward priority filter; policy accept; 
- } 
- 
- chain output { 
- type filter hook output priority filter; policy accept; 
- } 
-} 
-table ip filter { 
- chain INPUT { 
- type filter hook input priority filter; policy drop; 
- tcp dport 23 counter packets 661 bytes 35402 accept 
- ct state established,related counter packets 29 bytes 2996 accept 
- } 
- 
- chain FORWARD { 
- type filter hook forward priority filter; policy accept; 
- } 
- 
- chain OUTPUT { 
- type filter hook output priority filter; policy accept; 
- } 
-} 
-table ip6 filter { 
- chain INPUT { 
- type filter hook input priority filter; policy drop; 
- tcp dport 23 counter packets 0 bytes 0 accept 
- ct state established,related counter packets 0 bytes 0 accept 
- } 
- 
- chain FORWARD { 
- type filter hook forward priority filter; policy accept; 
- } 
- 
- chain OUTPUT { 
- type filter hook output priority filter; policy accept; 
- } 
-} 
-</pre></html> 
  
-Reste à étudier la nouvelle syntaxe de manière à oublier Iptables. 
Nftables: Dernière modification le: 05/04/2025 à 12:56 par prof