
easywall v2.4.1
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.
easywall
Deine Firewall. Deine Regeln. Keine Überraschungen.
Live-Demo · Dokumentation · Changelog
nftables über eine Weboberfläche, die dich nicht aussperren kann: Jedes Anwenden macht sich selbst rückgängig, wenn du es nicht bestätigst.
Die Idee
Das Bearbeiten einer Regel ändert nichts. Das Anwenden ä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 das, was die alten Regeln zurückbringt.
Architektur
Zwei Prozesse. Der dem Netzwerk ausgesetzte Prozess besitzt kein Privileg, das sich zu stehlen lohnt.
Eine vollständige Neuentwicklung des ursprünglichen easywall — Python, Flask, iptables per Subprozess — das 2022 nach einer CVE archiviert wurde. Beide Grundursachen sind beseitigt: Die Privilegien leben in einem anderen Prozess, und der Apply-Pfad erzeugt Go-Strukturen anstelle einer Befehlszeile. So funktioniert es →
Installation
# Debian / Ubuntu — amd64 and 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
# From source — Go 1.26+, 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. Beim ersten Besuch werden das Konto eingerichtet und die ersten Regeln bereitgestellt.
Was du bekommst
| Ports | TCP und UDP, einzeln oder als Bereich, mit SSH-Brute-Force-Routing pro Regel |
| Blacklist & Whitelist | IPv4, IPv6 und CIDR, ausgewertet vor jeder Port-Regel |
| Schutzmodule | Zwölf, fünf standardmäßig aktiviert — Floods, Scans, Bogons, Fragmente, Broadcast/Multicast/Anycast |
| Portweiterleitung | NAT-Umleitungen mit Protokollauswahl |
| Benutzerdefinierte Regeln | Rohes nftables, vor dem Anwenden syntaxgeprüft |
| Export / Import | Die gesamte Regelsammlung als JSON |
| Audit-Log | Was sich wann geändert hat, ein JSON-Objekt pro Zeile |
| Docker-Koexistenz | Besitzt table inet easywall, fasst nichts anderes an |
| Englisch & Deutsch | Im Interface umschaltbar, auch vor der Anmeldung |
| Hell & Dunkel | Folgt dem Betriebssystem, mit manuellem Umschalter; beide kontrastgeprüft |
Erstellt mit
| Go 1.26, einzelne Binärdatei | go-chi/chi · html/template |
nftables über google/nftables | direktes Netlink, kein nft-Subprozess |
| Argon2id | golang.org/x/crypto, 16-Byte-Salz 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 auch ohne Internetanbindung |
| CI | govulncheck, gosec, CodeQL, -race und eine Integrationstestsuite gegen einen echten Kernel |
Roadmap
Korrektheit zuerst: Eine Firewall, die stillschweigend weniger tut, als sie behauptet, ist schlimmer als eine, die weniger tut und es sagt.
| 2.6 | Integrationstests, die Bedeutung prüfen, nicht Regelanzahlen |
| 2.7 | Identität — ein Benutzer im Socket-Protokoll, dann Login-Ereignisse, dann mehrere Konten, dann 2FA |
| 2.8 | Eine REST-API mit Token-Authentifizierung, ACME als Option, optionaler vertrauenswürdiger Reverse-Proxy |
| 2.9 | Eine optionale Zählung von Installationen |
Warum jede Funktion zu diesem Zeitpunkt kommt und was die Zählung senden würde: Roadmap →
Hilfe bekommen
| Eine Frage oder etwas, das sich nicht richtig verhält | Discord |
| Ein Fehler oder eine gewünschte Funktion | GitHub Issues |
| Eine Sicherheitslücke | Security Advisory — nicht Discord und kein öffentliches Issue |
Mitwirken
Setup, Commit-Konventionen und die Review-Checkliste: CONTRIBUTING.md.
Alles Visuelle geht zuerst durch DESIGN.md.
Sicherheitsprobleme: nicht als öffentliches Issue — nutze GitHub Security Advisories.
Lizenz
GPL-3.0 — siehe LICENSE.