FMO(NFM Over Internet) FAS 审计工具安装指南
ℹ️ 与 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\ |
方式二:手动安装
- 🖥️ 访问 GitHub Release 页面 下载对应平台的二进制包(如 linux-x64 下载
*linux-x64.tar.gz,Windows 下载*win-x64.zip)。 - 🖥️ 解压至服务器目录:
# Linux
mkdir -p /opt/fmo-fas && tar xzf fmo-audit-service-linux-x64.tar.gz -C /opt/fmo-fas
# Windows: 解压 win-x64.zip 至任意目录
- 🖥️ 运行
./fmo-audit-service(Linux)或双击fmo-audit-service.exe(Windows),服务监听端口9527。如需后台运行可自行配置 systemd / 计划任务(参考方式一的系统服务配置)。 - 浏览器访问
http://<服务器IP>:9527完成首次配置。
首次配置
- 浏览器访问
http://<服务器IP>:9527,设置管理员账号(首次强制) - 🖥️ 配置页填入 EMQX 地址 + API Key / Secret(EMQX Dashboard → 管理 → API 密钥)
- 启用主题统计:填主题
FMO/RAW,Webhook 地址同局域网用 IP 快速选择按钮(异地集群改公网可达地址) - 身份控制默认启用(最高保护)——包头与连接身份不一致的包自动拉黑,管理员可在设置页关闭
或命令行配置(替代步骤 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: 友台登录就被拉黑,是什么原因?
经排查确认,目前已知以下两种可能原因:
- SAS 服务未安装:FAS 依赖 SAS 服务提供的客户端属性(client_attrs)作为基础特性。未安装 SAS 时,客户端连接不带身份属性,FAS 遇到任何人都会直接拉黑。请确认服务器侧已安装并运行 SAS 认证服务。
- 客户端认证配置错误:已有用户将 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,零依赖)