daniel-armbrust/armfirewall-proj
GitHub: daniel-armbrust/armfirewall-proj
一个轻量级 Linux 防火墙管理平台,通过 SQLite 持久化、后台守护进程和 FastAPI Web 界面将普通服务器转变为可控的网络安全设备。
Stars: 0 | Forks: 0
# ArmFirewall
ArmFirewall 是一个 Linux 防火墙管理平台,旨在将小型服务器或虚拟机转变为受控的网络安全设备。该项目结合了操作系统自动化、SQLite 中的持久化配置、后台守护进程、基于 RRD 的监控以及响应式 FastAPI Web 界面。
该应用侧重于可预测的防火墙操作:基线保护规则由引导过程维护,用户定义的防火墙和路由更改被持久化在数据库中,并且操作更改通过受控的工作请求来应用,而不是直接从 Web 界面执行。
## 主要功能
- 管理 filter、NAT 和 mangle 表的 IPv4 和 IPv6 防火墙规则。
- 将防火墙规则、NAT 规则、mangle 规则、策略路由、接口清单、延迟目标、工作请求和日志持久化在 SQLite 数据库中。
- 使用所需的操作系统软件包、数据库架构、防火墙默认设置、策略路由数据以及 supervisor 管理的服务来引导主机。
- 在应用 ArmFirewall 控制的 iptables 和 ip6tables 规则之前,禁用冲突的操作系统防火墙服务。
- 配置 LAN 和 WAN 接口,启用 WAN DHCP,维护单一默认路由,并为 LAN 到 WAN 的转发应用伪装 (masquerading)。
- 使用 RRD 文件和生成的 PNG 图表监控系统、网络、文件系统、套接字状态和延迟指标。
- 提供包含仪表板、网络、防火墙、监控、服务和工具部分的响应式 Web GUI。
- 通过持久化的 `workreqd` 守护进程处理排队的操作系统更改。
## 架构
ArmFirewall 的组织围绕明确的职责边界展开:
- `main.py` 初始化 FastAPI 应用、中间件、静态文件和路由模块。
- `web/` 包含 Web GUI、模板、静态资源、视图、API 和 HTTP 路由组合。
- `core/` 包含共享辅助工具,例如 SQLite 访问、接口辅助和日志记录。
- `bin/armfw.sh` 是主要的引导/启动脚本。
- `bin/scripts/` 包含用于依赖项、DDL 执行、防火墙规则、策略路由、延迟默认值和 shell 日志记录的操作系统自动化脚本。
- `daemons/` 包含后台和任务执行进程。
- `daemons/monitord/` 包含负责 RRD 更新和图表生成的监控收集器。
- `db/ddl/` 包含版本化的 SQLite 架构。
- `rrd/` 存储运行时的 RRD 数据库和生成的图表图像。
- `conf/` 存储本地运行时配置文件。
## 持久化守护进程
该项目使用 `supervisord` 来控制长时间运行的服务:
- `armfirewall-api`:运行 FastAPI Web 应用程序。
- `armfirewall-ifaced`:收集网络接口清单和计数器到 SQLite 中。
- `armfirewall-monitord`:运行监控收集器并生成 RRD 图表。
- `armfirewall-workreqd`:处理排队的工作请求并分派操作系统操作。
Supervisor 日志轮换为每个受管进程进行了配置。
## 防火墙与路由模型
防火墙模型将运行时的操作系统状态与持久化配置分离:
- 受保护的引导规则由启动脚本创建和验证。
- 用户定义的规则存储在匹配的 SQLite 数据库中。
- 从 GUI 应用更改会创建工作请求。
- 工作请求处理程序将更改应用到操作系统并更新请求状态。
策略路由使用 Linux `iproute2` 管理,包括在 `/etc/iproute2/rt_tables` 中注册路由表,以及在 `db/policy-routing.db` 中持久化路由/规则元数据。
## 监控模型
监控收集器使用 Linux `/proc`、系统命令、SQLite 配置和 RRDTool:
- 接口流量和错误。
- CPU、负载平均值、内存、进程状态、运行时间、熵和内核计数器。
- 文件系统使用情况和 I/O。
- 套接字状态。
- 在 `db/latency.db` 中配置的延迟目标。
生成的图表以每日、每周、每月和每年的变体写入到 `rrd/img` 目录下。
## 数据库架构
SQLite 数据库架构保存在 `db/ddl/` 中,并由 `bin/scripts/execddl.sh` 应用。运行时的 `.db`、`.wal` 和 `.shm` 文件在本地生成,不应进行版本控制。
重要的架构包括:
- `iface.ddl`
- `latency.ddl`
- `policy-routing.ddl`
- `work-requests.ddl`
- `logs.ddl`
- `ipv4-firewall-rules.ddl`
- `ipv6-firewall-rules.ddl`
- `ipv4-nat-rules.ddl`
- `ipv6-nat-rules.ddl`
- `ipv4-mangle-rules.ddl`
- `ipv6-mangle-rules.ddl`
## 启动
以 root 身份运行主要的引导脚本:
```
bin/armfw.sh
```
该脚本安装依赖项,应用 DDL,收集接口选择,配置路由,应用基线防火墙规则,确保默认的延迟目标,并通过 supervisord 启动服务。
## 开发说明
- Python 依赖项列在 `requirements.txt` 中。
- Web GUI 中的 JavaScript 是纯浏览器 JavaScript。
- 生成的运行时数据(例如 SQLite 数据库、RRD 文件、图表图像、日志、虚拟环境和本地配置文件)被有意排除在版本控制之外。
- DDL 文件已进行版本控制,代表了数据库结构的可靠来源。
## 作者
ArmFirewall 由 Daniel Armbrust 创建,并作为 Linux 防火墙、路由和监控用例的开放基础设施项目进行维护。
## 许可证
ArmFirewall 在 MIT 许可证下发布。您可以自由使用、复制、修改、合并、发布、分发、再授权和销售本软件的副本,前提是必须保留原始版权声明和许可证文本。
## 项目状态
ArmFirewall 正在积极开发中。当前的工作重点是防火墙规则管理、策略路由、监控、延迟探测以及从紧凑型网络设备接口操作这些功能所需的 Web GUI。
标签:AV绕过, Cutter, FastAPI, Google搜索, IPv4, IPv6, Linux防火墙, Mangle表, Mr. Robot, NAT网关, PowerShell, RRD监控, SQLite持久化, Web GUI, Web界面, 后台守护进程, 数据包过滤, 数据可视化, 无线安全, 树莓派服务器, 流量监控, 系统自动化, 网络安全设备, 网络架构, 网络策略, 路由配置, 边缘计算, 运维工具, 逆向工具, 防火墙管理平台