linux-arch-alpine-minimal security firewall awall nftables alpine minimalism

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 nmap von 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