Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| 130netfilter:50-commencer_avec_nftables [le 24/06/2025 à 14:50] – prof | 130netfilter:50-commencer_avec_nftables [le 28/06/2025 à 12:31] (Version actuelle) – [Ajout de règles dans la chaîne «input_ipv6»] prof | ||
|---|---|---|---|
| Ligne 102: | Ligne 102: | ||
| pour faire table rase. Puis nous (re)créons une table «inet filter»: | pour faire table rase. Puis nous (re)créons une table «inet filter»: | ||
| nft add table inet filter | nft add table inet filter | ||
| - | <note warning> | + | <note warning> |
| Ceci étant dit, allons-y quand même. | Ceci étant dit, allons-y quand même. | ||
| - | ==== Créer | + | |
| - | Dans cette table, ajoutons une chaîne: | + | Après de très nombreux essais plus que décevants concernant le filtrage simultané des ports tcp entrants en ipv4 **comme** en ipv6, et dont une lecture à de nombreuses reprises de la documentation qui n'a pas réussi à m' |
| + | |||
| + | ==== Créer | ||
| | | ||
| < | < | ||
| + | < | ||
| + | < | ||
| < | < | ||
| Ligne 113: | Ligne 118: | ||
| table inet filter { | table inet filter { | ||
| + | chain input_ipv4 { | ||
| + | type filter hook input priority filter; policy accept; | ||
| + | } | ||
| + | |||
| + | chain input_ipv6 { | ||
| + | type filter hook input priority filter; policy accept; | ||
| + | } | ||
| + | |||
| chain input { | chain input { | ||
| type filter hook input priority filter; policy accept; | type filter hook input priority filter; policy accept; | ||
| } | } | ||
| } | } | ||
| - | |||
| </ | </ | ||
| Jusque là, tout va bien;'' | Jusque là, tout va bien;'' | ||
| - | ==== Ajout d'une règle | + | ==== Ajout de règles |
| - | qui va explicitement laisser l'entrée ouverte sur les ports TCP 22, 80 et 443: | + | Nous allons ajouter des filtres pour icmp (v4) pour accepter '' |
| < | < | ||
| - | < | + | < |
| < | < | ||
| table inet filter { | table inet filter { | ||
| + | chain input_ipv4 { | ||
| + | type filter hook input priority filter; policy accept; | ||
| + | <span class=" | ||
| + | } | ||
| + | |||
| + | chain input_ipv6 { | ||
| + | type filter hook input priority filter; policy accept; | ||
| + | } | ||
| + | |||
| chain input { | chain input { | ||
| type filter hook input priority filter; policy accept; | type filter hook input priority filter; policy accept; | ||
| - | tcp dport { 22, 80, 443 } accept | ||
| } | } | ||
| } | } | ||
| + | |||
| </ | </ | ||
| - | Maintenant que nous sommes capables d' | + | ==== Ajout de règles dans la chaîne «input_ipv6» ==== |
| + | Ici, il faut en plus autoriser les types «nd-neighbor-solicit, | ||
| < | < | ||
| - | < | + | < |
| + | < | ||
| < | < | ||
| table inet filter { | table inet filter { | ||
| + | chain input_ipv4 { | ||
| + | type filter hook input priority filter; policy accept; | ||
| + | icmp type echo-request limit rate 5/second accept | ||
| + | } | ||
| + | |||
| + | chain input_ipv6 { | ||
| + | type filter hook input priority filter; policy accept; | ||
| + | <span class=" | ||
| + | <span class=" | ||
| + | } | ||
| + | |||
| chain input { | chain input { | ||
| - | type filter hook input priority filter; | + | type filter hook input priority filter; policy accept; |
| - | tcp dport { 22, 80, 443 } accept | + | |
| } | } | ||
| } | } | ||
| + | </ | ||
| + | ==== Ajout de règles dans la chaîne «input» ==== | ||
| + | C'est ici que le destin de notre pare-feu se joue... | ||
| + | Concernant l' | ||
| + | nft add rule inet filter input iifname " | ||
| + | Concernant le suivi des connexions : | ||
| + | nft add rule inet filter input ct state vmap { established : accept, related : accept, invalid : drop } | ||
| + | Mettre en œuvre les chaînes «input_ipv4» et «input_ipv6» | ||
| </ | </ | ||
| Ligne 151: | Ligne 191: | ||
| nft add rule inet filter input ct state established, | nft add rule inet filter input ct state established, | ||
| tout laisser entrer par l' | tout laisser entrer par l' | ||
| - | | + | |
| autoriser certains signaux icmp: | autoriser certains signaux icmp: | ||
| nft add rule inet filter input icmp type {echo-request, | nft add rule inet filter input icmp type {echo-request, | ||
| Ligne 194: | Ligne 234: | ||
| } | } | ||
| </ | </ | ||
| - | | + | ===== Vérifier le travail ===== |
| + | |||
| + | |||
| + | Après de nombreux essais, voici une solution efficiente, mais pas évidente: | ||
| + | < | ||
| + | < | ||
| + | |||
| + | # | ||
| + | flush ruleset | ||
| + | |||
| + | table inet filter { | ||
| + | |||
| + | chain input_ipv4 { | ||
| + | icmp type echo-request | ||
| + | } | ||
| + | |||
| + | chain input_ipv6 { | ||
| + | icmpv6 type { nd-neighbor-solicit, | ||
| + | icmpv6 type echo-request limit rate 5/second accept | ||
| + | } | ||
| + | |||
| + | chain input { | ||
| + | type filter hook input priority 0; policy drop; | ||
| + | iifname lo accept | ||
| + | <span class=" | ||
| + | <span class=" | ||
| + | tcp dport { 22, 80, 443} accept | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | Solution extraite de la [[https:// | ||
| + | * ** limit rate** permet de limiter la fréquence de réception des paquets icmp «echo-request», | ||
| + | * **vmap** pourrait être comparé à un dictionnaire, | ||
| + | * **jump** c'est un saut vers quelque chose, ici une autre chaîne, et lorsque cette autre chaîne a été entièrement parcourue, revient à la ligne qui suit le «jump». | ||
Commencer avec Nftables: Dernière modification le: 24/06/2025 à 14:50 par prof