安全
Appliance 运行在由您运营的硬件和网络上。IronFlock 提供软件及其默认设置;而 Appliance 受到的保护程度还取决于您选择的模式、它周围的网络以及它所在的主机。本页就是针对这部分的检查清单。
各模式提供的保护
Appliance 以三种模式之一运行,详见 HTTPS 与证书。它们在加密和验证的内容上有所不同:
| 纯 HTTP(默认) | 使用自签发 CA 的 HTTPS | 使用您的企业证书的 HTTPS | |
|---|---|---|---|
| 浏览器到 Appliance | 未加密 | HTTPS | HTTPS |
| 登录 Cookie | 未标记为 Secure | Secure | Secure |
设备链路(端口 18080) | 未加密 | 未加密 | 443 上的 HTTPS |
| 设备的应用镜像和代理程序更新 | 未加密 | 未加密 | 443 上的 HTTPS |
| 设备的远程访问隧道 | 已加密,但不验证服务器 | 已加密,但不验证服务器 | 已加密并经过验证 |
| 通行密钥(passkey)和安全密钥 | 仅限在 Appliance 本机上 | 是 | 是 |
凡是 Appliance 与其他系统共享网络的地方,都请使用基于您企业证书的 HTTPS。只有在这种模式下,已连接的设备才会验证通信对方的身份。另外两种模式适用于只有 Appliance、其设备及其操作人员才能访问的网段。
哪些流量仍未加密
即使启用了 HTTPS,仍有部分流量未经加密。请据此规划您的网络:
- 端口
18080上的设备链路在所有模式下都会发布到每一个网络接口上。Appliance 自身的设备代理程序和在 Appliance 上运行的应用会连接到它;在纯 HTTP 模式和自签发 CA 模式下,所有已连接的设备也会连接到它。 - 通往 Appliance 的远程访问隧道(端口
7000)在纯 HTTP 模式和自签发 CA 模式下是加密的,但设备无法校验 Appliance 的证书。能够接触到网络路径的人可以冒充 Appliance 的隧道服务器。设备代理程序以这种方式连接时会记录一条警告。 - Appliance 内部各服务之间的连接(例如到其数据库的连接)未经加密。这些连接不会离开主机。
- 静态数据不会由 Appliance 加密。如果 Appliance 存储敏感数据,或可能离开您的场所,请使用主机操作系统或磁盘的加密功能。
加固清单
- 选择适合您网络的模式(参见各模式提供的保护)。
- 限制可以访问 Appliance 端口的范围。安装程序不会在您的防火墙中开放任何端口,而 Docker 发布 Appliance 端口时会绕过主机防火墙常规的入站规则(
ufw、firewalld)。请在DOCKER-USER链中或在您的网络防火墙上进行过滤:安装程序在/opt/ironflock/docker-user-firewall.sh.example留有一个模板。设备端口(18080、15001、15002、7000、30000–30049)只应对您的设备网络放行——参见连接到 Appliance 的设备。 - 保持主机操作系统为最新版本,并限制在其上拥有账户的人员。任何拥有主机 root 权限的人都能读取 Appliance 的全部机密信息。
- 使用 SSH 密钥而不是密码对主机进行管理访问。
- 配置时间同步——参见时间同步 (NTP)。
- 首次登录后修改管理员密码,并为管理员账户设置第二因素。
- 当所有账户都已设置第二因素后,要求所有人使用第二因素(参见账户与访问)。
- 为拥有该实例的 ironflock.com 账户启用第二因素保护:该账户可以从云端以管理员身份访问 Appliance。
- 只安装您信任的应用。应用在 Appliance 和您的设备上运行,对主机拥有广泛的访问权限,包括 Appliance 的配置文件。
- 保持 Appliance 为最新版本(参见更新)。
账户与访问
- 管理员账户:每台 Appliance 在安装时都会获得自己的管理员密码;安装程序只显示一次。如果密码丢失,请按照本地操作中的说明设置新密码——这也会注销所有管理员会话。
- 新用户只能凭 Appliance 上某个项目发出的邀请注册。没有邀请时,注册会被拒绝,通过社交登录注册也是如此。
- 第二因素:用户可以设置身份验证器应用(TOTP)、通行密钥或安全密钥以及恢复码。通行密钥和安全密钥需要 HTTPS。安装程序选项
--2fa用于设置该策略,并在更新后保持不变:available——用户可以设置第二因素,但永远不会被要求使用。effective(默认)——已设置第二因素的用户必须使用它。required——每个用户都必须使用第二因素。请先确保每个账户都已设置:没有第二因素的用户将无法再登录。
- 会话有效期为 24 小时。
- 从 ironflock.com 访问:创建实例密钥的 ironflock.com 账户与 Appliance 的管理员账户相连。您邀请的用户各自连接自己的 ironflock.com 账户——参见账户关联。用户可以随时解除该连接。
主机上的机密信息
安装程序在安装时一次性生成 Appliance 的机密信息,并在更新后保留它们。它们位于 /opt/ironflock/ 下:
| 文件 | 内容 | 访问权限 |
|---|---|---|
.env | 所有服务的密码和密钥、初始管理员密码、代理和 SMTP 凭据 | 仅限 root(0600) |
license.env | 许可证密钥和实例密钥 | root 和 IronFlock 服务(0640) |
certs/ | HTTPS 证书及其密钥;使用自签发 CA 时还包括该 CA 的密钥 | 私钥仅限 root(0600) |
registry-token-certs/ | 为应用镜像拉取令牌签名的密钥 | 仅限镜像仓库服务(0600) |
安装程序还会使用您的许可证密钥将 Docker 登录到 IronFlock 镜像仓库,因此 root 的 Docker 配置中也保存着该密钥。
请将这些文件纳入备份,并像保护 Appliance 本身一样保护这些备份。
您可以自行更换的内容:
- 管理员密码:在个人资料中更换,或使用本地操作中的重置命令。
- HTTPS 证书:替换
certs/中的文件;Appliance 会自动加载新证书。 - 许可证密钥:在管理员个人资料的许可证部分中更换。
- SMTP 和代理凭据:在
.env中修改,然后使用sudo systemctl restart ironflock.service重启。
如需更换内部服务的机密信息,请联系 IronFlock 团队。
出站连接与遥测
Appliance 所连接的目标地址列在防火墙配置中;所有这些连接都经过加密。
- 许可证校验会发送许可证密钥、硬件指纹,以及 Appliance 与在线 App Store 之间连接所用的访问令牌。
- AI 助手通过 IronFlock 的 LLM 网关发送提示词,除非您配置了自己的网关。
- 无遥测。Appliance 不发送任何使用情况分析:无论是 Appliance UI 还是其服务,都不会向 IronFlock 或第三方报告使用情况。
- 来自用户浏览器的连接:地图图块从 Mapbox 加载,语音输入使用语音识别服务 Deepgram。这些连接由浏览器发起,而不是由 Appliance 发起。
更新
- Appliance 更新由管理员启动(参见维护)。Appliance 通过 HTTPS 下载更新,如果更新失败会自动回滚。
- 设备代理程序更新带有签名。每个代理程序在应用更新前都会检查签名,如果新版本无法启动则会回滚——参见设备代理程序更新。
- 主机的操作系统(包括 Docker)由您负责。
备份与恢复
Appliance 没有内置备份功能。要对其进行备份,请使用 sudo systemctl stop ironflock.service 停止它,然后复制:
- 文件夹
/opt/ironflock/,包括.env、license.env、certs/和registry-token-certs/; - Appliance 的 Docker 卷(
docker volume ls),其中保存着数据库、文件、本地 App Store 和用户文件。
请将 .env 与同一时间点的卷保存在一起:卷中的加密数据只能用该 .env 中的密钥读取。
停用
-
在 Appliance 仍然在线时迁移或释放许可证——参见将许可证迁移到新硬件。
-
删除软件:
sudo systemctl disable --now ironflock.service sudo docker compose -f /opt/ironflock/docker-compose.yml \ --env-file /opt/ironflock/.env down -v sudo rm -rf /opt/ironflock安装程序曾使用许可证密钥将 Docker 登录到 IronFlock 镜像仓库;请同时移除该登录:
sudo docker logout instance-registry.ironflock.com -
如果硬件将离开您的场所,请擦除其磁盘——上述命令会删除文件,但不会覆盖它们。
会削弱安全性的设置
有些设置仅用于故障排查。在生产环境中请不要设置它们:
TUNNEL_TLS_INSECURE_SKIP_VERIFY和CLOUD_TUNNEL_TLS_INSECURE_SKIP_VERIFY——关闭远程访问隧道的证书校验。AGENT_UPDATE_ALLOW_UNSIGNED——允许设备代理程序应用未签名的更新。TUNNEL_AUTHZ_ENFORCE=false——允许设备在不证明自身身份的情况下打开隧道。SMTP_CONNECTION_URI中的?tls.rejectUnauthorized=false——接受邮件服务器提供的任何证书。--2fa available——永远不会要求使用第二因素。