安全模型
本页说明保护你的服务的是什么、每项保护能达到什么效果,从面板与节点之间的链路,到每个管理员账户的权限。开启这些保护和管理账户的方法见 安全、管理员、角色 和 API 令牌。
面板与节点之间
- 双向 TLS。 面板和每个节点在每次连接时都要证明自己的身份。节点只接受面板的客户端证书;互联网上的其他任何东西都无法越过其控制端口的 TLS 握手。
- 首次使用时固定。 面板在第一次连接时记录每个节点的证书,此后只接受这一张。同一地址上的另一台机器会被拒绝,而不是被信任。
- 一次性安装令牌。 安装命令用它的令牌换取面板的客户端证书,仅此一次;令牌之后再也无效。通过 SSH 的自动安装不需要令牌:它通过 SSH 连接上传所有内容。
- SSH 同样被固定,且从不保存。 面板在首次连接时记录服务器的 SSH 主机密钥,并拒绝不同的主机密钥。密码只用于一次连接,用完即丢弃。只有在你勾选相应选项时,面板自己的 SSH 密钥才会被添加到服务器上,并且可以从节点菜单中撤销。
- 节点不保存你的任何机密。 用户、密钥和证书以内存形式到达节点,节点停止时即消失。
参见 节点与面板。
会话
- 登录会创建一个随机会话令牌,以页面脚本无法读取的 cookie 形式下发。面板只保存它的哈希,所以会话表无法被用来进入面板。
- 会话在 24 小时未使用后结束;勾选 30 天内保持登录 时为 30 天。会话在面板重启后依然有效。
- 每位管理员都可以列出自己的会话(含地址、应用和最后活动时间),并结束其中任意一个。主管理员可以结束另一个账户的所有会话。
- 即使关闭了变更日志,每次登录和每次失败的登录也都会被记录;从新地址登录会发出
admin.login_new_ip。
两步验证登录与重新确认
- 两步验证 使用身份验证器应用(TOTP)中的验证码,外加十个一次性恢复码。每个验证码只被接受一次。
- 重新确认。 当上一次输入验证码已超过 10 分钟时,敏感操作会要求输入新的验证码:管理管理员、创建或删除 API 令牌、恢复备份、重启面板,以及修改面板的地址、证书或基础路径设置。未启用两步验证的账户和 API 令牌不会被要求。
- 单点登录 从不创建账户;启用了两步验证的账户在通过服务商验证后仍需输入验证码。
角色、权限范围与归属
管理员能做什么由两种独立的机制决定,正是把两者分开,才让代理商之间互相隔离:
- 权限范围决定哪些操作。 API 的每条路由都需要一个权限范围,每个请求(无论来自登录还是令牌)都会根据调用者角色的权限范围进行检查。
- 归属决定哪些数据行。 代理商只能查看和修改自己拥有的用户。没有任何权限范围能扩大这一点:被授予读取用户权限的代理商,读到的仍然只是自己的用户。
角色还有三条规则:
- 角色只能收窄某个层级,没有任何东西能扩大它。 自定义角色从主管理员、管理员或代理商层级出发,再去掉权限。
- 没有人能授予自己没有的权限。 创建角色、把账户分配给角色、重置另一个账户的密码,以及为另一个账户生成令牌,都要求调用者拥有所涉及的每一项权限。
- 修改角色会结束该角色下所有人的登录,让新权限立即生效。
面板只有一个所有者,这是唯一一个无法被删除或降级的账户,所以恢复命令总有一个账户可以触及。
API 令牌
API 令牌让程序可以使用 API:
- 绑定到一位管理员。 令牌以其管理员的身份行事:它只能访问该管理员的用户,并受该管理员配额的约束。
- 永远不超过其管理员。 每次请求时,它的权限范围都会被裁剪到其管理员的角色以内,所以收窄管理员的权限会立即收窄其所有令牌,删除管理员会删除其令牌。
- 只显示一次,以哈希形式保存。 令牌只在创建时显示一次。
- 限速。 默认每分钟 120 个请求,或令牌上设置的速率。
- 有些操作对所有令牌关闭:修改密码、重启或更新面板,以及恢复备份。
登录保护
- 来自同一地址的五次失败尝试会使该地址在 10 分钟内无法登录。两步验证步骤和安装页面也计入。
- 反复锁定会变成封禁,封禁在重启后依然有效,并在一周内随每次重复而延长:10 分钟、1 小时、24 小时、7 天。主管理员也可以手动封禁某个地址。
- 封禁只关闭无需会话即可访问的内容:登录、登录的第二步和安装页面。
- 位于 CDN 或反向代理后面时,请把它列入 受信任代理,否则面板会把每个访问者都看作代理的地址,一次封禁就会把所有人锁在外面。登录允许列表 列出永远不会被锁定或封禁的地址:你自己的网络,也就是你重新进入的途径。
安装关卡
在设置向导运行之前,除了安装程序打印的一次性链接外,面板对所有请求都应答“未找到”。在管理员存在之前,任何人都无法登录,所以面板不会向任何人显示登录页面。向导的令牌只授权一次提交,这次提交会同时创建主管理员、所有设置和面板的证书,令牌在使用后即被删除。
机密从不回显
- 已保存的凭据从不再次显示。 表单中已保存的密码、令牌或密钥显示为 已设置——留空则保持不变;留空的输入框会保留已保存的内容。
- 持有者机密完全不可读取。 安装令牌、备份密码,以及派生所有隧道凭据的那个机密,都不会出现在设置 API 和命令行的列表中。
- 事件不携带凭据。 参见 事件总线。
- 备份包含所有凭据。 请设置备份密码,让捡到归档的人无法使用它。
面板可以从哪里访问
- 设置了基础路径时,面板只在自己的基础路径下应答(安装向导会建议一个随机路径),所以单凭端口看不到登录页面。
- 订阅地址是独立的。 在订阅域名上,面板只在其基础路径下应答,所以每个客户持有的地址不会透露面板在哪里管理。
- 其他网站无法用框架嵌入面板,所以面板的按钮无法被藏在别人的页面下面。
- 你添加的 Webhook 不能指向面板自己的网络。
审计日志
变更日志记录谁在何时修改了什么。它默认关闭,在设置中开启;无论是否开启,登录、失败的登录和订阅链接的导出都会被记录。看起来像机密的字段(密码、密钥、令牌、凭据、订阅地址)在写入时和读取时都会被替换为 [redacted]。只有主管理员能读取或清空它,清空操作本身也会被记录。参见 审计日志。
恢复
在面板服务器上运行 nexora-panel admin reset-password,会为一个账户(默认为所有者)设置新密码、关闭其两步验证登录、结束其会话,并移除其单点登录绑定。丢失手机和丢失密码是同一种恢复,而这个命令始终是重新进入的途径。参见 安装面板。
