jp1337/easywall

GitHub: jp1337/easywall

基于 Go 和 nftables 的 Linux 防火墙 Web 管理工具,采用双进程隔离架构,通过可视化界面简化防火墙配置并提供多种内置安全防护模块。

Stars: 3 | Forks: 0

easywall logo

# 🔥 easywall [![构建](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/253dc1eef8210810.svg)](https://github.com/jp1337/easywall/actions/workflows/test.yml) [![安全](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/597e5ff79f210811.svg)](https://github.com/jp1337/easywall/actions/workflows/security.yml) [![codecov](https://codecov.io/gh/jp1337/easywall/graph/badge.svg)](https://codecov.io/gh/jp1337/easywall) [![许可证: GPL v3](https://img.shields.io/badge/license-GPL--3.0-blue?logo=opensourceinitiative&logoColor=white)](https://www.gnu.org/licenses/gpl-3.0) [![Go](https://img.shields.io/badge/Go-1.25+-00ADD8?logo=go&logoColor=white)](https://go.dev) [![nftables](https://img.shields.io/badge/nftables-direct%20netlink-informational?logo=linux&logoColor=white)](https://netfilter.org/projects/nftables/) [![GitHub 赞助](https://img.shields.io/badge/sponsor-GitHub-ea4aaa?logo=github-sponsors&logoColor=white)](https://github.com/sponsors/jp1337) [![Ko-fi](https://img.shields.io/badge/support-Ko--fi-ff5e5b?logo=ko-fi&logoColor=white)](https://ko-fi.com/jpylypiw) [![PayPal](https://img.shields.io/badge/donate-PayPal-003087?logo=paypal&logoColor=white)](https://paypal.me/JPylypiw) **带有 Web 界面的 Linux 防火墙管理工具 —— 为 2026 年而打造。** 对原版 easywall(Python/Flask/iptables,在发生 CVE 后已归档)的完全重写。新架构:Go,通过直接 netlink 连接 nftables,双进程隔离,Argon2id 身份验证 —— 从根源上解决了安全问题。 📖 **文档:** [jp1337.github.io/easywall](https://jp1337.github.io/easywall) ## 🏗️ 架构 ``` Browser ──HTTPS──► easywall-web (user: easywall, unprivileged) │ Unix socket (mode 0660, group easywall) Typed JSON protocol │ easywall-core (root, CAP_NET_ADMIN only) │ nftables kernel (via direct netlink — no nft subprocess) ``` Web 进程**从不直接接触防火墙**。所有更改都通过类型化的 socket 协议传递给具有高权限的核心守护进程 —— 从结构上杜绝了 Web 进程的权限提升。 ## ✨ 功能特性 - **nftables 后端** — 通过 `google/nftables` 使用直接 netlink API,无子进程,无 shell,无注入风险 - **两步激活** — 应用规则,然后在可配置的时间窗口内通过 SSH 确认;超时自动回滚 - **Docker 共存** — 使用独立的 `inet easywall` 表,绝不触碰 Docker 的链;自动检测桥接网络 - **TCP/UDP 端口管理** — 支持为每条规则添加描述和配置 SSH 暴力破解路由 - **IP 黑名单与白名单** — 支持 IPv4/IPv6 CIDRs,在任何其他规则之前应用 - **端口转发** — 带有协议选择的 NAT 规则 - **自定义规则** — 原始 nftables 语法,在应用前进行验证 - **导出 / 导入** — 完整的 JSON 规则备份,可下载并重新上传 - **i18n** — 英语与德语,可通过 `locales/.json` 扩展 - **浅色 / 深色模式** — 跟随系统偏好,支持手动切换 ### 🛡️ 保护模块 | 模块 | 默认值 | 描述 | |---|---|---| | SSH 暴力破解 | ✅ 开启 | 限制每个源 IP 的连接数 | | ICMP 泛洪 | ✅ 开启 | 限制每个源 IP 的速率 | | SYN 泛洪 | ✅ 开启 | 限制新 TCP 连接的速率 | | 端口扫描 | ✅ 开启 | 丢弃 NULL、FIN、XMAS、SYN+FIN 探测包 | | 无效数据包 | ✅ 开启 | `ct state invalid` → DROP | | IP 分片 | 关闭 | 丢弃分片数据包 | | 伪造地址过滤 | 关闭 | 外部接口的 RFC-1918 地址 → DROP | | 连接数限制 | 关闭 | 限制每个源 IP 的最大并发连接数 | | TCP RST 泛洪 | 关闭 | 限制 RST 数据包的速率 | | 广播丢弃 | 关闭 | `pkttype broadcast` → DROP | | 多播丢弃 | 关闭 | `pkttype multicast` → DROP | ## 🛠️ 技术栈 | 组件 | 选择 | 备注 | |---|---|---| | **语言** | Go 1.25 | 单一二进制文件,无运行时依赖 | | **HTTP 路由** | `go-chi/chi/v5` | 轻量级,符合惯用法的中间件链 | | **模板** | `html/template` (标准库) | 自动转义 —— 从结构上防止 XSS | | **nftables** | `google/nftables` | 直接 netlink —— 无需 `nft` 子进程 | | **密码哈希** | `golang.org/x/crypto` Argon2id | 内存密集型,可抵御 GPU 破解 | | **会话** | `gorilla/sessions` | HMAC 签名 cookie,600 秒有效期 | | **CSRF** | `net/http.CrossOriginProtection` | Go 1.25 原生支持,无需表单令牌 | | **速率限制** | `golang.org/x/time/rate` | 令牌桶算法,针对每个 IP 应用于 `/login` | | **i18n** | `go-i18n/v2` | JSON 消息文件 | | **配置** | `BurntSushi/toml` + JSON Schema | 使用 `taplo.toml` 提供编辑器自动补全 | | **安全扫描** | `govulncheck` + `gosec` | CI 中的 CVE 扫描与安全代码检查 | ## 🚀 快速入门 ### Debian / Ubuntu ``` wget https://github.com/jp1337/easywall/releases/latest/download/easywall_amd64.deb sudo dpkg -i easywall_amd64.deb && sudo apt-get install -f xdg-open https://localhost:12227 ``` ### Docker ``` git clone https://github.com/jp1337/easywall.git cd easywall docker compose up -d xdg-open https://localhost:12227 ``` ### 手动安装(从源码) #### 1. 前置条件 - Linux 内核 ≥ 3.13 且支持 nftables (`apt install nftables`) - Go 1.25+ #### 2. 构建 ``` git clone https://github.com/jp1337/easywall.git cd easywall make build # 生成: bin/easywall-core bin/easywall-web ``` #### 3. 安装 ``` sudo make install sudo systemctl enable --now easywall-core easywall-web xdg-open https://localhost:12227 ``` 首次访问将打开**设置向导**以设定您的用户名和密码。 ## 📖 文档 完整文档请访问 **[jp1337.github.io/easywall](https://jp1337.github.io/easywall)** | 指南 | 描述 | |---|---| | [系统要求](https://jp1337.github.io/easywall/installation/requirements/) | 内核版本,发行版兼容性矩阵 | | [Debian / Ubuntu](https://jp1337.github.io/easywall/installation/debian/) | `.deb` 包安装 | | [Docker](https://jp1337.github.io/easywall/installation/docker/) | Docker Compose 设置,`network_mode: host` | | [手动安装](https://jp1337.github.io/easywall/installation/manual/) | 从源码构建 | | [配置说明](https://jp1337.github.io/easywall/configuration/) | 所有 TOML 键的说明,JSON Schema | | [防火墙过滤](https://jp1337.github.io/easywall/features/filters/) | 保护模块详情 | | [Docker 共存](https://jp1337.github.io/easywall/features/docker/) | easywall 和 Docker 如何协同工作 | | [导出与导入](https://jp1337.github.io/easywall/features/export-import/) | JSON 规则备份 | | [安全模型](https://jp1337.github.io/easywall/security/) | 双进程隔离,CVE 历史 | ## 🔐 安全性 easywall 采用了**分层安全策略** —— 每一层都能独立限制爆炸半径: | 威胁 | 缓解措施 | |---|---| | 规则/命令注入 | 直接 netlink API(无子进程,无字符串拼接)+ 类型化的 Go 结构体 | | 权限提升 | Web 进程以非特权用户 `easywall` 运行 —— 无 root 权限 | | 身份验证暴力破解 | 针对 `/login` 的速率限制(10 分钟内每个 IP 5 次请求),Argon2id | | CSRF | `net/http.CrossOriginProtection` (Go 1.25 原生) | | XSS | `html/template` 自动转义 + `Content-Security-Policy` 头 | | 会话劫持 | 仅限 HTTPS cookie,`SameSite=Lax` | | 锁定 | 两步激活与自动回滚 —— 错误规则不会导致您被永久锁定 | | 已知 CVE | CI 中运行 `govulncheck`(每周及每次 PR) | 请通过 [GitHub 安全公告](https://github.com/jp1337/easywall/security/advisories/new) 报告漏洞 —— 请勿作为公开 issue 发布。参见 [SECURITY.md](SECURITY.md)。 ## 📦 项目状态 | 阶段 | 状态 | 描述 | |---|---|---| | 阶段 1 — 基础 | ✅ 完成 | Go 模块,共享类型,IPC 协议,版本检查 | | 阶段 2 — 核心守护进程 | ✅ 完成 | nftables 后端,规则存储,验收,Docker 共存 | | 阶段 3 — Web 后端 | ✅ 完成 | chi 路由,Argon2id 身份验证,会话管理,所有处理程序 | | 阶段 4 — Web 前端 | ✅ 完成 | 模板,CSS 自定义属性,HTMX,浅色/深色模式 | | 阶段 5 — 部署 | ✅ 完成 | systemd 单元,Docker 多阶段构建,Debian 包 | | 阶段 6 — 文档 | ✅ 完成 | MkDocs Material,GitHub Pages,自定义主题 | | 阶段 7 — CI/CD | ✅ 完成 | 测试、安全、构建、发布、文档工作流 | ### 路线图 | 功能 | 备注 | |---|---| | 2FA / TOTP | Web UI 的双重身份验证 | | Let's Encrypt ACME | 无需反向代理的自动 TLS 证书 | | GeoIP 屏蔽 | 基于国家/地区的规则(需要 GeoIP 数据库) | | REST API | 用于 Ansible 和自动化集成 | ## 📜 许可证 GPL-3.0 — 详见 [LICENSE](LICENSE)。 *这是一次旨在从根源上解决问题的重写,而非仅仅治标。*
标签:Argon2id, Awesome, EVTX分析, Google搜索, Go语言, iptables替代, netlink, nftables, Web界面, 可视化管理, 后台管理, 开源, 日志审计, 程序破解, 系统管理, 系统运维, 网络安全, 网络配置, 请求拦截, 进程隔离, 防火墙, 隐私保护