ipr-cnrs.nftables

Nftables

  1. Aperçu
  2. Variables de Rôle
  3. Exemples
  4. Configuration
  5. Développement
  6. Licence
  7. Informations sur l'Auteur

Aperçu

Un rôle pour gérer les règles et les paquets Nftables.

Fortement inspiré par le rôle de pare-feu de Mike Gleason (3 niveaux de définition des règles et templates), merci ! J'espère ne pas avoir complexifié sa philosophie… (Je suis assez sûr d'avoir maintenant complexifié :D) ^^

Variables de Rôle

  • nft_enabled : Activer ou désactiver le support pour Nftables [par défaut : true].
  • nft_pkg_state : État du ou des nouveaux paquets nftables [par défaut : present].
  • nft_old_pkg_list : La liste des paquets inutiles à supprimer (comme Iptables,…) [par défaut : iptables].
  • nft_old_pkg_state : État du ou des anciens paquets [par défaut : absent].
  • nft_old_pkg_manage : Si le ou les anciens paquets doivent être gérés avec ce rôle [par défaut : true].
  • nft_conf_dir_path : Répertoire pour stocker les différents fichiers de configuration Nftables [par défaut : /etc/nftables.d].
  • nft_main_conf_path : Fichier de configuration principal chargé par l'unité systemd [par défaut : /etc/nftables.conf].
  • nft_main_conf_content : Template utilisé pour générer le fichier de configuration principal précédent [par défaut : etc/nftables.conf.j2].
  • nft_input_conf_path : Fichier de configuration d'entrée inclus dans le fichier de configuration principal [par défaut : {{ nft_conf_dir_path }}/filter-input.nft].
  • nft_input_conf_content : Template utilisé pour générer le fichier de configuration d'entrée précédent [par défaut : etc/nftables.d/filter-input.nft.j2].
  • nft_output_conf_path : Fichier de configuration de sortie inclus dans le fichier de configuration principal [par défaut : {{ nft_conf_dir_path }}/filter-output.nft].
  • nft_output_conf_content : Template utilisé pour générer le fichier de configuration de sortie précédent [par défaut : etc/nftables.d/filter-output.nft.j2].
  • nft_forward_conf_path : Fichier de configuration de transmission inclus dans le fichier de configuration principal [par défaut : {{ nft_conf_dir_path }}/filter-forward.nft].
  • nft_forward_conf_content : Template utilisé pour générer le fichier de configuration de transmission précédent [par défaut : etc/nftables.d/filter-forward.nft.j2].
  • nft_define_conf_path : Fichier de définition des variables inclus dans le fichier de configuration principal [par défaut : {{ nft_conf_dir_path }}/defines.nft].
  • nft_define_conf_content : Template utilisé pour générer le fichier de définition des variables précédent [par défaut : etc/nftables.d/defines.nft.j2].
  • nft_sets_conf_path : Fichier de définition des ensembles et des cartes inclus dans le fichier de configuration principal [par défaut : {{ nft_conf_dir_path }}/sets.nft].
  • nft_sets_conf_content : Template utilisé pour générer le fichier de définition des ensembles et des cartes précédent [par défaut : etc/nftables.d/sets.nft.j2].
  • nft_global_default_rules : Définir des règles par défaut pour la chaîne global. D'autres chaînes seront dirigées vers global avant d'appliquer leurs propres règles spécifiques.
  • nft_global_rules : Vous pouvez ajouter des règles global ou remplacer celles définies par nft_global_default_rules pour tous les hôtes.
  • nft_global_group_rules : Vous pouvez ajouter des règles global ou remplacer celles définies par nft_global_default_rules et nft_global_rules pour un groupe.
  • nft_global_host_rules : Les hôtes peuvent également ajouter ou remplacer toutes les règles précédentes.
  • nft__custom_content : Contenu personnalisé (tables, inclusions,…) à ajouter dans la configuration Nftables [par défaut : ''].
  • nft_input_default_rules : Définir des règles par défaut pour la chaîne input.
  • nft_input_rules : Vous pouvez ajouter des règles input ou remplacer celles définies par nft_input_default_rules pour tous les hôtes.
  • nft_input_group_rules : Vous pouvez ajouter des règles input ou remplacer celles définies par nft_input_default_rules et nft_input_rules pour un groupe.
  • nft_input_host_rules : Les hôtes peuvent également ajouter ou remplacer toutes les règles précédentes input.
  • nft_output_default_rules : Définir des règles par défaut pour la chaîne output.
  • nft_output_rules : Vous pouvez ajouter des règles output ou remplacer celles définies par nft_output_default_rules pour tous les hôtes.
  • nft_output_group_rules : Vous pouvez ajouter des règles output ou remplacer celles définies par nft_output_default_rules et nft_output_rules pour un groupe.
  • nft_output_host_rules : Les hôtes peuvent également ajouter ou remplacer toutes les règles précédentes output.
  • nft_forward_default_rules : Définir des règles par défaut pour la chaîne forward.
  • nft_forward_rules : Vous pouvez ajouter des règles forward ou remplacer celles définies par nft_forward_default_rules pour tous les hôtes.
  • nft_forward_group_rules : Vous pouvez ajouter des règles forward ou remplacer celles définies par nft_forward_default_rules et nft_forward_rules pour un groupe.
  • nft_forward_host_rules : Les hôtes peuvent également ajouter ou remplacer toutes les règles précédentes forward.
  • nft__forward_table_manage : Si la table de forwarding doit être gérée [par défaut : False].
  • nft__nat_table_manage : Si la table nat doit être gérée [par défaut : False].
  • nft__nat_default_prerouting_rules : Définir des règles par défaut pour la chaîne prerouting de la table nat.
  • nft__nat_prerouting_rules : Définir des règles pour la chaîne prerouting de la table nat pour tous les hôtes dans l'inventaire Ansible.
  • nft__nat_group_prerouting_rules : Définir des règles pour la chaîne prerouting de la table nat pour les hôtes dans un groupe spécifique de l'inventaire Ansible.
  • nft__nat_host_prerouting_rules : Définir des règles pour la chaîne prerouting de la table nat pour des hôtes spécifiques dans l'inventaire Ansible.
  • nft__nat_prerouting_conf_path : Fichier de configuration de prerouting inclus dans la configuration principale [par défaut : {{ nft_conf_dir_path }}/nat-prerouting.nft].
  • nft__nat_prerouting_conf_content : Template utilisé pour générer le fichier de configuration de prerouting précédent [par défaut : etc/nftables.d/nat-prerouting.nft.j2].
  • nft__nat_default_postrouting_rules : Définir des règles par défaut pour la chaîne postrouting de la table nat.
  • nft__nat_postrouting_rules : Définir des règles pour la chaîne postrouting de la table nat pour tous les hôtes dans l'inventaire Ansible.
  • nft__nat_group_postrouting_rules : Définir des règles pour la chaîne postrouting de la table nat pour les hôtes dans un groupe spécifique de l'inventaire Ansible.
  • nft__nat_host_postrouting_rules : Définir des règles pour la chaîne postrouting de la table nat pour des hôtes spécifiques dans l'inventaire Ansible.
  • nft__nat_postrouting_conf_path : Fichier de configuration de postrouting inclus dans la configuration principale [par défaut : {{ nft_conf_dir_path }}/nat-postrouting.nft].
  • nft__nat_postrouting_conf_content : Template utilisé pour générer le fichier de configuration de postrouting précédent [par défaut : etc/nftables.d/nat-postrouting.nft.j2].
  • nft_define_default : Définir des variables par défaut disponibles dans toutes les règles.
  • nft_define : Vous pouvez ajouter des variables ou remplacer celles définies par nft_define_default pour tous les hôtes.
  • nft_define_group : Vous pouvez ajouter des variables ou remplacer celles définies par nft_define_default et nft_define pour un groupe.
  • nft_define_host : Vous pouvez ajouter ou remplacer toutes les variables précédentes.
  • nft_service_manage : Si le service nftables doit être géré avec ce rôle [par défaut : true].
  • nft_service_name : Nom du service nftables [par défaut : nftables].
  • nft_service_enabled : Définir le service nftables disponible au démarrage [par défaut : true].
  • nft__service_protect : Si l'unité systemd doit protéger le système et l'hôte [par défaut : true].
  • nft_merged_groups : Si les variables des groupes d'hôtes Ansible doivent être fusionnées [par défaut : false].
  • nft_merged_groups_dir : Le dictionnaire où se trouvent les règles de groupe nftables, nommées comme les groupes Ansible [par défaut : vars/].
  • nft_debug : Activer ou désactiver une sortie plus détaillée. [par défaut : 'false'].

