pimvh.nftables
Anforderungen
- 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
undnftables_ruleset
verbessern
Installieren
ansible-galaxy install pimvh.nftables
Lizenz
gpl-3.0
Downloads
110
Besitzer