上一篇 下一篇 分享链接 返回 返回顶部

FastGPT 生产环境安全部署与加固实战手册

发布人:慈云数据-客服中心 发布时间:8小时前 阅读量:2

FastGPT 安全加固方案|附完整命令

FastGPT 作为一套面向企业知识库、智能问答与 AI 应用编排的系统,通常会连接大模型 API、向量数据库、文件存储、用户账号体系以及内部业务数据。一旦部署到公网或企业内网生产环境,它就不再只是一个“AI 工具”,而是承载敏感知识资产、访问凭证和业务入口的关键系统。

因此,FastGPT 的安全加固不能只停留在“能跑起来”层面,而应从服务器、Docker、数据库、反向代理、访问控制、密钥管理、备份恢复、日志审计等多个维度进行系统化治理。本文将给出一套适合生产环境的 FastGPT 安全加固方案,并附上可直接参考的完整命令。

说明:以下命令以 Ubuntu 22.04 / 24.04、Docker Compose 部署方式为例。不同系统或部署架构可按实际情况调整。


一、安全加固总体思路

FastGPT 常见部署架构通常包含以下组件:

  • FastGPT Web / API 服务
  • MongoDB
  • PostgreSQL / pgvector 或其他向量数据库
  • Redis
  • OneAPI / OpenAI API 代理服务
  • Nginx / Caddy 反向代理
  • Docker / Docker Compose
  • 文件上传目录、日志目录、配置文件和环境变量文件

安全加固的核心目标包括:

  1. 减少暴露面:不必要的端口不对公网开放。
  2. 强化认证:避免弱密码、默认密码、匿名访问。
  3. 保护密钥:API Key、数据库密码、JWT Secret 等不得泄露。
  4. 限制权限:容器、系统用户、数据库用户均应最小权限运行。
  5. 加密传输:公网访问必须启用 HTTPS。
  6. 日志审计:保留关键访问与异常行为日志。
  7. 备份恢复:确保数据损坏或被攻击后可恢复。
  8. 持续更新:及时升级系统、镜像和依赖。

二、服务器基础安全加固

1. 更新系统软件包

部署前应先更新系统,修复已知漏洞。

sudo apt update
sudo apt upgrade -y
sudo apt autoremove -y

安装常用安全工具:

sudo apt install -y curl wget vim git ufw fail2ban unattended-upgrades ca-certificates gnupg lsb-release

2. 创建普通运维用户

不要长期使用 root 用户进行日常运维。建议创建普通用户,并授予 sudo 权限。

sudo adduser fastgptops
sudo usermod -aG sudo fastgptops

切换到新用户:

su - fastgptops

3. 配置 SSH 密钥登录

在本地生成 SSH 密钥:

ssh-keygen -t ed25519 -C "fastgpt-prod"

将公钥复制到服务器:

ssh-copy-id fastgptops@服务器IP

如果没有 ssh-copy-id,也可以手动追加:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

4. 禁止 root 远程登录和密码登录

编辑 SSH 配置文件:

sudo vim /etc/ssh/sshd_config

建议修改或确认以下配置:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
PermitEmptyPasswords no
X11Forwarding no
ClientAliveInterval 300
ClientAliveCountMax 2

重启 SSH 服务:

sudo systemctl restart ssh

注意:修改前务必保留一个已登录的 SSH 会话,确认新会话可以正常登录后再关闭旧会话,避免把自己锁在服务器外。


三、防火墙与端口暴露控制

FastGPT 相关服务中,真正需要对公网开放的通常只有:

  • 80:HTTP,用于证书申请或跳转 HTTPS
  • 443:HTTPS,正式访问入口
  • 22:SSH,仅建议限制为固定管理 IP

MongoDB、PostgreSQL、Redis、FastGPT 内部端口都不应直接暴露到公网。


1. 配置 UFW 防火墙

先设置默认策略:

sudo ufw default deny incoming
sudo ufw default allow outgoing

允许 SSH。如果有固定办公 IP,建议只允许固定 IP:

sudo ufw allow from 管理端公网IP to any port 22 proto tcp

如果暂时没有固定 IP,可先开放 22,但不推荐长期使用:

sudo ufw allow 22/tcp

开放 Web 端口:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

启用防火墙:

sudo ufw enable
sudo ufw status verbose

2. 检查公网监听端口

查看当前监听端口:

sudo ss -tulnp

重点检查是否存在以下端口对公网监听:

27017   # MongoDB
5432    # PostgreSQL
6379    # Redis
3000    # FastGPT Web/API

如果这些端口出现在 0.0.0.0 或公网网卡上,应立即调整 Docker Compose 或防火墙策略。