Variables Spécifiques à l'OS

Veuillez consulter la valeur par défaut par fichier d'Operating System dans le répertoire [vars][vars directory].

  • nft_pkg_list : La liste du ou des paquets à fournir pour nftables.
  • nft__bin_location : Chemin vers l'exécutable nftables. [par défaut : /usr/sbin/nft]

Templates de Règles

Le dictionnaire nft_templates contient une bibliothèque de règles utiles, destinées à être standardisées et prêtes à l'emploi dans votre pare-feu. Par exemple, {{ nft_templates.allow_mdns }} se développera en règles couvrant mDNS pour IPv4 et IPv6 :

  - meta l4proto udp ip6 daddr ff02::fb    udp dport mdns counter accept comment "mDNS IPv6 service discovery"
  - meta l4proto udp ip  daddr 224.0.0.251 udp dport mdns counter accept comment "mDNS IPv4 service discovery"

Utilisation prévue dans des ensembles de règles personnalisés :

nft_host_input_rules:
  ...
  010 allow mdns: "{{ nft_templates.allow_mdns }}"

Parmi d'autres, le dictionnaire nft_templates contient des règles mettant en œuvre des recommandations complètes pour le transfert et les pare-feux de trafic d'entrée comme défini dans RFC 4890, RFC 7126 et RFC 9288. Pour plus de détails et d'exemples, voir defaults/main.yml.

