FastGPT 生产部署安全手册:从公网入口到密钥、数据库与备份配置全加固
FastGPT 安全加固方案|附配置文件
前言
FastGPT 是一个面向企业和开发者的知识库问答、AI 应用编排与大模型能力集成平台。它通常会接入 OpenAI、Azure OpenAI、OneAPI、PostgreSQL、MongoDB、向量数据库、对象存储、第三方登录、企业内部接口等组件。一旦部署到公网,FastGPT 就不再只是一个“AI 工具”,而是一个承载业务数据、知识库文档、用户身份、API Key、模型调用权限和内部服务访问能力的核心系统。
很多团队在初次部署 FastGPT 时,更关注“能不能跑起来”“模型能不能调用”“知识库能不能上传”,而忽略了安全加固。常见问题包括:管理后台直接暴露公网、默认口令未修改、数据库端口开放、没有 HTTPS、缺少访问频率限制、日志中泄露敏感信息、API Key 明文分散存放、容器权限过高、对象存储桶公开、备份未加密等。这些问题一旦被利用,轻则造成 Token 被盗刷、知识库泄露,重则导致企业内部接口被间接访问,甚至引发合规风险。
本文将围绕 FastGPT 的实际部署场景,从网络、反向代理、身份认证、数据库、容器、配置文件、日志审计、备份恢复、运维监控等方面,给出一套较完整的安全加固方案,并附上可参考的 Nginx、Docker Compose、环境变量与系统防火墙配置示例。你可以根据自己的部署方式进行裁剪和落地。
一、安全加固总体思路
FastGPT 的安全加固不应只依赖某一个配置项,而应采用“分层防御”的方式。简单来说,可以分为以下几层:
- 入口层安全:通过 HTTPS、反向代理、WAF、访问频率限制、IP 白名单等方式降低公网攻击面。
- 身份层安全:强化管理员账号、用户权限、第三方登录、API Token 管理。
- 应用层安全:关闭不必要的调试信息,限制上传文件类型和大小,做好接口权限校验。
- 数据层安全:保护 MongoDB、PostgreSQL、Redis、对象存储和向量数据,避免数据库裸奔。
- 运行环境安全:降低容器权限,隔离网络,限制资源,最小化宿主机暴露端口。
- 密钥安全:统一管理 OpenAI Key、数据库密码、JWT Secret、对象存储密钥等敏感信息。
- 审计与恢复:记录关键日志,建立告警机制,定期备份并验证恢复流程。
安全加固的目标不是“绝对安全”,而是尽可能降低暴露面、提高攻击成本、减少误配置带来的风险,并保证出现问题时能够追踪、恢复和止损。
二、部署架构建议
推荐的 FastGPT 生产部署架构如下:
用户浏览器
↓ HTTPS
Nginx / 网关 / WAF
↓ 内网转发
FastGPT Web / API 服务
↓
MongoDB / PostgreSQL / Redis / 向量数据库
↓
对象存储 / 模型网关 / 第三方大模型服务
核心原则:
- 只暴露 Nginx 的 80/443 端口,不要将 FastGPT、MongoDB、PostgreSQL、Redis 等服务端口直接暴露到公网。
- 数据库与应用服务放在同一个私有网络中,仅允许容器或内网主机访问。
- 模型网关单独管理,例如使用 OneAPI、LiteLLM、OpenAI Proxy 时,应设置调用额度、鉴权、日志审计和限流。
- 管理后台限制访问范围,企业内部使用时建议通过 VPN、堡垒机、零信任网关或 IP 白名单访问。
- 生产环境与测试环境分离,不要共用数据库、模型 Key、对象存储 Bucket 和管理员账号。
三、Nginx 反向代理安全配置
Nginx 是 FastGPT 公网入口的第一道防线。它不仅负责 HTTPS,还可以做安全响应头、请求体限制、限流、防爬虫和基础访问控制。
以下是一个参考配置:
server {
listen 80;
server_name fastgpt.example.com;
return 301 https://$host$request_uri;
}
limit_req_zone $binary_remote_addr zone=fastgpt_limit:10m rate=10r/s;
server {
listen 443 ssl http2;
server_name fastgpt.example.com;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
client_max_body_size 50m;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
access_log /var/log/nginx/fastgpt_access.log;
error_log /var/log/nginx/fastgpt_error.log warn;
location / {
limit_req zone=fastgpt_limit burst=30 nodelay;
proxy_pass http://fastgpt:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
}
配置说明
return 301 https://$host$request_uri:强制 HTTP 跳转 HTTPS。client_max_body_size 50m:限制上传文件大小,避免大文件拖垮服务。limit_req_zone:限制单 IP 请求频率,防止接口被刷。Strict-Transport-Security:启用 HSTS,降低中间人攻击风险。X-Frame-Options:防止页面被恶意嵌入 iframe。proxy_read_timeout 300s:适配大模型生成内容时间较长的情况。
如果 FastGPT 只给企业内部员工使用,建议进一步增加 IP 白名单:
location / {
allow 10.0.0.0/8;
allow 192.168.0.0/16;
allow 203.0.113.10;
deny all;
proxy_pass http://fastgpt:3000;
}
如果无法固定 IP,可以考虑接入 Cloudflare Zero Trust、Tailscale、WireGuard、OpenVPN 或企业 SSO 网关。
四、Docker Compose 安全配置参考
很多 FastGPT 部署都基于 Docker Compose。默认情况下,为了方便调试,部分服务可能会映射端口到宿主机。生产环境中,应尽量减少端口暴露,并使用内部网络通信。
下面是一个简化后的安全配置示例:
version: "3.8"
services:
fastgpt:
image: ghcr.io/labring/fastgpt:latest
container_name: fastgpt
restart: always
env_file:
- .env
depends_on:
- mongo
- postgres
networks:
- fastgpt_internal
expose:
- "3000"
read_only: false
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
logging:
driver: json-file
options:
max-size: "100m"
max-file: "5"
mongo:
image: mongo:6
container_name: fastgpt_mongo
restart: always
command: ["mongod", "--auth", "--bind_ip_all"]
environment:
MONGO_INITDB_ROOT_USERNAME: fastgpt_root
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ROOT_PASSWORD}
volumes:
- ./data/mongo:/data/db
networks:
- fastgpt_internal
expose:
- "27017"
security_opt:
- no-new-privileges:true
logging:
driver: json-file
options:
max-size: "100m"
max-file: "5"
postgres:
image: ankane/pgvector:latest
container_name: fastgpt_pg
restart: always
environment:
POSTGRES_USER: fastgpt
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: fastgpt
volumes:
- ./data/postgres:/var/lib/postgresql/data
networks:
- fastgpt_internal
expose:
- "5432"
security_opt:
- no-new-privileges:true
logging:
driver: json-file
options:
max-size: "100m"
max-file: "5"
nginx:
image: nginx:1.25-alpine
container_name: fastgpt_nginx
restart: always
depends_on:
- fastgpt
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./nginx/ssl:/etc/nginx/ssl:ro
- ./logs/nginx:/var/log/nginx
networks:
- fastgpt_internal
security_opt:
- no-new-privileges:true
networks:
fastgpt_internal:
driver: bridge
加固要点
- FastGPT、MongoDB、PostgreSQL 使用
expose,只在 Docker 内部网络可访问。 - 只有 Nginx 映射
80和443到宿主机。 - 数据库密码通过
.env注入,不要直接写死在docker-compose.yml中。 - 日志设置
max-size和max-file,避免日志无限增长占满磁盘。 no-new-privileges:true可降低容器内进程提权风险。cap_drop: ALL可减少容器 Linux capability,但实际生产中需结合镜像运行情况测试。
五、环境变量配置文件示例
.env 文件是 FastGPT 部署中最容易被忽视的敏感文件。它通常包含数据库密码、模型 Key、JWT Secret、对象存储密钥等,一旦泄露,攻击者可能直接接管系统或盗刷模型额度。
参考配置如下:
NODE_ENV=production
MONGO_ROOT_PASSWORD=请替换为高强度随机密码
POSTGRES_PASSWORD=请替换为高强度随机密码
JWT_SECRET=请替换为至少32位随机字符串
TOKEN_KEY=请替换为至少32位随机字符串
ROOT_KEY=请替换为高强度管理员初始化密钥
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_API_KEY=sk-请替换为真实Key
S3_ENDPOINT=https://s3.example.com
S3_ACCESS_KEY=请替换为对象存储AccessKey
S3_SECRET_KEY=请替换为对象存储SecretKey
S3_BUCKET=fastgpt-private
建议使用以下方式生成随机密钥:
openssl rand -base64 32
.env 文件权限建议设置为:
chmod 600 .env
chown root:root .env
同时必须将 .env 加入 .gitignore:
.env
.env.*
!.env.example
生产环境中,不建议将真实密钥提交到 Git 仓库,也不建议通过聊天工具、文档截图、工单附件等方式传播密钥。更成熟的做法是接入 Vault、AWS Secrets Manager、阿里云 KMS、腾讯云 KMS、Kubernetes Secret 或 CI/CD Secret 管理系统。
六、数据库安全加固
FastGPT 依赖的数据库中可能存储用户信息、应用配置、知识库索引、对话记录、文件元数据等内容,因此数据库安全是重中之重。
MongoDB 加固建议
- 必须开启认证:不要使用无密码 MongoDB。
- 禁止公网访问:不要将
27017映射到公网。 - 使用最小权限账号:不要让应用长期使用 root 用户连接。
- 定期备份:备份文件应加密保存。
- 限制容器网络:仅允许 FastGPT 服务访问 MongoDB。
创建业务账号示例:
use fastgpt
db.createUser({
user: "fastgpt_app",
pwd: "请替换为高强度密码",
roles: [
{ role: "readWrite", db: "fastgpt" }
]
})
PostgreSQL / pgvector 加固建议
- 使用强密码:避免
123456、password、项目名等弱口令。 - 关闭公网端口:不要暴露
5432。 - 限制连接来源:通过 Docker 网络、防火墙或
pg_hba.conf控制来源。 - 定期执行 VACUUM 和备份:保持性能与可恢复性。
- 按环境分库:生产、测试、开发不要共用一个数据库。
备份示例:
docker exec fastgpt_pg pg_dump -U fastgpt fastgpt > backup_fastgpt_$(date +%F).sql
备份后建议加密:
gpg -c backup_fastgpt_2025-01-01.sql
七、系统防火墙配置
即使 Docker Compose 已经限制端口,宿主机防火墙仍然是必要的兜底措施。以 Ubuntu 的 UFW 为例:
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw status verbose
如果 SSH 只允许固定办公 IP 访问,建议这样配置:
ufw delete allow 22/tcp
ufw allow from 203.0.113.10 to any port 22 proto tcp
如果服务器部署在云平台,还需要同时检查云安全组。很多安全事故并不是系统防火墙没配,而是云安全组放开了 0.0.0.0/0:27017、0.0.0.0/0:5432 或 0.0.0.0/0:6379。
生产环境建议只开放:
80/tcp:用于 HTTP 跳转 HTTPS。443/tcp:用于 HTTPS 访问。22/tcp:仅允许可信 IP 或通过堡垒机访问。
八、账号与权限安全
FastGPT 的账号体系也需要进行安全治理。尤其是管理员账号、团队权限、应用发布权限、API 调用权限,都应按照最小权限原则进行配置。
建议如下:
- 管理员账号单独使用:不要多人共用同一个管理员账号。
- 启用强密码策略:密码长度建议不少于 12 位,包含大小写、数字和特殊字符。
- 离职人员及时禁用:建立账号回收流程。
- 区分开发、测试、生产权限:避免普通用户拥有生产环境管理权限。
- 定期检查 API Token:清理长期不用的 Token。
- 限制公开应用范围:不要将内部知识库应用直接公开到互联网。
- 谨慎开启注册入口:如果不是公网 SaaS,不建议开放任意用户注册。
如果企业已经有统一身份认证体系,建议通过 OIDC、OAuth2、LDAP、企业微信、飞书或钉钉等方式接入统一登录,并在身份提供方侧启用 MFA。这样可以减少本地账号管理压力,也能更方便地做离职回收和登录审计。
九、模型 API Key 与额度保护
FastGPT 往往会连接大模型服务,API Key 一旦泄露,攻击者可以直接消耗你的模型额度。相比普通业务接口,模型 API Key 的经济风险更明显,因为调用成本可能在短时间内快速增加。
建议采取以下措施:
- 不要在前端暴露模型 Key:所有模型调用必须由后端代理完成。
- 每个环境使用独立 Key:生产、测试、开发环境分开。
- 设置额度上限:在 OpenAI、Azure、OneAPI 或云厂商侧设置预算限制。
- 启用调用日志:记录调用来源、模型名称、Token 消耗和异常峰值。
- 定期轮换 Key:尤其是人员变动或疑似泄露后。
- 按应用分配 Key 或渠道:便于定位异常消耗来源。
- 限制高成本模型:对 GPT-4、Claude、Gemini 高阶模型设置更严格权限。
如果使用 OneAPI 或类似模型网关,可以为不同团队、应用和用户设置独立令牌,并配置额度、频率、模型白名单和过期时间。这样即使某个应用 Token 泄露,也不会影响整个组织的模型账户。
十、文件上传与知识库安全
FastGPT 的知识库功能通常支持上传文档、网页抓取、文本导入等能力。这些入口如果不加限制,可能带来恶意文件、超大文件、敏感数据误上传等风险。
建议:
- 限制上传大小:Nginx 与应用层都应限制。
- 限制文件类型:只允许业务需要的格式,如 PDF、DOCX、TXT、MD、CSV。
- 对象存储私有化:Bucket 不应公开读写。
- 敏感文件分级管理:涉及合同、财务、人事、客户数据的知识库应单独授权。
- 禁止普通用户上传可执行文件:如
.sh、.exe、.js、.php等。 - 对外分享谨慎开启:公开问答应用可能间接泄露知识库内容。
- 定期清理过期文档:避免历史数据长期堆积。
对象存储建议使用私有 Bucket,并通过服务端生成临时访问链接。不要将 AccessKey 写入前端,也不要将 Bucket 设置为公共读写。
十一、日志审计与告警
安全不是配置完就结束,持续监控同样重要。FastGPT 生产环境至少应关注以下日志:
- Nginx 访问日志与错误日志。
- FastGPT 应用日志。
- 数据库登录与异常查询日志。
- 模型网关调用日志。
- 系统 SSH 登录日志。
- 容器重启与异常退出日志。
可以重点关注以下异常行为:
- 单 IP 高频访问登录接口。
- API Token 调用量突然升高。
- 模型 Token 消耗异常增长。
- 知识库批量下载或异常查询。
- 管理员账号异地登录。
- 数据库连接失败次数异常。
- 容器频繁重启。
- 磁盘空间快速下降。
简单的日志查看命令:
docker logs --tail=200 fastgpt
docker logs --tail=200 fastgpt_nginx
tail -f ./logs/nginx/fastgpt_access.log
更成熟的方案可以接入 Prometheus、Grafana、Loki、ELK、Datadog、阿里云 SLS 或腾讯云 CLS,并设置告警规则。对于模型调用费用,还应设置单日预算告警和异常消耗告警。
十二、备份与恢复方案
没有经过验证的备份,等于没有备份。FastGPT 涉及数据库、对象存储、配置文件和证书等多类数据,需要统一规划。
建议备份内容包括:
- MongoDB 数据。
- PostgreSQL / pgvector 数据。
- 对象存储中的上传文件。
.env配置文件。- Nginx 配置和 SSL 证书。
- Docker Compose 文件。
- 自定义模型配置与应用配置。
备份策略建议采用“3-2-1 原则”:
- 至少保留 3 份数据。
- 使用 2 种不同介质或存储位置。
- 至少 1 份异地备份。
示例备份脚本:
#!/bin/bash
set -e
BACKUP_DIR="/backup/fastgpt/$(date +%F)"
mkdir -p "$BACKUP_DIR"
docker exec fastgpt_mongo mongodump \
--username fastgpt_root \
--password "$MONGO_ROOT_PASSWORD" \
--authenticationDatabase admin \
--out /tmp/mongo_backup
docker cp fastgpt_mongo:/tmp/mongo_backup "$BACKUP_DIR/mongo"
docker exec fastgpt_pg pg_dump -U fastgpt fastgpt > "$BACKUP_DIR/postgres.sql"
cp .env "$BACKUP_DIR/env.backup"
cp docker-compose.yml "$BACKUP_DIR/docker-compose.yml"
tar -czf "$BACKUP_DIR.tar.gz" "$BACKUP_DIR"
gpg -c "$BACKUP_DIR.tar.gz"
rm -rf "$BACKUP_DIR" "$BACKUP_DIR.tar.gz"
实际使用时,建议将数据库密码从安全的 Secret 管理系统中读取,而不是直接写在脚本里。同时,应定期在测试环境执行恢复演练,确认备份文件真的可用。
十三、上线前安全检查清单
上线前可以按照以下清单逐项确认:
- [ ] 已启用 HTTPS,HTTP 自动跳转 HTTPS。
- [ ] Nginx 已配置安全响应头。
- [ ] 已限制上传文件大小。
- [ ] 已配置接口访问频率限制。
- [ ] MongoDB 未暴露公网。
- [ ] PostgreSQL 未暴露公网。
- [ ] Redis 或其他缓存服务未暴露公网。
- [ ]
.env未提交到 Git 仓库。 - [ ] 所有默认密码已修改。
- [ ] 管理员账号使用强密码。
- [ ] 模型 API Key 设置了额度限制。
- [ ] 对象存储 Bucket 非公开读写。
- [ ] Docker 只暴露必要端口。
- [ ] 防火墙和云安全组仅开放
80、443和受限22。 - [ ] 日志已设置保留策略。
- [ ] 已配置备份任务。
- [ ] 已验证备份恢复流程。
- [ ] 已建立异常调用与费用告警。
- [ ] 已记录应急联系人和密钥轮换流程。
十四、应急处理建议
如果怀疑 FastGPT 遭到入侵或密钥泄露,应优先止损:
- 立即关闭公网入口:临时下线 Nginx 或安全组阻断访问。
- 轮换所有密钥:包括模型 Key、数据库密码、JWT Secret、对象存储密钥。
- 检查管理员账号:禁用可疑账号,重置管理员密码。
- 导出并保存日志:避免容器重启或日志轮转导致证据丢失。
- 检查模型调用账单:确认是否存在异常消耗。
- 检查数据库数据完整性:确认是否被删除、篡改或批量导出。
- 从干净备份恢复:必要时重建环境,而不是在可疑环境上继续运行。
- 复盘攻击路径:修复根因后再恢复服务。
应急时不要只重启服务。重启可能会破坏现场,也不能解决密钥泄露、弱口令、端口暴露等根因问题。
结语
FastGPT 的价值在于让企业更高效地构建 AI 应用和知识库问答系统,但它同时也连接了大量敏感资源:企业文档、用户数据、模型额度、内部接口和业务流程。因此,生产环境部署 FastGPT 时,必须从一开始就把安全作为基础能力,而不是等到出现问题后再补救。
一套可靠的 FastGPT 安全方案,应至少做到:公网只暴露 HTTPS 入口,数据库不裸奔,密钥不硬编码,账号权限最小化,文件上传有限制,模型调用有额度,日志可审计,备份可恢复。本文提供的 Nginx、Docker Compose、环境变量、防火墙和备份配置,可以作为生产加固的起点。最终落地时,还需要结合企业自身的网络架构、合规要求、用户规模和运维能力持续优化。
安全不是一次性配置,而是一套持续运营机制。只有把访问控制、密钥管理、日志审计、备份恢复和应急响应都纳入日常运维,FastGPT 才能真正稳定、安全地支撑企业级 AI 应用。