Frzk.nftables

Ansible-Rolle: nftables

Build-Status

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:

  1. Überprüfen der Rollensyntax
  2. Einen ersten Lauf durchführen
  3. 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.

Über das Projekt

Install and manage nftables.

Installieren
ansible-galaxy install Frzk.nftables
Lizenz
apache-2.0
Downloads
136
Besitzer