Dictionnaires de Règles

Chaque type de dictionnaire de règles sera fusionné et les règles seront appliquées dans l'ordre alphabétique des clés (la raison d'utiliser 000 à 999 comme préfixe). Donc :

  • nft_*_default_rules : Définit des règles par défaut pour tous les nœuds. Vous pouvez les définir dans group_vars/all.
  • nft_*_rules : Peut ajouter des règles et remplacer celles définies par nft_*_default_rules. Vous pouvez les définir dans group_vars/all.
  • nft_*_group_rules : Peut ajouter des règles et remplacer celles définies par nft_*_default_rules et nft_*_rules. Vous pouvez les définir dans group_vars/webservers.
    • Si 'nft_merged_groups' est défini sur true, plusieurs règles de groupe des groupes Ansible seront également fusionnées.
  • nft_*_host_rules : Peut ajouter des règles et remplacer celles définies par nft_*_default_rules, nft_*_group_rules et nft_*_rules. Vous pouvez les définir dans host_vars/www.local.domain.

defaults/main.yml :

# règles
nft_global_default_rules:
  005 état gestion :
    - ct state established,related accept
    - ct state invalid drop
nft_global_rules: {}
nft_merged_groups: false
nft_merged_groups_dir: vars/
nft_global_group_rules: {}
nft_global_host_rules: {}

nft_input_default_rules:
  000 politique :
    - type filter hook input priority 0; policy drop;
  005 global :
    - jump global
  010 drop indésirable :
    - ip daddr @blackhole counter drop
  015 localhost :
    - iif lo accept
  210 input tcp accepté :
    - tcp dport @in_tcp_accept ct state new accept
nft_input_rules: {}
nft_input_group_rules: {}
nft_input_host_rules: {}

nft_output_default_rules:
  000 politique :
    - type filter hook output priority 0; policy drop;
  005 global :
    - jump global
  015 localhost :
    - oif lo accept
  050 icmp :
    - ip protocol icmp accept
    - ip6 nexthdr icmpv6 counter accept
  200 output udp accepté :
    - udp dport @out_udp_accept ct state new accept
  210 output tcp accepté :
    - tcp dport @out_tcp_accept ct state new accept
