ℹ️ 与 SAS 的关系:SAS 认证谁能进来(证书链验证),FAS 以 Web 面板形式审计谁在干什么(流量统计/身份控制/黑名单管控)。建议部署完 SAS 后安装 FAS,补上安全性最后一公里。

为什么需要 FAS

SAS 验证连接身份,但 FMO 数据包头为明文声明、不带签名——攻击者可用合法身份连接后在包头写入他人呼号冒充广播。FAS 是一个 Web 审计面板(启动后监听 :9527,浏览器访问即可),它的工作是比对"声明"与"身份",不一致即自动拉黑该连接的身份(踢下线 禁连 留痕),默认最高保护。同时提供流量排行榜、主题统计时间轴反查、黑名单管控(永久/临时自动解除)、在线列表和健康监控。

方式一:一键脚本安装

🖥️ 一行命令完成下载、注册系统服务并启动,浏览器访问 http://<服务器IP>:9527 即可打开审计面板:

Linux (需要 root 权限):

curl -fsSL https://bg5esn.com/share/fmo/fas-installer/install.sh | sudo bash

Windows (以管理员身份运行 PowerShell):

irm https://bg5esn.com/share/fmo/fas-installer/install.ps1 -OutFile "$env:TEMP\fas-install.ps1"; iex (Get-Content "$env:TEMP\fas-install.ps1" -Raw -Encoding UTF8)

安装脚本会自动完成以下操作:

  • 检测系统平台,下载对应版本
  • 安装至 /opt/fmo-fas/(Linux)/ %LOCALAPPDATA%\FMOAuditService\(Windows)
  • 注册系统服务并启动(Linux: systemd / Windows: 计划任务)

服务管理 - Linux:

项目 说明/指令
日志 journalctl -u fmo-fas -f
启动 systemctl start fmo-fas
停止 systemctl stop fmo-fas
重启 systemctl restart fmo-fas
升级 sudo /opt/fmo-fas/fmo-audit-service –update(systemd 自动重启)
卸载 curl -fsSL https://bg5esn.com/share/fmo/fas-installer/uninstall.sh | sudo bash
安装目录 /opt/fmo-fas/

服务管理 - Windows(管理员 PowerShell):

项目 说明/指令
日志 Get-Content -Wait “$env:LOCALAPPDATA\FMOAuditService\fas.log”
启动 Start-ScheduledTask -TaskName fmo-fas
停止 Stop-ScheduledTask -TaskName fmo-fas
重启 Stop-ScheduledTask fmo-fas; Start-ScheduledTask fmo-fas
升级 Stop-ScheduledTask fmo-fas; & “$env:LOCALAPPDATA\FMOAuditService\fmo-audit-service.exe” –update; Start-ScheduledTask fmo-fas
卸载 irm https://bg5esn.com/share/fmo/fas-installer/uninstall.ps1 -OutFile “$env:TEMP\fas-uninstall.ps1”; iex (Get-Content “$env:TEMP\fas-uninstall.ps1” -Raw -Encoding UTF8)
安装目录 %LOCALAPPDATA%\FMOAuditService\

方式二:手动安装

  1. 🖥️ 访问 GitHub Release 页面 下载对应平台的二进制包(如 linux-x64 下载 *linux-x64.tar.gz,Windows 下载 *win-x64.zip)。
  2. 🖥️ 解压至服务器目录:
# Linux
mkdir -p /opt/fmo-fas && tar xzf fmo-audit-service-linux-x64.tar.gz -C /opt/fmo-fas

# Windows: 解压 win-x64.zip 至任意目录
  1. 🖥️ 运行 ./fmo-audit-service(Linux)或双击 fmo-audit-service.exe(Windows),服务监听端口 9527。如需后台运行可自行配置 systemd / 计划任务(参考方式一的系统服务配置)。
  2. 浏览器访问 http://<服务器IP>:9527 完成首次配置。

首次配置

  1. 浏览器访问 http://<服务器IP>:9527,设置管理员账号(首次强制)
  2. 🖥️ 配置页填入 EMQX 地址 + API Key / Secret(EMQX Dashboard → 管理 → API 密钥)
  3. 启用主题统计:填主题 FMO/RAW,Webhook 地址同局域网用 IP 快速选择按钮(异地集群改公网可达地址)
  4. 身份控制默认启用(最高保护)——包头与连接身份不一致的包自动拉黑,管理员可在设置页关闭

