Pwnzer0tt1/firegex
GitHub: Pwnzer0tt1/firegex
Firegex 是一款面向 CTF 攻防赛的多功能防火墙,通过正则表达式过滤、端口劫持和自定义 Python 过滤器来拦截恶意流量并保护比赛服务。
Stars: 102 | Forks: 11

[Fi]*regex 🔥
## 什么是 Firegex? Firegex 是一款包含多种功能的防火墙,专为 CTF 攻防赛 设计,旨在通过各种类型的过滤器来限制或完全拒绝恶意流量。 ## 开始使用 Firegex ### Docker 模式(推荐) 你需要一台 Linux 机器和 docker( + docker-compose ) ``` # 一键安装程序(适用于 Docker 和 standalone 模式) sh <(curl -sLf https://pwnzer0tt1.it/firegex.sh) ``` 通过这个命令,你将下载 firegex.py 并运行它,它会要求你输入用于 firegex 的密码,并使用 docker-compose 启动它 或者,你也可以通过克隆此仓库并执行以下命令,以类似的方式启动 firegex ``` python3 run.py start --prebuilt ``` 如果不添加 `--prebuilt` 标志,它将从源码构建 docker 镜像,这可能会花费更长的时间。 ### 独立模式 如果 Docker 不可用,或者你在无根(rootless)环境中运行,Firegex 可以在独立模式下运行。上面的一键安装脚本同样适用于独立模式,并且会在 Docker 不可用时自动检测并使用独立模式。 ``` sh <(curl -sLf https://pwnzer0tt1.it/firegex.sh) # 或者手动强制 standalone 模式: python3 run.py start --standalone # 或者直接使用一键安装程序: sh <(curl -sLf https://pwnzer0tt1.it/firegex.sh) --standalone # 检查状态 python3 run.py status [--standalone] # 停止 standalone 模式 python3 run.py stop [--standalone] ``` 独立模式会自动: - 从 GitHub releases 下载预构建的 rootfs - 检测你的系统架构(amd64/arm64) - 设置带有必要绑定挂载的 chroot 环境 - 作为后台 daemon 进程运行 - 管理 PID 文件以进行进程控制 如果服务器重启,Docker 模式会自动重启服务,而独立模式则需要你再次手动运行启动命令。 克隆仓库后,run.py 会自动从源码构建 firegex 的 docker 镜像,并启动它。 构建 firegex 的镜像会需要更多时间,因此建议使用已在 GitHub packages 中构建好的版本。 如果 run.py 不在 firegex 源码根目录下,这就是其默认行为。 默认情况下,firegex 将根据你系统可用的线程数,以多线程配置启动。 firegex 的默认端口是 4444。在启动时,你需要选择一个密码,这对你的安全至关重要。 启动时的所有配置都可以在 [firegex.py](./run.py) 或 firegex 界面中直接进行自定义。  ## 功能特性 - 基于 [NFQUEUE](https://netfilter.org/projects/libnetfilter_queue/) 和 [nftables](https://netfilter.org/projects/nftables/) 的正则表达式过滤:使用一个 C++ 文件来处理正则表达式和请求,从而拦截恶意请求。底层使用 PCRE2 正则表达式。请求在内核侧被拦截,因此此过滤器可即时生效(支持 IPv4/6 和 TCP/UDP)。 - 创建基础防火墙规则来允许或拒绝特定流量,类似于 ufw 或 iptables,但使用的是 firegex 的图形界面(通过 [nftable](https://netfilter.org/projects/nftables/) 实现)。 - 端口劫持 允许你将特定端口上的流量重定向到另一个端口。得益于此项功能,你可以启动自己的代理,并通过环回接口连接到真实服务。Firegex 将负责使用内部的 [nftables](https://netfilter.org/projects/nftables/) 进行数据包路由。 - Netfilter 代理使用 [nfqueue](https://netfilter.org/projects/libnetfilter_queue/) 来模拟一个 Python 代理,你可以用 Python 编写自己的过滤器并用来过滤流量。内置了一些数据处理程序来解析 HTTP 等协议,并且在应用过滤器之前,你可以使用 fgex 命令对其进行测试(你需要从 pypi 安装 firegex 库)。 ## 文档 关于过滤器如何工作、有哪些可用功能以及如何使用它们的文档,都可以在 firegex 界面中找到。 以下是关于 firegex 结构的简述: - [前端 (React)](frontend/README.md) - [后端 (FastAPI + C++)](backend/README.md) 关于 Firegex 的工作原理,特别是关于 nfproxy 模块的更具体信息,可以在此处找到(仅限意大利语):[https://github.com/domysh/engineering-thesis](https://github.com/domysh/engineering-thesis)(PDF 位于 release 附件中)  ### Firegex 的核心要点 #### 1. 高效性 Firegex 不应降低网络流量的传输速度。为此,firegex 主要功能的核心由一个 C++ 二进制文件负责。 #### 2. 可用性 Firegex **绝不能**成为影响 SLA 分数的问题! 这意味着 firegex 的设计旨在避免出现任何导致服务中断的可能性。我们深知,让所有流量都通过 firegex 处理,意味着一旦它出现故障,所有服务都会随之瘫痪。正因如此,firegex 实现了多种逻辑来规避这种风险。此外,如果你为服务添加了错误的过滤器,firegex 始终能为你提供一种快速或瞬时的方式,将其重置回先前的状态。 ## 为什么叫 "Firegex"? 最初该项目仅基于正则表达式过滤器,并且即使是现在,其主要功能仍在使用正则表达式,不过 firegex 已经或将会引入更多其他的过滤工具。 # 致谢 - 版权所有 (c) 2022-2025 Pwnzer0tt1 ## Star 历史
标签:Docker, 安全防御评估, 流量过滤, 网络安全, 请求拦截, 逆向工具, 防火墙, 隐私保护