nft_output_rules: {}
nft_output_group_rules: {}
nft_output_host_rules: {}

# définir les variables nft
nft_define_default:
  diffusion et multicast :
    desc: 'diffusion et multicast'
    name: badcast_addr
    value: '{ 255.255.255.255, 224.0.0.1, 224.0.0.251 }'
  input tcp accepté :
    name: in_tcp_accept
    value: '{ ssh }'
  output tcp accepté :
    name: out_tcp_accept
    value: '{ http, https, hkp }'
  output udp accepté :
    name: out_udp_accept
    value: '{ bootps, domain, ntp }'
nft_define: {}
nft_define_group: {}
nft_define_host: {}

# ensembles et cartes
nft_set_default:
  blackhole:
    - type ipv4_addr;
    - elements = $badcast_addr
  in_tcp_accept:
    - type inet_service; flags interval;
    - elements = $in_tcp_accept
  out_tcp_accept:
    - type inet_service; flags interval;
    - elements = $out_tcp_accept
  out_udp_accept:
    - type inet_service; flags interval;
    - elements = $out_udp_accept
nft_set: {}
nft_set_group: {}
nft_set_host: {}

Ces valeurs par défaut généreront la configuration suivante :

#!/usr/sbin/nft -f
# Géré par Ansible

# nettoyage
flush ruleset

include "/etc/nftables.d/defines.nft"

table inet filter {
    chain global {
        # 000 état gestion
        ct state established,related accept
        ct state invalid drop
    }
    include "/etc/nftables.d/sets.nft"
    include "/etc/nftables.d/filter-input.nft"
    include "/etc/nftables.d/filter-output.nft"
}

Et vous pouvez obtenir toutes les règles et définitions en affichant le jeu de règles sur l’hôte : $ nft list ruleset :

table inet filter {
    set blackhole {
        type ipv4_addr
        elements = { 255.255.255.255, 224.0.0.1, 224.0.0.251}
    }

    set out_tcp_accept {
        type inet_service
        flags interval
        elements = { http, https, hkp}
    }

    set out_udp_accept {
        type inet_service
        flags interval
        elements = { domain, bootps, ntp}
    }

    chain global {
        ct state established,related accept
        ct state invalid drop
    }

    chain input {
        type filter hook input priority 0; policy drop;
        jump global
        ip daddr @blackhole counter packets 0 bytes 0 drop
        iif "lo" accept
        tcp dport @in_tcp_accept ct state new accept
    }

    chain output {
        type filter hook output priority 0; policy drop;
        jump global
        oif "lo" accept
        ip protocol icmp accept
        udp dport @out_udp_accept ct state new accept
        tcp dport @out_tcp_accept ct state new accept
    }
}

Exemples

Avec des playbooks

Gérer Nftables avec les variables par défaut (cliquez pour développer)
- hôtes: serverXYZ
  rôles:
    - rôle: ipr-cnrs.nftables
Ajouter une nouvelle règle de filtre simple pour le trafic entrant (par exemple 1 port pour UDP/torrent) (cliquez pour développer)
- hôtes: serverXYZ
  vars:
      nft_input_rules:
        400 input torrent accepté:
          - udp dport 6881 ct state new accept
  rôles:
    - rôle: ipr-cnrs.nftables
  • Les variables nft_input_group_rules ou nft_input_host_rules peuvent également être utilisées.
  • Le poids (400) permet d'ordonner toutes les règles fusionnées (des dictionnaires nft_input_*rules).
  • Le texte suivant le poids (input torrent accepté) est une petite description qui sera ajoutée en tant que commentaire dans le fichier nft_input_conf_path sur l'hôte distant.
