
Weboberfläche für die nftables-Firewall unter Linux, geschrieben in Go. Das Anwenden macht sich nach 120 Sekunden selbst rückgängig, sofern du es nicht bestätigst — du kannst dich also nicht aussperren. Debian- & Docker-Installation.
Deine Firewall. Deine Regeln. Keine Überraschungen.
Live-Demo · Dokumentation · Changelog
nftables über eine Weboberfläche, die dich nicht aussperren kann: Jede Anwendung macht sich selbst rückgängig, solange du sie nicht bestätigst.
Eine Regel zu bearbeiten ändert nichts. Sie anzuwenden ändert alles — für 120 Sekunden. Wenn die neuen Regeln deine Verbindung kappen, kannst du nicht auf Bestätigen klicken, und nicht zu bestätigen ist genau das, was die alten Regeln zurückbringt.
Zwei Prozesse. Der eine, der dem Netzwerk ausgesetzt ist, hält keine Privilegien, die es sich zu stehlen lohnt.
Eine vollständige Neufassung des ursprünglichen easywall — Python, Flask, iptables
über subprocess — das 2022 nach einer CVE archiviert wurde. Beide Ursachen sind
beseitigt: Die Privilegien liegen in einem anderen Prozess, und der Anwendungspfad
baut Go-Strukturen statt einer Kommandozeile. So funktioniert es →
# Debian / Ubuntu — amd64 und arm64
ARCH=$(dpkg --print-architecture)
wget https://github.com/jp1337/easywall/releases/latest/download/easywall_$ARCH.deb
sudo dpkg -i easywall_$ARCH.deb && sudo apt-get install -f
# Docker
git clone https://github.com/jp1337/easywall.git && cd easywall && docker compose up -d
# Aus dem Quellcode — Go 1.27+, nftables
git clone https://github.com/jp1337/easywall.git && cd easywall
make build && sudo make install
sudo systemctl enable --now easywall-core easywall-web
Öffne dann https://localhost:12227. Der erste Besuch
richtet das Konto ein und merkt die ersten Regeln vor.
| Ports | TCP und UDP, einzeln oder als Bereich, mit SSH-Brute-Force-Routing pro Regel |
| Blocklist & Allowlist | IPv4, IPv6 und CIDR, ausgewertet vor jeder Portregel |
| Schutzmodule | Zwölf, fünf standardmäßig aktiv — Floods, Scans, Bogons, Fragmente, Broadcast/Multicast/Anycast |
| Portweiterleitung | NAT-Redirects mit Protokollauswahl |
| Benutzerdefinierte Regeln | Rohes nftables, vor der Anwendung auf Syntax geprüft |
| Export / Import | Der gesamte Regelsatz als JSON |
| Audit-Log | Was sich wann geändert hat, ein JSON-Objekt pro Zeile |
| Docker-Koexistenz | Besitzt table inet easywall, berührt nichts anderes |
| Englisch, Deutsch, Französisch | In der Oberfläche umschaltbar, auch vor der Anmeldung. Eine Sprache darf unvollständig sein: Fehlendes wird auf Englisch dargestellt, und die Lücke wird gemeldet statt verborgen |
| Hell & dunkel | Folgt dem Betriebssystem, mit manuellem Umschalter; beide auf Kontrast geprüft |
| Go 1.27, einzelnes Binary | go-chi/chi · html/template |
nftables über google/nftables | direktes netlink, kein nft-Subprozess |
| Argon2id | golang.org/x/crypto, 16-Byte-Salt pro Passwort |
| CSRF | net/http.CrossOriginProtection, Go 1.25 nativ |
| Designsystem | DESIGN.md + Tailwind v4 — keine UI-Bibliothek von Drittanbietern |
| Schriften | Inter + JetBrains Mono, selbst gehostet, ~145 KB — funktioniert air-gapped |
| CI | govulncheck, gosec, CodeQL, -race und eine Integrationssuite gegen einen echten Kernel |