Ansible-Rolle: nftables

Diese Ansible-Rolle erlaubt es, nftables zu installieren und seine Konfiguration zu verwalten.
Für weitere Informationen zu nftables, siehe die offizielle Projektseite.
Rollenvariablen
Variablen und Eigenschaften in fett sind Pflicht. Andere sind optional.
| Variablenname |
Beschreibung |
Standardwert |
nftables_flush_ruleset |
Ob wir das aktuelle Regelset leeren sollen oder nicht. |
ja |
nftables_config_file |
Pfad zur Konfigurationsdatei. |
/etc/nftables.conf |
nftables_tables |
Eine Liste von Tabellen. |
[] |
Tabelleneigenschaften
| Eigenschaftsname |
Beschreibung |
Standardwert |
name |
Name der Tabelle. |
|
family |
Adressfamilie der Tabelle. Wenn angegeben, muss es ip, ip6, inet, arp, bridge oder netdev sein. |
ip |
sets |
Eine Liste von Mengen. |
|
maps |
Eine Liste von Karten. |
|
verdict_maps |
Eine Liste von Urteils-Karten. |
|
chains |
Eine Liste von Ketten. |
|
Dokumentation
Mengeneigenschaften
| Eigenschaftsname |
Beschreibung |
name |
Name der Menge. |
type |
Typ der Elemente, die in der Menge enthalten sind. Muss ipv4_addr, ipv6_addr, ether_addr, inet_service, inet_proto, icmp_type, icmpv6_type oder mark sein. |
size |
Anzahl der Elemente, die die Menge enthalten kann. |
policy |
Die Auswahlrichtlinie der Menge. Wenn angegeben, muss sie performance oder memory sein. |
timeout |
Wie lange die Elemente in der Menge bleiben. |
flags |
Eine Liste von Flags. Wenn angegeben, muss sie mindestens eines der folgenden enthalten: constant, interval, timeout. |
gc_interval |
Intervall für die Müllabfuhr. |
elements |
Eine Liste von Elementen, die in der Menge enthalten sind. Elemente müssen dem Typ der Menge entsprechen. |
Dokumentation
Karteieigenschaften
| Eigenschaftsname |
Beschreibung |
name |
Name der Karte. |
keys_type |
Typ der Schlüssel. Muss ipv4_addr, ipv6_addr, ether_addr, inet_service, inet_proto, icmp_type, icmpv6_type oder mark sein. |
values_type |
Typ der Werte. Muss ipv4_addr, ipv6_addr, ether_addr, inet_service, inet_proto, mark, counter oder quota sein. |
elements |
Eine Liste von Elementen, die in der Karte enthalten sind. Elemente müssen dem Typ der Schlüssel und Werte entsprechen. |
Dokumentation
Karte Element Eigenschaften
| Eigenschaftsname |
Beschreibung |
key |
Schlüsselwert. |
value |
Wert, der mit dem Schlüssel verknüpft ist. |
Urteilskarten Eigenschaften
Eine verdict_map ist einfach ein spezieller Fall einer map, bei dem der Typ der Werte immer verdict ist. Daher gibt es keine values_type-Eigenschaft. Außerdem haben die in einer verdict_map enthaltenen Elemente eine verdict-Eigenschaft anstelle der value-Eigenschaft.
| Eigenschaftsname |
Beschreibung |
name |
Name der Karte. |
keys_type |
Typ der Schlüssel. Muss entweder ipv4_addr, ipv6_addr, ether_addr, inet_service, inet_proto, icmp_type, icmpv6_type oder mark sein. |
elements |
Eine Liste von Elementen, die in der Urteils-Karte enthalten sind. |
Urteilskarte Element Eigenschaften
| Eigenschaftsname |
Beschreibung |
key |
Schlüsselwert. |
verdict |
Urteil, das mit dem Schlüssel verknüpft ist. |
Ketten Eigenschaften
| Eigenschaftsname |
Beschreibung |
name |
Name der Kette. |
base |
Basisregel für die Kette. |
rules |
Liste von Regeln, die in der Kette enthalten sind. |
Dokumentation
Basis Eigenschaften
| Eigenschaftsname |
Beschreibung |
type |
Der Typ der Kette. Muss filter, nat oder route sein. |
hook |
Hook, an den die Kette angehängt ist. Verfügbare Werte hängen vom type ab. |
priority |
Ganzzahl, die die Reihenfolge der an denselben hook angehängten Ketten bestimmt. |
policy |
Standardrichtlinie für die Kette. Wenn angegeben, muss sie accept oder drop sein. |
Dokumentation
Regel Eigenschaften
Dokumentation
| Eigenschaftsname |
Beschreibung |
position |
Ganzzahl, die die Reihenfolge der Regeln in der Kette bestimmt. |
statement |
Regel-Aussage. |
comment |
Ein Kommentar, der die Regel beschreibt. |
Beispiel
Hier ist ein kleines Beispiel, wie Ihre Datei aussehen sollte.
WICHTIG: VERWENDEN Sie dies NICHT als Ihre Firewall!
---
nftables_flush_ruleset: ja
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: "Mein Eingangsfilter"
base:
type: "filter"
hook: "input"
priority: 0
policy: "drop"
rules:
- position: 2
statement: "ct state invalid log prefix 'Invalid_IN: ' drop"
comment: "Logge und verwerfe ungültige Pakete."
- position: 1
statement: "iif lo accept"
- position: 3
statement: "ct state {established,related} accept"
- name: "Mein Ausgangsfilter"
base:
type: "filter"
hook: "output"
priority: -10
policy: "accept"
rules:
- position: 1
statement: "ip daddr 192.0.2.100 counter"
...
Testen
Das Testen umfasst die folgenden Schritte:
- Überprüfen der Rollensyntax
- Einen ersten Lauf durchführen
- Einen zweiten Lauf durchführen und auf Idempotenz prüfen.
Auf den folgenden Betriebssystemen:
- Debian 9
- CentOS 7
- Ubuntu 18.04
Mitwirken
Code-Überprüfungen, Patches, Kommentare, Fehlerberichte und Feature-Anfragen sind willkommen. Bitte lesen Sie den Mitwirkungsleitfaden für weitere Details.