Ajouter une nouvelle règle de filtre multi-ports pour le trafic entrant (par exemple TCP/http, https, http-alt,…) (cliquez pour développer)
- hôtes: serverXYZ
  vars:
      nft_input_rules:
        400 input http accepté:
          - tcp dport { 80, 443, 8080-8082 } ct state new accept
  rôles:
    - rôle: ipr-cnrs.nftables
  • Les variables nft_input_group_rules ou nft_input_host_rules peuvent également être utilisées.
  • Le poids (400) permet d'ordonner toutes les règles fusionnées (des dictionnaires nft_input_*rules).
  • Le texte suivant le poids (input http accepté) est une petite description qui sera ajoutée en tant que commentaire dans le fichier nft_input_conf_path sur l'hôte distant.
  • Dans ce cas, les accolades sont utiles et définissent un ensemble anonyme. Pour un seul élément (port, adresse IP,…), les accolades sont superflues et la définition singleton est suffisante.
Ajouter une nouvelle règle avec une variable (cliquez pour développer)

Les variables Nftables peuvent être utiles si vous définissez certaines règles génériques pour tous les hôtes avec de telles variables (appelées avec $) et remplacez la valeur de la variable pour certains groupes ou hôtes.

- hôtes: serverXYZ
  vars:
    - nft_define_group:
        input http accepté:
          desc: HTTP et HTTPS
          name: in_http_accept
          value: '{ 80, 443 }'
      nft_input_group_rules:
        400 input http accepté:
          - tcp dport $in_http_accept ct state new accept
  rôles:
    - rôle: ipr-cnrs.nftables
  1. Ajouter une nouvelle variable avec define pour les ports HTTP.
  2. Ajouter une nouvelle règle pour le trafic entrant et utiliser la variable définie précédemment.
  3. Le résultat de nft list ruleset sur l'hôte distant sera :
    table inet filter {
            …
    
            chain input {
                    …
                    tcp dport { http, https } ct state new accept
                    …
            }
            …
    }
    
    • Pas de mention de la variable $in_http_accept.
  • Les variables nft_define ou nft_define_host peuvent aussi être utilisées.
  • Les variables nft_input_rules ou nft_input_host_rules peuvent aussi être utilisées.
  • Le poids (400) permet d'ordonner toutes les règles fusionnées (des dictionnaires nft_input_*rules).
  • Le texte suivant le poids (input http accepté) est une petite description qui sera ajoutée en tant que commentaire dans le fichier nft_input_conf_path sur l'hôte distant.
Ajouter une nouvelle règle avec un ensemble nommé (cliquez pour développer)

Assez similaire aux variables Nftables, l'ensemble nommé peut être utile si vous définissez certaines règles génériques et ensembles (par exemple pour tous les hôtes) et remplacez seulement l'ensemble dans certains cas (par exemple pour un groupe ou certains hôtes).

En plus des variables, il est possible d'ajouter du contenu aux ensembles nommés à la volée depuis l'hôte sans réécrire complètement la règle.

- hôtes: serverXYZ
  vars:
      nft_set_group:
        in_udp_accept:
          - type inet_service; flags interval;
          - elements = { 6881-6887, 6889 }
      nft_input_group_rules:
        200 input udp accepté:
          - udp dport @in_udp_accept ct state new accept
  rôles:
    - rôle: ipr-cnrs.nftables
  1. Ajouter un nouvel ensemble nommé avec le dictionnaire nft_set_group (par exemple pour les ports torrent).
  2. Ajouter une nouvelle règle pour le trafic entrant et utiliser l'ensemble défini précédemment.
  3. Sur l'hôte distant, si vous essayez d'ajouter un port à cet ensemble : nft add element inet filter in_udp_accept \{ 6999 \}
  4. Le résultat de nft list ruleset sur l'hôte distant sera maintenant :
    table inet filter {
            …
            set in_udp_accept {
                    type inet_service
                    flags interval
                    elements = { 6881-6887, 6889, 6999 }
            }
            chain input {
                    …
                    udp dport @in_udp_accept ct state new accept
                    …
            }
            …
    }
    
  • Les variables nft_set ou nft_set_host peuvent également être utilisées.
  • Les variables nft_input_rules ou nft_input_host_rules peuvent également être utilisées.
  • Le poids (200) permet d'ordonner toutes les règles fusionnées (des dictionnaires nft_input_*rules).
  • Le texte suivant le poids (input udp accepté) est une petite description qui sera ajoutée en tant que commentaire dans le fichier nft_input_conf_path sur l'hôte distant.