四、Docker 安全加固

FastGPT 常见部署方式是 Docker Compose。Docker 的便利性很高,但如果配置不当,也容易造成横向移动、容器逃逸风险扩大或敏感目录泄露。


1. 安装 Docker 官方版本

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

验证安装:

docker version
docker compose version

2. 避免容器使用特权模式

检查 docker-compose.yml 中是否存在:

privileged: true

如果不是必须,应删除该配置。FastGPT 正常运行通常不需要特权容器。


3. 避免宿主机敏感目录挂载

避免出现类似配置:

volumes:
  - /:/host
  - /etc:/etc
  - /var/run/docker.sock:/var/run/docker.sock

尤其是挂载 Docker Socket:

- /var/run/docker.sock:/var/run/docker.sock

这几乎等同于给容器宿主机 root 权限,应避免在 FastGPT 业务容器中使用。


4. 为 Docker 配置日志大小限制

防止容器日志无限增长导致磁盘写满:

sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json

写入:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "5"
  },
  "live-restore": true
}

重启 Docker:

sudo systemctl restart docker

五、FastGPT 配置文件安全

FastGPT 部署通常会包含 .envconfig.jsondocker-compose.yml 等配置文件,其中可能存放数据库密码、API Key、Token Secret 等敏感信息。


1. 限制配置文件权限

假设 FastGPT 部署目录为 /opt/fastgpt

sudo mkdir -p /opt/fastgpt
sudo chown -R fastgptops:fastgptops /opt/fastgpt
cd /opt/fastgpt

限制 .env 权限:

chmod 600 .env
chmod 600 config.json 2>/dev/null || true
chmod 600 docker-compose.yml

查看权限:

ls -lah

2. 使用强随机密钥

不要使用示例配置中的默认密码。可以用以下命令生成强随机字符串:

openssl rand -base64 32

生成多个密钥:

for i in {1..5}; do openssl rand -base64 32; done

建议至少替换以下内容:

  • MongoDB 密码
  • PostgreSQL 密码
  • Redis 密码
  • JWT Secret
  • FastGPT 管理员密码
  • OneAPI Token / OpenAI API Key
  • 文件存储 AccessKey / SecretKey

3. 避免提交敏感配置到 Git

如果部署目录是 Git 仓库,务必添加 .gitignore

cat > .gitignore <<'EOF'
.env
*.env
config.json
*.key
*.pem
*.crt
data/
logs/
backup/
EOF

检查是否已被 Git 跟踪:

git status
git ls-files | grep -E '(\.env|config\.json|\.key|\.pem)'

如果敏感文件已经被提交过,应立即从 Git 中移除并更换密钥:

git rm --cached .env config.json
git commit -m "remove sensitive config files"

六、数据库安全加固

FastGPT 的知识库、用户数据、应用配置和向量数据通常存储在数据库中。数据库一旦暴露,后果远比 Web 被扫描更严重。


1. MongoDB 不暴露公网

Docker Compose 中 MongoDB 不应映射公网端口。避免如下配置:

ports:
  - "27017:27017"

如果只需要容器内部访问,应改为内部网络,不写 ports,或只绑定本机:

ports:
  - "127.0.0.1:27017:27017"

更推荐完全不暴露:

expose:
  - "27017"

2. PostgreSQL 不暴露公网

避免:

ports:
  - "5432:5432"

如需本机维护访问:

ports:
  - "127.0.0.1:5432:5432"

否则使用:

expose:
  - "5432"

3. Redis 设置密码并禁止公网访问

Redis 一定不要裸露到公网。若使用 Redis,应设置强密码:

requirepass 替换为强密码
bind 127.0.0.1
protected-mode yes

Docker 环境中可通过启动命令设置:

command: redis-server --requirepass 替换为强密码 --appendonly yes

4. 手动验证端口未公网暴露

在服务器上查看:

sudo ss -tulnp | grep -E '27017|5432|6379'

在外部机器扫描:

nmap -Pn -p 22,80,443,27017,5432,6379 服务器IP

期望结果是只有 2280443 根据策略开放,数据库端口均不可访问。


七、Nginx HTTPS 反向代理加固

生产环境不建议直接通过 http://IP:3000 访问 FastGPT,而应通过 Nginx 或 Caddy 反代,并启用 HTTPS。


1. 安装 Nginx 和 Certbot

sudo apt install -y nginx certbot python3-certbot-nginx

启动 Nginx:

sudo systemctl enable nginx
sudo systemctl start nginx

2. 配置域名反向代理

假设域名为 fastgpt.example.com,FastGPT 服务监听在本机 127.0.0.1:3000

