深色模式
安全加固
系统内置的安全能力,以及部署时建议做的加固。
内置能力
| 能力 | 说明 |
|---|---|
| 隐藏后台路径 | 主控 / 财务端 / 被控都可设随机后台路径,未登录访问裸路径一律 404(防扫) |
| 扫站封禁 | 同 IP 5 分钟内 60 个 404 → 封禁 10 分钟 |
| 登录限流 | 同账号/IP 5 分钟 6 次失败锁定(三层都有) |
| 两步验证(2FA) | 被控面板 + 财务端支持 TOTP(Google Authenticator) |
| 注册验证码 | 自研图形验证码(算式点阵图 + HMAC 签名令牌) |
| 风控 | 同 IP 注册上限、每小时下单上限、多账号下单标记(管理后台风控中心) |
| 一次性安装码 | 被控注册成功后立即轮换,旧码失效 |
| TLS 证书验证 | 财务端和主控校验 HTTPS 证书;Agent 注册通过主控 HTTPS 固定 Agent 证书指纹,API 与 WebSocket 均校验指纹 |
| WS 票据 | 财务端 → 主控的 WebSocket 用 60 秒一次性票据,服务令牌不出现在 URL |
| Token 哈希存储 | 开放 API Token 只存 sha256,列表只显示前 12 位 |
| 敏感操作确认 | 删除游戏服 / 改邮箱 / 关 2FA 需输入密码;删机器需输入机器名 |
| 路径穿越防护 | 文件管理做前缀 + 软链双重校验;压缩包解压防 zip-slip |
| 审计日志 | 登录、下单、开通、删除、改密、开关机等全记录 |
源站锁(强烈建议)
把三台的 443 端口限制为只允许 Cloudflare 回源,避免被直接扫描。
被控 / 主控 / 财务端都带一个脚本(安装时生成,也可手动创建):
bash
# /opt/nkxconsole/cf-allow.sh(主控为例)
# 用法:bash cf-allow.sh # 只允许 Cloudflare 网段访问 443
# bash cf-allow.sh --remove # 恢复脚本做的事:
bash
nft delete table inet nkxconsole 2>/dev/null
nft add table inet nkxconsole
nft add chain inet nkxconsole input '{ type filter hook input priority filter; policy accept; }'
nft add rule inet nkxconsole input iif lo accept
# 允许 Cloudflare 全部网段访问 443
for cidr in 173.245.48.0/20 103.21.244.0/22 ... 2c0f:f248::/32; do
nft add rule inet nkxconsole input tcp dport 443 ip saddr $cidr accept
nft add rule inet nkxconsole input tcp dport 443 ip6 saddr $cidr accept
done
nft add rule inet nkxconsole input tcp dport 443 drop财务端要额外放行主控?
不需要。财务端调主控用的是主控的域名(走 CF)。但主控调被控是直连 8443,所以被控要放行主控的出口 IP(安装时自动写入白名单)。
被控侧白名单
被控的 8443(节点 API)由 nkxnode nft 表限制,只允许注册时下发的白名单(主控出口 IP)。修改白名单:
bash
# 被控上
sqlite3 /opt/pvepanel/panel.db "update settings set value='1.2.3.4,5.6.7.8' where key='node_api_allow';"
systemctl restart nkx-panel敏感数据与权限
服务启动时会把 SQLite 主文件及 WAL/SHM/journal 文件、配置文件和密钥文件权限收紧到 0600;数据库路径不能是符号链接。仍应确保服务账号独占这些文件。
bash
# 手动检查或修复三端数据库 / 私钥 / 配置权限
chmod 600 /opt/nkxweb/web.db* /opt/nkxweb/key.pem /opt/nkxweb/config.json
chmod 600 /opt/nkxconsole/console.db* /opt/nkxconsole/key.pem /opt/nkxconsole/config.json
chmod 600 /opt/pvepanel/panel.db* /opt/pvepanel/key.pem /opt/pvepanel/config.jsontrusted_proxies 默认留空。只有服务前面确实有反向代理时,才填写代理实际来源 CIDR;不要填客户端网段。应用只在 TCP 对端属于这些网段时才读取 X-Forwarded-For 等转发头,CIDR 写错会阻止服务启动。
旧配置里的 console_insecure 和 node_insecure 字段会被忽略。财务端连接自建 CA 的主控时,在财务端 config.json 设置 console_ca_file;旧节点首次升级或 Agent 证书变化后,在主控重新生成安装码并执行新安装命令来登记新指纹。
日常建议
- 后台路径用随机串(不要
admin、manage) - 管理员账号开 2FA
- 定期备份三端数据库(见 升级 / 备份)
- 被控宿主机不要跑其他对外服务,SSH 用密钥 + 改端口
- 定期看「管理后台 → 风控中心」与「操作日志」