Remplacer une règle par défaut avec 2 nouvelles règles (cliquez pour développer)
- hôtes: serverXYZ
  vars:
      nft_input_host_rules:
        050 icmp:
          - ip protocol icmp  ip saddr != 192.168.0.0/24  counter  drop
          - ip protocol icmp  icmp type echo-request  ip length <= 84  counter  limit rate 10/minute  accept
  rôles:
    - rôle: ipr-cnrs.nftables
  1. Obtenez la description de la règle depuis le fichier defaults/main.yml (par exemple 050 icmp).
  2. Rejetez toute demande ICMP qui ne provient pas du réseau 192.168.0.0.
  3. Assurez-vous que la requête est inférieure ou égale à 84 octets et définissez une limite à 10 requêtes par minute.
  • Les variables nft_input_rules ou nft_input_group_rules peuvent aussi être utilisées.
  • Le poids (050) permet d'ordonner toutes les règles fusionnées (des dictionnaires nft_input_*rules).
  • Le texte suivant le poids (icmp) est une petite description qui sera ajoutée en tant que commentaire dans le fichier nft_input_conf_path sur l'hôte distant.
Remplacer certaines des ensembles définis par défaut (cliquez pour développer)
- hôtes: serverXYZ
  vars:
    - nft_define:
      input tcp accepté:
        desc: Port SSH personnalisé et torrent
        name: in_tcp_accept
        value: '{ 2201, 6881 }'
  rôles:
    - rôle: ipr-cnrs.nftables
  1. Obtenez le nom de l'élément (par exemple input tcp accepté) et le nom de la variable (par exemple in_tcp_accept) depuis le fichier defaults/main.yml.
  2. Définissez une nouvelle valeur (par exemple '{ 2201, 6881 }').
  3. Vous pouvez ajouter un attribut desc qui sera défini comme un commentaire dans le fichier nft_input_conf_path sur l'hôte distant.
  • Les variables nft_define_group ou nft_define_host peuvent aussi être utilisées.
Remplacer toutes les règles par défaut (par exemple pour le trafic sortant) (cliquez pour développer)

Si les règles par défaut sont trop permissives, si vous avez déjà remplacé la plupart d'entre elles,… Dans certains cas, il est peut-être intéressant de redéfinir la variable par défaut :

- hôtes: serverXYZ
  vars:
      nft_output_default_rules:
        000 politique:
          - type filter hook output priority 0; policy drop;
        005 état gestion:
          - ct state established,related accept
          - ct state invalid drop
        015 localhost:
          - oif lo accept
        050 ma règle pour XXX hôtes et services:
          - tcp dport 2000  ip saddr { xxx.xxx.xxx.xxx, yyy.yyy.yyy.yyy }  ct state new  accept
        250 reset-ssh:  # permettre à l'hôte de réinitialiser les connexions SSH pour éviter un délai de 10 minutes à partir du contrôleur Ansible
          - tcp sport ssh tcp flags { rst, psh | ack } counter accept
  rôles:
    - rôle: ipr-cnrs.nftables
  • N'oubliez pas au moins de :
    1. définir une politique par défaut.
    2. gérer déjà l'état établi.
    3. accepter les drapeaux rst, psh | ack pour ssh afin d'éviter un délai de 10 minutes lors de la première exécution de ce rôle Nftables (voir #1).
  • Ensuite, ajoutez vos propres règles avec le poids souhaité pour ordonner toutes les règles fusionnées (des dictionnaires nft_output_*rules) et les descriptions.
