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.