你的防火墙。你的规则。没有意外。
通过一个不会将你锁在门外的 Web 界面管理 nftables:每次应用都会自动回滚,除非你确认它。
编辑规则不会改变任何东西。应用规则才会改变一切——持续 120 秒。 如果新规则切断了你的连接,你将无法点击“确认”,而不确认正是让旧规则恢复的方式。
两个进程。暴露在网络上的那个进程不持有任何值得窃取的权限。
这是对原始 easywall 的完全重写——原版基于 Python、Flask,通过子进程调用 iptables——该版本在 2022 年因一个 CVE 被归档。两个根本原因都已消除:特权位于不同的进程中,应用路径构建 Go 结构体而非命令行。工作原理 →
# Debian / Ubuntu — amd64 和 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
# 从源码构建 — 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
然后打开 https://localhost:12227。首次访问会
设置账户并暂存首批规则。
| 有疑问,或行为异常 | Discord |
| 发现 Bug,或想要的功能 | GitHub issues |
| 安全漏洞 | 安全公告 —— 通过 Discord,也不要提交公开 issue |
环境搭建、提交规范和审查清单:CONTRIBUTING.md。
任何视觉相关的内容都需先经过 DESIGN.md。
安全问题:不要作为公开 issue 提交——请使用 GitHub Security Advisories。
GPL-3.0——参见 LICENSE。
| 端口 | TCP 和 UDP,支持单个或范围,带按规则的 SSH 暴力破解路由 |
| 黑名单与白名单 | IPv4、IPv6 和 CIDR,在任何端口规则之前评估 |
| 防护模块 | 十二个,默认启用五个——洪水、扫描、bogon、分片、广播/组播/任播 |
| 端口转发 | 带协议选择的 NAT 重定向 |
| 自定义规则 | 原始 nftables,应用前进行语法检查 |
| 导出 / 导入 | 整个规则集以 JSON 形式导出 |
| 审计日志 | 记录何时更改了什么,每行一个 JSON 对象 |
| Docker 共存 | 仅拥有 table inet easywall,不触碰其他任何内容 |
| 英语、德语、法语 | 可在界面中切换,包括登录前。语言可能不完整:缺失部分以英语显示,且缺口会被报告而非隐藏 |
| 浅色与深色 | 跟随操作系统,带手动切换;两者均通过对比度检查 |
| Go 1.27,单一二进制 | go-chi/chi · html/template |
通过 google/nftables 管理 nftables | 直接 netlink,无 nft 子进程 |
| Argon2id | golang.org/x/crypto,每个密码 16 字节盐 |
| CSRF | net/http.CrossOriginProtection,Go 1.25 原生 |
| 设计系统 | DESIGN.md + Tailwind v4——无第三方 UI 库 |
| 字体 | Inter + JetBrains Mono,自托管,约 145 KB——支持离线环境 |
| CI | govulncheck、gosec、CodeQL、-race,以及针对真实内核的集成测试套件 |