创建配置:

sudo vim /etc/nginx/sites-available/fastgpt.conf

写入:

server {
    listen 80;
    server_name fastgpt.example.com;

    client_max_body_size 100m;

    location / {
        proxy_pass http://127.0.0.1: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";
    }
}

启用配置:

sudo ln -s /etc/nginx/sites-available/fastgpt.conf /etc/nginx/sites-enabled/fastgpt.conf
sudo nginx -t
sudo systemctl reload nginx

3. 申请 HTTPS 证书

sudo certbot --nginx -d fastgpt.example.com

检查自动续期:

sudo certbot renew --dry-run

4. 增加安全响应头

编辑 Nginx 配置:

sudo vim /etc/nginx/sites-available/fastgpt.conf

server 块内添加:

add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" 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;

测试并重载:

sudo nginx -t
sudo systemctl reload nginx

八、登录与访问控制加固

FastGPT 如果开放给企业员工或客户使用,账号体系必须重点加固。


1. 禁用默认管理员密码

如果部署初期使用了默认管理员账号或示例密码,应立即修改。建议使用不少于 16 位的随机密码,包含大小写字母、数字和符号。

生成密码:

openssl rand -base64 24

2. 限制后台访问来源

如果 FastGPT 管理端只给公司内部使用,可以通过 Nginx 限制 IP。

示例:只允许指定办公网 IP 访问 /admin

