Minimal Firewalls: awall & nftables (Artikel 226)
Absicherung von minimalistischen Systemen ohne schwere Frameworks. Erfahren Sie alles über awall unter Alpine und die Konfiguration von rohen nftables-Regelsätzen.
# Minimal Firewalls: Sicherheit ohne Ballast
TL;DR / Management Summary In minimalistischen Umgebungen (Alpine, Arch Minimal) sind Frameworks wie firewalld zu groß. Wir setzen auf nftables, den modernen Kernel-Nachfolger von iptables, und unter Alpine auf awall (Alpine Wall). awall erlaubt eine deklarative Konfiguration via JSON/YAML und generiert daraus hochperformante nftables-Regeln. Das Ziel: Ein “Zero-Trust” Netzwerk-Setup mit weniger als 1MB Speicherbedarf.
# 1. Einführung & Architektur
Warum nftables?
nftables vereint IPv4, IPv6, ARP und Bridges in einem einzigen Framework. Es nutzt eine Bytecode-VM im Kernel, was die Regelverarbeitung massiv beschleunigt.
# Der Security-Flow (Mermaid)
graph TD
A[Incoming Packet] --> B{Kernel: nftables VM}
B -->|Check Policy| C{Match found?}
C -->|No| D[Default Action: DROP]
C -->|Yes| E[Action: ACCEPT / REJECT / LOG]
subgraph "Management Layer"
F[awall: YAML Config] -->|Generates| G[nftables ruleset]
H[nft CLI] -->|Manual| G
end
G --> B
# 2. Alpine Wall (awall)
Deklarative Sicherheit.
# Installation
apk add awall
# Konfiguration (/etc/awall/base.json)
awall nutzt Gruppen und Policys. Ein minimales Setup:
{
"description": "Base protection",
"zone": { "internet": { "iface": "eth0" } },
"policy": [
{ "in": "internet", "action": "drop" },
{ "out": "internet", "action": "accept" }
],
"service": {
"ssh": [ { "proto": "tcp", "port": 22 } ]
},
"filter": [
{ "in": "internet", "service": "ssh", "action": "accept" }
]
}
# Aktivierung
awall enable base
awall activate
# 3. Raw nftables (Arch / Alpine)
Das Skalpell des Admins.
Wenn Sie kein awall nutzen, schreiben Sie Regeln direkt für den nft Befehl.
# Beispiel: /etc/nftables.conf
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
# Erlaube bestehende Verbindungen (Stateful)
ct state established,related accept
# Loopback erlauben
iif lo accept
# SSH erlauben
tcp dport 22 accept
}
}
Laden mit: nft -f /etc/nftables.conf.
# 4. Day-2 Operations: Logging & Monitoring
Wer klopft an?
# Logging in nftables
Fügen Sie einer Regel das Keyword log hinzu:
tcp dport 22 log prefix "SSH_ACCESS: " accept
Die Logs landen in /var/log/messages (Alpine) oder im Journal (Arch).
# 5. Troubleshooting & “War Stories”
Wenn die Firewall zu gut schützt.
# Story 1: “Der hängende Docker-Container”
Symptom: Nach dem Aktivieren von awall haben Docker-Container keinen Internetzugriff mehr.
Ursache: Docker manipuliert iptables Regeln direkt. nftables und iptables können gleichzeitig laufen, aber die drop Policy von nftables gewinnt oft.
Lösung: Nutzen Sie die docker Policy in awall oder erlauben Sie IP-Forwarding und Masquerading explizit in nftables.
# Story 2: “Das IPv6-Loch”
Symptom: Die IPv4 Firewall ist perfekt, aber der Server wird über IPv6 angegriffen.
Ursache: Alte Iptables-Skripte haben oft nur IPv4 gefiltert (iptables vs ip6tables).
Lösung: Nutzen Sie den nftables-Adressfamilien-Typ inet. Dieser filtert automatisch beide Protokolle mit einer einzigen Regel.
# 6. Fazit & Empfehlung
- Wahl: Nutzen Sie awall unter Alpine. Es ist die sauberste Methode, um Regeln lesbar zu halten.
- Wahl: Nutzen Sie rohes nftables unter Arch. Es gibt kein besseres Tool für präzise Filterung.
- Sicherheit: Testen Sie Ihre Regeln immer mit
nmapvon einem externen System aus. “Deny by Default” ist keine Empfehlung, sondern eine Pflicht.
# Anhang: Cheatsheet
| Aufgabe | awall Befehl | nft Befehl |
|---|---|---|
| Status prüfen | awall list |
nft list ruleset |
| Regeln anwenden | awall activate |
nft -f <file> |
| Alles löschen | awall flush |
nft flush ruleset |
| Port öffnen | In JSON eintragen | nft add rule ... tcp dport 80 accept |
| Logs sehen | logread -f |
`dmesg |
| Hilfe | man awall |
man nft |