NineData 私有化部署安全最佳实践:保护内部管理入口
NineData 私有化部署运行在企业管理的网络环境中。保护管理入口时,先让管理员从企业私有网络访问,再为管理流量启用 HTTPS、正确识别访问来源,并在当前版本支持时使用 NineData 自带的访问 IP 白名单。
本文按单机和高可用私有化部署都适用的顺序,介绍需要检查和配置的事项。节点通信、端口和部署组件以对应部署方案的手册为准。
第一步:把管理入口留在企业私有网络
将 NineData 控制台部署在企业私有网络中。管理员在企业内网时,直接使用内网地址访问;在外网时,先通过企业 VPN 接入该内网,再使用同一个内网地址访问。不要把管理控制台放在公网可直接访问的网络中。
外网管理员通过 VPN 接入
外网访问需要企业已提供可访问 NineData 所在网络的 VPN。VPN 客户端、账号和连接配置由企业 IT 管理员提供。
- 从企业 IT 获取批准使用的 VPN 客户端、账号和连接配置,并按企业说明安装客户端。如果客户端已安装,直接进行下一步。
- 打开 VPN 客户端,登录并连接企业内网 VPN,确认客户端显示连接成功。
- 打开 NineData 的内网地址,例如
https://ninedata.intra.example。外网和办公网使用同一个内网地址。 - 使用完成后断开 VPN 连接。
如果 VPN 显示已连接但 NineData 页面无法打开,请联系企业 IT 管理员,确认 VPN 已允许访问 NineData 所在的内网网段,并且内网域名解析可用。
管理入口、NineData 节点、业务数据源和外部依赖可以按实际部署拓扑划分网络;只保留部署和任务所需的通信。单机或高可用方案都应遵循对应部署手册中的节点通信要求。
第二步:使用内网域名和证书启用 HTTPS
HTTPS 可以加密浏览器与管理入口之间的登录信息和操作流量。内网使用时,可由企业 CA 为管理域名签发证书;管理员设备需要信任该 CA,证书中的域名也要与浏览器访问的域名一致。
以下以 Ubuntu 主机上的 NGINX 作为 HTTPS 入口为例。先准备一个仅在企业内网使用的域名,例如 ninedata.intra.example,并让内网 DNS 将它解析到 NGINX 主机的私网地址。
安装并启动 NGINX。
sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx安装企业 CA 提供的证书和私钥。 将示例路径替换为 CA 实际交付的文件路径。私钥文件只允许 NGINX 运行所需的管理员读取。
sudo install -d -m 750 /etc/nginx/certs
sudo install -o root -g root -m 644 "/path/from-ca/fullchain.pem" /etc/nginx/certs/fullchain.pem
sudo install -o root -g root -m 600 "/path/from-ca/privkey.pem" /etc/nginx/certs/privkey.pem配置 HTTPS 和反向代理。 创建
/etc/nginx/conf.d/ninedata.conf,将server_name替换为内网域名。server {
listen 80;
server_name ninedata.intra.example;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name ninedata.intra.example;
ssl_certificate /etc/nginx/certs/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
location / {
proxy_pass http://127.0.0.1:9999;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}示例将请求转发到本机的
9999端口;如果 NineData 部署手册输出的控制台地址或宿主机映射端口不同,将proxy_pass地址改为实际的私网地址和端口。NGINX 与 NineData 分开部署时,使用 NineData 主机的私网地址。检查并加载配置。
sudo nginx -t
sudo systemctl reload nginx验证访问。 在企业内网的管理员设备上打开
https://ninedata.intra.example。确认页面正常打开、浏览器没有证书告警,再安排证书更新和续期。
第三步:让 NineData 识别可信来源 IP
如果 NineData 前面有 NGINX 等代理,NineData 直接接收到的连接来自代理。代理需要把实际访问来源写入请求 Header,NineData 才能按该 Header 记录访问来源。上一步的配置会用 NGINX 实际看到的客户端地址覆盖 X-Forwarded-For,不信任客户端自己提交的同名 Header。
NineData 默认读取的来源 IP Header 是 X-Forwarded-For。在容器名为 ninedata 的 Docker 部署示例中,按以下步骤检查并设置:
进入 NiUP 并查看当前配置:
docker exec -it ninedata niupniup> console config get website.realip.headers如果返回
X-Forwarded-For,无需修改。如果返回<no value>,表示没有显式覆盖,NineData 默认读取X-Forwarded-For,也无需修改。如果返回其他名称,将其改为与 NGINX 一致:niup> console config put website.realip.headers X-Forwarded-For修改后重启 Console 使配置生效。重启会短暂中断控制台访问,请安排在合适的维护时段执行:
niup> console restart
通过 HTTPS 入口登录并执行一项会产生审计记录的操作,检查审计日志中的来源 IP 是否与实际访问来源一致。直接访问 Docker 发布端口时,没有可信代理写入的来源 Header,NineData 无法通过该 Header 获取实际访问来源 IP。
如果 NGINX 前面还有其他代理,应先确认 NGINX 实际看到的连接来源,并只信任已确认的上游代理来源。
第四步:在当前版本支持时启用 NineData 自带的 IP 白名单
NineData 的组织级访问 IP 白名单可以限制非系统管理员从哪些 IP 地址登录组织。系统管理员角色不受该白名单限制,因此白名单不能代替企业私有网络对管理入口的保护。
IP 白名单是否可用,以当前私有化部署版本的功能说明和控制台为准。请先确认控制台提供此设置;若没有该设置,不要假设当前版本支持。
- 使用系统管理员账号,在左侧导航栏单击账户管理 > 组织信息。
- 在组织信息页面找到 NineData 自带的访问 IP 白名单设置,开启功能,并按当前页面提示填写允许访问的办公网或 VPN 出口地址。先根据审计日志确认 NineData 识别到的来源 IP,再配置白名单;地址格式和多个地址的填写方式以当前页面提示为准。
- 保存配置。先用普通组织成员账号从允许的内网来源验证登录,再使用专门的测试账号验证未列入来源的访问会被拦截。系统管理员角色不受白名单限制,因此不要用管理员账号判断拦截效果;验证前确认管理员仍可恢复配置。
具体字段和操作说明请参见管理访问 IP 白名单。
第五步:把安全纳入日常维护
维护版本:定期查看对应部署版本的发布说明,按官方升级步骤应用适用的修复。
准备恢复: 升级前备份实际数据目录和配置;使用外部元数据库等服务时,按对应流程备份。
SSH、Docker 管理接口、数据库和集群管理入口也应只允许必要的管理员或 NineData 节点访问;数据库账号按任务授予所需权限。
定期复核访问路径、成员权限、软件版本和备份恢复能力。