location /admin {
    allow 办公网公网IP;
    deny all;

    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

重载配置:

sudo nginx -t
sudo systemctl reload nginx

3. 增加基础认证保护

如果需要额外保护某些路径,可以使用 Nginx Basic Auth。

安装工具:

sudo apt install -y apache2-utils

创建账号:

sudo htpasswd -c /etc/nginx/.fastgpt_htpasswd admin

在 Nginx location 中加入:

auth_basic "FastGPT Restricted";
auth_basic_user_file /etc/nginx/.fastgpt_htpasswd;

重载:

sudo nginx -t
sudo systemctl reload nginx

九、Fail2ban 防暴力破解

Fail2ban 可以根据日志自动封禁恶意 IP,适合保护 SSH 和 Nginx。


1. 启用 SSH 防护

创建本地配置:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vim /etc/fail2ban/jail.local

确认或添加:

[sshd]
enabled = true
port = ssh
maxretry = 5
findtime = 10m
bantime = 1h

重启:

sudo systemctl enable fail2ban
sudo systemctl restart fail2ban

查看状态:

sudo fail2ban-client status
sudo fail2ban-client status sshd

2. 为 Nginx 添加基础防护

创建 Nginx 404 扫描防护规则:

sudo vim /etc/fail2ban/filter.d/nginx-fastgpt-scan.conf

写入:

[Definition]
failregex = ^ -.*"(GET|POST).*(/\.env|/wp-admin|/phpmyadmin|/adminer|/server-status).*" (403|404|444)
ignoreregex =

创建 jail:

sudo vim /etc/fail2ban/jail.d/nginx-fastgpt.conf

写入:

[nginx-fastgpt-scan]
enabled = true
port = http,https
filter = nginx-fastgpt-scan
logpath = /var/log/nginx/access.log
maxretry = 3
findtime = 10m
bantime = 6h

重启:

sudo systemctl restart fail2ban
sudo fail2ban-client status nginx-fastgpt-scan

十、备份与恢复策略

安全加固不仅是防攻击,也包括被误删、磁盘损坏、升级失败后的快速恢复能力。


1. 创建备份目录

sudo mkdir -p /opt/fastgpt-backup
sudo chown -R fastgptops:fastgptops /opt/fastgpt-backup
chmod 700 /opt/fastgpt-backup

2. 备份 MongoDB

假设 MongoDB 容器名为 mongo

docker exec mongo mongodump \
  --username 用户名 \
  --password 密码 \
  --authenticationDatabase admin \
  --archive=/tmp/fastgpt-mongo.archive

复制到宿主机:

docker cp mongo:/tmp/fastgpt-mongo.archive /opt/fastgpt-backup/fastgpt-mongo-$(date +%F).archive

3. 备份 PostgreSQL

假设 PostgreSQL 容器名为 pg,数据库名为 postgres

docker exec pg pg_dump \
  -U 用户名 \
  -d postgres \
  -F c \
  -f /tmp/fastgpt-pg.dump

复制到宿主机:

docker cp pg:/tmp/fastgpt-pg.dump /opt/fastgpt-backup/fastgpt-pg-$(date +%F).dump

4. 备份配置文件

tar -czf /opt/fastgpt-backup/fastgpt-config-$(date +%F).tar.gz \
  /opt/fastgpt/.env \
  /opt/fastgpt/docker-compose.yml \
  /opt/fastgpt/config.json

5. 设置备份保留周期

只保留最近 14 天备份:

find /opt/fastgpt-backup -type f -mtime +14 -delete

可以写入定时任务:

crontab -e

添加:

0 3 * * * /usr/local/bin/fastgpt-backup.sh >> /var/log/fastgpt-backup.log 2>&1

十一、日志审计与异常监控

FastGPT 生产环境至少应关注以下日志:

  • Nginx access/error 日志
  • Docker 容器日志
  • FastGPT 应用日志
  • MongoDB / PostgreSQL / Redis 日志
  • SSH 登录日志
  • Fail2ban 封禁日志

1. 查看 Docker 日志

docker ps
docker logs --tail=200 fastgpt
docker logs -f fastgpt

查看最近异常:

docker logs fastgpt 2>&1 | grep -Ei "error|fail|exception|unauthorized|forbidden"

2. 查看系统登录日志

sudo journalctl -u ssh --since "24 hours ago"
sudo last
sudo lastb

3. 查看 Nginx 异常访问

sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log

统计访问最多的 IP:

sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head

查找敏感路径扫描:

sudo grep -Ei "wp-admin|phpmyadmin|\.env|adminer|server-status" /var/log/nginx/access.log

十二、系统自动安全更新

开启 unattended-upgrades 可以自动安装安全补丁。

sudo dpkg-reconfigure --priority=low unattended-upgrades

确认配置:

sudo vim /etc/apt/apt.conf.d/20auto-upgrades

建议内容:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "7";

手动测试:

sudo unattended-upgrades --dry-run --debug

十三、FastGPT 升级安全建议

升级前不要直接 docker compose pull && docker compose up -d,生产环境建议按以下流程执行:

  1. 阅读 FastGPT 官方更新说明。
  2. 备份数据库和配置文件。
  3. 在测试环境验证升级。
  4. 固定镜像版本,不使用不确定的 latest
  5. 升级后检查日志、核心功能和知识库检索效果。

示例升级命令:

cd /opt/fastgpt

docker compose ps
docker compose pull
docker compose down
docker compose up -d
docker compose logs -f --tail=200

如果需要回滚,应提前记录旧版本镜像:

docker images | grep fastgpt

十四、生产环境安全检查清单

上线前建议逐项检查:

  • [ ] SSH 已禁用 root 登录
  • [ ] SSH 已禁用密码登录
  • [ ] 防火墙只开放必要端口
  • [ ] MongoDB 未暴露公网
  • [ ] PostgreSQL 未暴露公网
  • [ ] Redis 未暴露公网且设置密码
  • [ ] FastGPT 未直接暴露内部端口
  • [ ] 已启用 HTTPS
  • [ ] Nginx 已配置安全响应头
  • [ ] .env 和配置文件权限已限制
  • [ ] 所有默认密码已更换
  • [ ] API Key 未提交到 Git
  • [ ] Docker 未使用特权容器
  • [ ] 容器日志已设置大小限制
  • [ ] 已配置数据库备份
  • [ ] 已测试恢复流程
  • [ ] 已启用 Fail2ban
  • [ ] 已开启系统安全更新
  • [ ] 已建立升级前备份流程

十五、常用一键检查命令汇总

查看开放端口:

sudo ss -tulnp

查看防火墙状态:

sudo ufw status verbose

查看 Docker 容器:

docker ps

查看容器端口映射:

docker ps --format "table {{.Names}}\t{{.Ports}}"

检查配置文件权限:

ls -lah /opt/fastgpt

查找敏感信息:

grep -RniE "password|secret|apikey|api_key|token" /opt/fastgpt

查看 Nginx 配置是否正确:

sudo nginx -t

查看证书状态:

sudo certbot certificates

查看 Fail2ban 状态:

sudo fail2ban-client status

查看最近 SSH 登录:

sudo last -a | head

查看失败登录:

sudo lastb | head

结语

FastGPT 的安全加固不是一次性动作,而是一套持续运行的安全机制。对于生产环境而言,最重要的原则是:只暴露必要入口、所有默认密码必须替换、数据库绝不裸露公网、敏感配置严格保护、备份必须可恢复、日志必须可追踪

如果是个人测试环境,可以根据实际情况简化部分步骤;但只要 FastGPT 承载企业知识库、客户数据、内部文档或商业应用,就应按生产级标准部署和维护。相比事后补救,提前做好安全加固、访问控制和备份恢复,成本更低,也更可靠。

目录结构
全文