799953468/frp-ban
安全为 frps 拦截被封禁 IP 的安全插件,可依据日志规则自动封禁并通过 TLS 在客户端与服务端之间同步。
项目介绍
frp-ban 是 frps 的安全插件。frps 在每次 Login 和 NewUserConn 之前调用插件的 HTTP POST /handler,插件用内存中的封禁列表拒绝这些 IP 建立隧道,列表同时落盘到 JSON 文件,过期记录会自动清理。
封禁来源由另一侧提供:FrpBan.Client 部署在需要监控的机器上,通过 FileSystemWatcher 跟踪日志文件,用 YAML 规则匹配日志行(例如某 IP 连续 SSH 登录失败),再经由 TLS 加密的二进制 TCP 协议把封禁请求发给服务端。服务端限制连接数与消息速率、单帧最大 64 KiB,仅允许 TLS 1.2/1.3,并使用池化帧缓冲。适合自建 frps、希望根据多台主机日志自动封禁 IP 的运维者。
快速使用
前提:源码构建需要 .NET SDK,已有可用的 frps 实例,以及一份 TLS 证书(开发阶段可用自签名证书)。
- 修改
src/FrpBan/appsettings.json:把PluginSettings.Token设为足够长的随机密钥,配置BanFilePath和Tls.CertificatePath/CertificatePassword。启动时会拒绝占位符密钥和短于 32 字符的密钥;也可以通过环境变量(如PluginSettings__Token)注入。 - 生成开发用证书:
openssl req -x509 -newkey rsa:4096 -keyout server-key.pem -out server-cert.pem -days 365 -nodes \
-subj "/CN=localhost" -addext "subjectAltName=DNS:localhost,IP:127.0.0.1"
openssl pkcs12 -export -out server.pfx -inkey server-key.pem -in server-cert.pem
- 编译并分别运行服务端和客户端:
cd src/FrpBan && dotnet run
cd src/FrpBan.Client && dotnet run
- 在客户端
appsettings.json中填写ServerAddress、ServerPort(默认 9443)和与服务端相同的Token,并配置 TLS 信任选项;使用自签名证书测试时,将CaCertificatePath指向server-cert.pem。 - 在
src/FrpBan.Client/rules.d/下新增规则,例如对/var/log/auth.log设置阈值规则,匹配Failed password.*from (?<ip>\d+\.\d+\.\d+\.\d+),参数为maxMatches: 5、windowSeconds: 300、banDurationSeconds: 3600。 - 在
frps.toml中注册插件:
[[httpPlugins]]
name = "frp-ban"
addr = "127.0.0.1:9000"
path = "/handler"
ops = ["Login", "NewUserConn"]
完成后,命中日志规则的封禁会通过 TLS 同步到服务端,并在 frps 登录阶段被拒绝。Windows、macOS、Linux(deb、rpm、Arch、Alpine、便携包)的 x64 与 ARM64 预编译包见发布打包说明。
使用约束
- 规则仅支持
logSource.type: file;journal类型虽已定义但尚未实现,加载规则时会被拒绝。 - 客户端的重试队列只在内存中:断线重连后仍在,但进程重启会丢失。
- HTTP 回调默认只监听回环地址;如果 frps 不在本机,需要显式修改监听地址与受信回调地址。
- 仅支持 TLS 1.2/1.3;默认每个 IP 每分钟 10 个新连接、120 条协议消息,最多 100 个并发 TLS 连接,均可配置。
- 客户端服务账号需要对被监控日志有读权限(例如在日志属于
adm组的系统上把账号加入该组)。 - README 中的性能数字是实现的限制值而非基准测试结果,实际延迟和内存占用取决于负载。
- 采用 MIT 许可证。IPv6 尚未完整测试;journal 监控、白名单、指标接口、Web UI 和容器镜像仍在路线图中。
HotRepo 点评
2026-11-10 该项目进入新项目榜,记录时 127 Star,在观测窗口内新增 26;没有 GitHub 全部语言日榜记录。仓库很新,Fork 数为 0,因此更值得关注的是它的实际做法:并发字典查询、基于文件监听的日志跟踪,以及带明确限流的二进制协议。README 清楚区分了已实现能力和路线图内容,运维者可以据此判断是否适合现有 frps 部署。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。