Rôle Ansible : nftables

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 :
- Vérifier la syntaxe du rôle
- Effectuer un premier essai
- 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.