Supprimer une règle par défaut (cliquez pour développer)
- hôtes: serverXYZ
  vars:
      nft_output_host_rules:
        210 output tcp accepté:
          -
  rôles:
    - rôle: ipr-cnrs.nftables
  1. Obtenez la description de la règle depuis le fichier defaults/main.yml (210 output tcp accepté).
  2. La politique par défaut pour le trafic sortant (drop) sera maintenant appliquée aux ports définis dans la variable out_tcp_accept. Assurez-vous de ce que vous faites.
  3. La règle ne sera plus présente dans le résultat de nft list ruleset, seul un commentaire restera (210 output tcp accepté) dans le fichier nft_output_conf_path sur l'hôte distant.
  • Les variables nft_output_rules ou nft_output_group_rules peuvent aussi être utilisées.
  • Le poids (210) permet d'ordonner toutes les règles fusionnées (des dictionnaires nft_output_*rules).

Avec group_vars et host_vars

Utiliser les règles par défaut et autoriser, pour first_group, le ICMP entrant et compter à la fois les paquets ICMP et les paquets de politique par défaut (drop) (cliquez pour développer)

group_vars/first_group :

nft_input_group_rules:
  020 icmp:
    - ip protocol icmp icmp type echo-request ip length <= 84 counter limit rate 1/minute accept
  999 count policy packet:
    - counter
Utiliser des règles de groupe fusionnées à partir de plusieurs groupes ansible (cliquez pour développer)
  1. Activez la fusion des variables de groupe :
    - hôtes: serverXYZ
      vars:
        nft_merged_groups: true
        nft_merged_groups_dir: vars/
      rôles:
        - rôle: ipr-cnrs.nftables
    
  2. Mettez d'autres règles dans le dossier "vars" nommé après vos groupes ansible pour serverXYZ :
    • vars/first_group :
      nft_input_group_rules:
        020 icmp:
          - ip protocol icmp icmp type echo-request ip length <= 84 counter limit rate 1/minute accept
        999 count policy packet:
          - counter
      
    • vars/second_group :
      nft_input_group_rules:
        021 LAN:
          - iif eth0 accept
      
  3. Ces ensembles de règles, provenant des deux groupes, seront fusionnés si l'hôte est membre de ces groupes.

Configuration

Ce rôle va :

  • Installer nftables sur le système.
  • Activer le service nftables par défaut au démarrage.
  • Générer un fichier de configuration par défaut qui inclut tous les fichiers suivants et est chargé par l'unité systemd.
  • Générer des fichiers de règles d'entrée et de sortie inclus appelés par le fichier de configuration principal.
  • Générer des variables dans un fichier et des ensembles et cartes dans un autre fichier.
  • Assurer que nftables est démarré et activé au démarrage.
  • (re)démarrer le service nftables lors de la première exécution ou lorsque les unités systemd sont modifiées.
  • Recharger le service nftables lors des prochaines exécutions pour éviter de laisser l'hôte sans règles de pare-feu en raison d'une syntaxe invalide.

Intégration avec Fail2ban

Avant Debian Bullseye, l'unité systemd pour Fail2ban ne proposait pas une intégration décente avec Nftables. Ce rôle créera un fichier de substitution pour l'unité fail2ban, sauf si nft_fail2ban_service_override est défini sur false. Par défaut, il est ajouté même s'il n'est pas (encore) disponible sur l'hôte. Cela garantit :

  • L'unité fail2ban est démarrée après l'unité nftables.
  • L'unité fail2ban est redémarrée lorsque l'unité nftables redémarre.

Développement

Ce code source provient de notre instance Gitea et le repo Github existe juste pour pouvoir envoyer le rôle à Ansible Galaxy…

Mais n'hésitez pas à signaler des problèmes/PR ici :)

Merci à ce hook, GitHub obtient automatiquement des mises à jour de notre instance Gitea :)

Licence

WTFPL

Informations sur l'Auteur

Jérémy Gardais

  • IPR (Institut de Physique de Rennes)
À propos du projet

Manage Nftables rules and packages

Installer
ansible-galaxy install ipr-cnrs.nftables
Licence
Unknown
Téléchargements
99.3k
Propriétaire
Institut de Physique de Rennes https://ipr.univ-rennes1.fr/ Tutelles CNRS et Université Rennes 1