pimvh.nftables

Molekül-Test

Anforderungen

  1. Ansible installieren:
sudo apt install python3
python3 -m ensurepip --upgrade
pip3 install ansible

Erforderliche Variablen

Überprüfen Sie die Variablen wie in den Standardwerten angegeben.

Sie können eine Firewall-Definition zu den Variablen für Ihren Host (../host_vars/[host_name].yaml), eine Gruppe von Hosts (../group_vars/[group_name].yaml) mit der folgenden Struktur hinzufügen (siehe molecule.default.vars/test.yaml für ein Beispiel):

# Diese Variable verweist auf die Regeln, die auf den Remote-Host übertragen werden
# es ist ein Dictionary von Tabellen, mit Ketten, mit Regeln, siehe molecule/default/vars/test.yaml
nftables_ruleset:
  # Die Schlüssel hiervon werden zu Tabellen
  # sie müssen sein:
  # Firewall-Familie und Name, z.B. "
  "inet firewall":

    # Beschreibung der Tabelle
    comment: "Firewall des Geräts"

    chains:

      # Name der jeweiligen Kette
      input:
        # Name der Variable von nftables_rules,
        # die Sie in dieser Kette einfügen möchten
        - input_hook
        - valid_connections
        - ...

  # Eine weitere Tabelle mit der gleichen Struktur
  # Gültige Familien sind Dinge wie inet, inet6, netdev, und inet,
  # siehe nftables-Dokumentation für die vollständige Referenz
  "inet foo":

# Die potenziellen Regeln sind unter `nftables_rules` definiert
# Jede Regel hat zwei Attribute:
# -> def: die Definition der Regeln oder Regelsets in gültiger nftables-Syntax
# -> depends_on: optionale Liste von Abhängigkeiten von Variablen aus nftables_variables
# siehe molecule/default/vars/test.yaml für ein Beispiel

nftables_rules:
  input_hook: >
    type filter hook input priority 0; policy drop;
  valid_connections:
    def: |
        ct state established, related accept
        ct state invalid drop

  new_connections:
    def: |
        ct state new accept


# Dies sind die Variablendefinitionen, die mit depends_on enthalten sind
# Stellen Sie sicher, dass die Schlüssel übereinstimmen
# siehe molecule/default/vars/test.yaml für ein Beispiel
nftables_variables:

  tcp_ports:
    comment: Konfiguration der TCP-Ports
    def: |
      {% if nftables_open_tcp_ports_global %}define OPEN_TCP_PORTS = { {{ nftables_open_tcp_ports_global | join(",") }} }{% endif +%}
      {% if nftables_open_tcp_ports_local %}define LOCAL_OPEN_TCP_PORTS = { {{ nftables_open_tcp_ports_local | join(",") }} }{% endif +%}
      {% if nftables_open_tcp_ports_vpn %}define VPN_TCP_PORTS = { {{ nftables_open_tcp_ports_vpn | join(",") }} }{% endif +%}

  ...

Das Ansible-Playbook überprüft, ob die richtigen Variablen an die Rolle übergeben werden, indem es ein argument_spec verwendet.

Beispiel-Playbook

Minimal (vorausgesetzt, Sie haben die Variablen woanders übergeben):

hosts:
  - foo
roles:
  - pimvh.nftables

Zusammenfassung - Was passiert, wenn ich das ausführe

  • Überprüfen, ob Regeln/andre Variablen definiert sind
  • nftables und das Python-Interface installieren
  • Erforderliche nftables-Tabellen erstellen
  • Dynamische Tabellen als leere Tabellen erstellen
  • Eine leere Blockliste erstellen
  • Eine nftables-Vorlage in das nftables-Verzeichnis kopieren
  • Die nftables-Diensteinheit bearbeiten, um auf unsere neue Hauptdatei zu zeigen
  • Ein Skript erstellen, um die Firewall neu zu laden, das Tabellen außerhalb unserer Kontrolle in Dateien ablegt und die Firewall danach neu lädt
  • Wenn nftables_abuseip_api_key definiert ist, ein Skript hinzufügen, um die Blockliste über deren API abzurufen, und dies als systemd-Dienst einrichten
  • nftable-Dienst nach Bedarf aktivieren
  • iptables nach Bedarf deinstallieren

Zukünftige Verbesserungen

  • Die Struktur der Regeln, die übergeben werden müssen, vereinfachen
  • Die argument_specs für nftables_variables und nftables_ruleset verbessern
Über das Projekt

role to configure nftables using a YAML file

Installieren
ansible-galaxy install pimvh.nftables
GitHub Repository
Lizenz
gpl-3.0
Downloads
110