Frzk.nftables

Rôle Ansible : nftables

Statut de construction

Ce rôle Ansible vous permet d'installer nftables et de gérer sa configuration.

Pour plus d'informations sur nftables, veuillez consulter la page officielle du projet.

Variables du rôle

Les variables et propriétés en gras sont obligatoires. Les autres sont optionnelles.

Nom de la variable Description Valeur par défaut
nftables_flush_ruleset Si nous devons vider le jeu de règles actuel ou non. oui
nftables_config_file Chemin vers le fichier de configuration. /etc/nftables.conf
nftables_tables Une liste de table. []

propriétés de table

Nom de propriété Description Valeur par défaut
name Nom de la table.
family Famille d'adresses de la table. Si spécifié, doit être ip, ip6, inet, arp, bridge ou netdev. ip
sets Une liste de set.
maps Une liste de map.
verdict_maps Une liste de verdict_map.
chains Une liste de chain.

Documentation

propriétés de set

Nom de propriété Description
name Nom du set.
type Type des éléments contenus dans le set. Doit être soit ipv4_addr, ipv6_addr, ether_addr, inet_service, inet_proto, icmp_type, icmpv6_type ou mark.
size Nombre d'éléments que le set peut contenir.
policy Politique de sélection du set. Si spécifiée, doit être soit performance soit memory.
timeout Durée pendant laquelle les éléments restent dans le set.
flags Une liste de flags. Si spécifiée, doit contenir au moins un des suivants : constant, interval, timeout.
gc_interval Intervalle de collecte des ordures.
elements Une liste d'éléments contenus dans le set. Les éléments doivent être conformes au type du set.

Documentation

propriétés de map

Nom de propriété Description
name Nom de la map.
keys_type Type des clés. Doit être soit ipv4_addr, ipv6_addr, ether_addr, inet_service, inet_proto, icmp_type, icmpv6_type ou mark.
values_type Type des valeurs. Doit être soit ipv4_addr, ipv6_addr, ether_addr, inet_service, inet_proto, mark, counter ou quota.
elements Une liste d'éléments contenus dans la map. Les éléments doivent être conformes aux types de clés et de valeurs de la map.

Documentation

propriétés d'éléments de map

Nom de propriété Description
key Valeur de la clé.
value Valeur associée à la clé.

propriétés de verdict_map

Un verdict_map est simplement un cas particulier de map où le values_type est toujours verdict. Ainsi, il n'y a pas de propriété values_type. De plus, les éléments contenus dans un verdict_map ont une propriété verdict au lieu de la propriété value.

Nom de propriété Description
name Nom de la map.
keys_type Type des clés. Doit être soit ipv4_addr, ipv6_addr, ether_addr, inet_service, inet_proto, icmp_type, icmpv6_type ou mark.
elements Une liste d'éléments contenus dans le verdict map.

propriétés d'éléments de verdict_map

Nom de propriété Description
key Valeur de la clé.
verdict Verdict associé à la clé.

propriétés de chain

Nom de propriété Description
name Nom de la chaîne.
base Règle de base pour la chaîne.
rules Liste de règles contenues dans la chaîne.

Documentation

propriétés de base

Nom de propriété Description
type Type de la chaîne. Doit être soit filter, nat ou route.
hook Crochet où la chaîne est attachée. Les valeurs disponibles dépendent du type.
priority Entier déterminant l'ordre des chaînes attachées au même hook.
policy Politique par défaut pour la chaîne. Si spécifiée, doit être soit accept soit drop.

Documentation

propriétés de règle

Documentation

Nom de propriété Description
position Entier déterminant l'ordre des règles dans la chaîne.
statement Énoncé de règle.
comment Un commentaire décrivant la règle.

Exemple

Voici un petit exemple de ce à quoi votre fichier devrait ressembler.

IMPORTANT : NE pas utiliser cela comme votre pare-feu !

---
nftables_flush_ruleset: oui
nftables_config_path: /etc/nftables.rules
nftables_tables:
  - name: firewall
    family: inet

    sets:
      - name: "set1"
        type: 
        size: 10
        policy: "performance"
        timeout: "1d"
        flags:
          - "timeout"
          - "interval"
        gc_interval: "12h" 
        elements:
          - 192.0.2.1
          - 192.0.2.2

    maps:
      - name: "map1"
        keys_type: "inet_service"
        values_type: "ipv4_addr"
        elements:
          - key: ssh
            value: "192.0.2.10"
      - name: "map2"
        keys_type: "inet_service"
        values_type: "ipv4_addr"
        elements:
          - key: ftp
            value: "192.0.2.25"

    verdict_maps:
      - name: "vmap1"
        keys_type: "inet_service"
        elements:
          - key: "192.0.2.10"
            value: "accept"

    chains:
      - name: "Mon filtre d'entrée"
        base:
          type: "filter"
          hook: "input"
          priority: 0
          policy: "drop"
        rules:
          - position: 2
            statement: "ct state invalid log prefix 'Invalid_IN: ' drop"
            comment: "Journaliser et supprimer les paquets invalides."
          - position: 1
            statement: "iif lo accept"
          - position: 3
            statement: "ct state {established,related} accept"

      - name: "Mon filtre de sortie"
        base:
          type: "filter"
          hook: "output"
          priority: -10
          policy: "accept"
        rules:
          - position: 1
            statement: "ip daddr 192.0.2.100 counter"
...

Tests

Les tests impliquent les étapes suivantes :

  1. Vérifier la syntaxe du rôle
  2. Effectuer un premier essai
  3. Effectuer un deuxième essai et vérifier l'idempotence.

Sur les systèmes d'exploitation suivants :

  • Debian 9
  • CentOS 7
  • Ubuntu 18.04

Contribuer

Les revues de code, les correctifs, les commentaires, les rapports de bogues et les demandes de fonctionnalité sont les bienvenus. Veuillez lire le Guide de contribution pour plus de détails.

À propos du projet

Install and manage nftables.

Installer
ansible-galaxy install Frzk.nftables
Licence
apache-2.0
Téléchargements
136
Propriétaire