或命令行配置(替代步骤 2-3,适合批量部署/无浏览器环境)

# 环境变量方式(Secret 不进 shell history)
EMQX_URL=http://<EMQX地址> \
EMQX_API_KEY=<key> \
EMQX_API_SECRET=<secret> \
EMQX_MONITOR_DB=/opt/fmo-fas/fmo-audit-service.db \
fmo-audit-service --configure

自动完成:验证连接 → 保存配置 → 设置主题统计 bridge(分步日志输出,失败退出码 1)。 ⚠️ 必须带 EMQX_MONITOR_DB=/opt/fmo-fas/fmo-audit-service.db(install.sh 安装的 unit 服务 db 路径),手动 shell 里没有该变量,不带会写进默认数据目录导致服务读不到。

安全部署(反代 HTTPS)

部署方式 说明
内网直连 默认即可,信任局域网
反代 HTTPS Nginx/群晖反代,需启用 EMQX_MONITOR_TRUST_PROXY=1(systemd 加至 Environment 或设置页配置)
私有组网 Tailscale/WireGuard 组网,公网不暴露端口
server {
    listen 443 ssl;
    server_name monitor.example.com;
    ssl_certificate     /path/cert.pem;
    ssl_certificate_key /path/key.pem;
    location / {
        proxy_pass http://127.0.0.1:9527;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
    }
}

环境变量

变量 默认值 说明
EMQX_MONITOR_PORT 9527 HTTP 监听端口
EMQX_MONITOR_DB 用户数据目录 SQLite 数据库路径(如 /opt/fmo-fas/fmo-audit-service.db
EMQX_MONITOR_TRUST_PROXY - 反代时设为 1,信任 X-Forwarded-For 计算客户端 IP
FAS_UPDATE_URL https://bg5esn.com/share/fmo/fas.json OTA 更新元数据地址
EMQX_URL - 命令行配置(–configure)用:EMQX 地址
EMQX_API_KEY - 命令行配置(–configure)用:API 密钥 Key
EMQX_API_SECRET - 命令行配置(–configure)用:API 密钥 Secret

数据与备份

  • 数据文件:/opt/fmo-fas/fmo-audit-service.db(Linux)/ %LOCALAPPDATA%\FMOAuditService\fmo-audit-service.db(Windows)。含 EMQX API Secret / 管理员哈希,请勿以 root 运行服务
  • 统计与审计数据保留 30 天自动清理;备份:sqlite3 fmo-audit-service.db ".backup /backup/fas-$(date +%F).db"(WAL 模式下不要直接复制文件)

EMQX 集群注意事项

说明
API 集群视图 EMQX 地址填任意节点即可,clients、banned 均为全集群视图
黑名单/身份控制 banned 集群级——任一节点拉黑,全集群拒绝该呼号
webhook 不重复 每条消息只在入口节点触发一次规则,不双计
版本一致性 集群内 EMQX 版本应一致

常见问题 (Q&A)

Q: 友台登录就被拉黑,是什么原因?

经排查确认,目前已知以下两种可能原因:

  1. SAS 服务未安装:FAS 依赖 SAS 服务提供的客户端属性(client_attrs)作为基础特性。未安装 SAS 时,客户端连接不带身份属性,FAS 遇到任何人都会直接拉黑。请确认服务器侧已安装并运行 SAS 认证服务。
  2. 客户端认证配置错误:已有用户将 EMQX 的 HTTP 客户端认证(Authentication)误配成了客户端授权(Authorization)。请检查自己的配置是否犯了如上错误——认证建在"认证"下,不是"授权"下。

提示:修正配置后,之前被误拉的呼号可在 FAS 黑名单页手动解封。


ℹ️FAS 说明 FAS (FMO Audit Service) 为 FMO 审计守护 Web 服务,部署在 EMQX 旁边。启动后浏览器访问 http://<服务器IP>:9527 打开审计面板:流量排行榜、身份伪造自动拉黑、黑名单管控、在线列表、健康监控等。SAS 验证"你是谁",FAS 盯住"你在干什么"——两者互补保障服务器安全。

  • 开源地址github.com/BG5ESN/fmo-audit-service
  • 支持平台:linux-x64 / linux-arm64 / linux-arm / osx-x64 / osx-arm64 / win-x64(单文件自包含二进制,内置 .NET 运行时 + SQLite,零依赖)