部署 AI 工具前,先把服务器安全基线拉起来。很多人拿到 VPS 第一件事就是装 Docker、拉镜像、配 API Key,结果没两天被扫端口、挖矿脚本跑满 CPU,或者 API Key 被人偷刷。主机选技术博客整理一份面向 AI 部署场景的安全清单,从 SSH 加固、防火墙策略、端口管控到 API Key 管理,每一步直接给命令和解释,适合 AI Agent、Claude Code、Codex、Hermes Agent、MCP、Ollama、n8n 等工具上线前执行。

SSH 加固:别让 root 和弱密码裸奔
SSH 是服务器大门,默认端口 22、root 可登录、密码认证——三件套等于告诉扫描器“快来撞库”。
修改默认端口并禁止 root 直接登录
sudo vim /etc/ssh/sshd_config
Port 2222 # 换成 1024-65535 之间随机端口,避开 22
PermitRootLogin no # 禁止 root 直接 SSH
PasswordAuthentication no # 关闭密码登录,只允许密钥
PubkeyAuthentication yes # 确保密钥认证开启
改完后重启 SSH 服务:
sudo systemctl restart sshd
关键:修改端口前,先确保防火墙放行了新端口(见下文),否则你会把自己锁在外面。
生成并配置 SSH 密钥对
本地机器执行:
ssh-keygen -t ed25519 -C "your_email@example.com" # 生成 ed25519 密钥,比 RSA 更安全高效
ssh-copy-id -p 2222 user@your_server_ip # 复制公钥到服务器,user 是你创建的非 root 用户
老鸟叮嘱:不要在服务器上直接生成密钥对,私钥留在本地且加密存储。如果有多台机器,考虑使用 SSH Agent Forwarding 或跳板机,不要把私钥传到服务器上。
防火墙配置:只放行需要的端口
AI 工具通常暴露 Web 服务(如 Open WebUI 的 8080、n8n 的 5678)、API 端口(如 Ollama 的 11434),以及 SSH 端口。防火墙原则:默认拒绝,白名单放行。
使用 UFW 快速配置
sudo ufw default deny incoming # 默认阻止所有入站
sudo ufw default allow outgoing # 允许出站
sudo ufw allow 2222/tcp # 放行 SSH 新端口
sudo ufw allow 80/tcp # HTTP,如果要用反向代理
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow 8080/tcp # 例如 Open WebUI
sudo ufw allow 11434/tcp # Ollama API(仅内网或特定 IP 时用 allow from)
sudo ufw enable
如果 AI Agent 需要对外提供 Webhook,只放行特定来源 IP:
sudo ufw allow from 203.0.113.0/24 to any port 5678 proto tcp # 只允许特定网段访问 n8n Webhook
生产环境建议用 iptables 或 nftables
UFW 适合轻量场景,但复杂规则(如端口转发、连接数限制)建议用 iptables 持久化。例如限制单个 IP 的 SSH 连接频率:
sudo iptables -A INPUT -p tcp –dport 2222 -m connlimit –connlimit-above 3 -j DROP
老鸟叮嘱:防火墙规则写完后,用 `sudo ufw status numbered` 检查,并用 `sudo ufw delete <编号>` 清理多余规则。不要同时运行多个防火墙工具(UFW、firewalld、iptables),会冲突。
端口与服务管控:只跑必要进程
AI 工具经常依赖 Docker 或直接监听端口,但很多默认端口是公开的,容易成为靶子。
检查当前监听端口
sudo ss -tlnp # 列出所有 TCP 监听端口及对应的进程
重点关注:有没有不该暴露的端口(如 MySQL 3306、Redis 6379、Docker 2375/2376)。如果发现,立即停止服务或绑定到 127.0.0.1。
让服务只监听本地地址
以 Ollama 为例,默认监听 0.0.0.0:11434,意味着公网可访问。改为仅本地:
sudo systemctl edit ollama
[Service]
Environment="OLLAMA_HOST=127.0.0.1:11434"
然后重启:
sudo systemctl daemon-reload && sudo systemctl restart ollama
同理,Open WebUI 如果通过 Docker 部署,映射端口时指定 127.0.0.1:
docker run -d -p 127.0.0.1:8080:8080 ghcr.io/open-webui/open-webui:main
这样只有通过 Nginx 反向代理才能访问,避免直接暴露给公网。
使用反向代理统一入口
推荐用 Nginx 或 Caddy 做 SSL 终结和访问控制。例如将 `api.yourdomain.com` 代理到本地的 Ollama API:
nginx
server {
listen 443 ssl;
server_name api.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:11434;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
老鸟叮嘱:不要用 root 跑 Docker 容器。创建专用用户,并将该用户加入 docker 组。容器内的 API 端口不要直接映射到宿主机 0.0.0.0,除非你有严格的防火墙规则。
API Key 管理:别硬编码、别泄露
AI 工具(如 Claude Code、Codex、Hermes Agent)需要调用外部 API,API Key 一旦泄露,轻则被刷额度,重则被用于恶意请求。
使用环境变量替代硬编码
在 `.env` 文件中定义:
OPENAI_API_KEY=sk-xxxx
ANTHROPIC_API_KEY=sk-ant-xxxx
然后通过 `source .env` 或 Docker 的 `–env-file` 注入。永远不要把 `.env` 文件提交到 Git 仓库,在 `.gitignore` 里加上:
.env
*.env
限制 API Key 的权限和来源 IP
OpenAI、Anthropic 等平台允许设置 API Key 的权限(只读、只写、限制模型)和 IP 白名单。务必开启:
• 只允许服务器公网 IP 调用;
• 只赋予必要权限(例如 Claude Code 只需要 `claude-3-5-sonnet` 模型的写入权限,不要给管理 API);
• 定期轮换 Key,尤其是 Key 被第三方工具抓取后。
使用密钥管理工具
如果部署多个 AI Agent,建议用 HashiCorp Vault 或简单的 `pass`(Linux 密码管理器)管理 Key。对于 Docker 环境,可以借助 Docker Secrets:
echo "sk-xxxx" | docker secret create openai_key –
docker service create –secret openai_key …
老鸟叮嘱:不要在生产环境日志里打印 API Key。很多 AI Agent 框架默认打印请求头,必须在启动前关闭调试日志。另外,Webhook 回调 URL 中如果包含 Key(如 `https://api.example.com/?key=xxx`),绝对不可取,因为 URL 会被记录在服务器访问日志中。
老鸟叮嘱:部署前必做的五项检查
1.确认非 root 用户:`whoami` 输出不是 root,日常操作用 `sudo` 提权。
2.检查防火墙状态:`sudo ufw status` 显示 active,且规则只放行必要端口。
3.扫描公网暴露端口:用 `nmap -sV your_server_ip` 从外部机器扫描,看看有没有意料之外的开放端口。
4.检查 API Key 是否泄漏:用 `grep -r "sk-" /var/log` 快速扫一遍日志目录。
5.开启自动安全更新:`sudo apt install unattended-upgrades` 并配置只更新安全补丁。
FAQ
Q1:部署 AI Agent 一定要改 SSH 端口吗?不改会怎样?
A1:不一定强制,但强烈建议改。默认 22 端口每天会被大量扫描器尝试登录,即使使用密钥认证,也会产生大量日志和 CPU 开销。改到随机高位端口能过滤掉 99% 的自动化攻击。
Q2:防火墙允许所有出站,会不会有风险?
A2:出站默认允许是常见做法,但如果你的 AI Agent 只访问特定 API 端点(如 api.openai.com),可以限制出站到白名单 IP/域名,防止失陷后外连 C2。用 `ufw deny out` 再加 `allow out to <IP>` 实现。
Q3:Ollama 的 API 端口必须暴露公网吗?
A3:不需要。Ollama 是本地推理引擎,推荐只监听 127.0.0.1,通过反向代理(如 Nginx)对外提供 HTTPS 访问。如果多个服务器需要调用,考虑使用 WireGuard 或 Tailscale 组网,不暴露公网。
Q4:API Key 被刷了怎么办?
A4:立即在 OpenAI/Anthropic 控制台吊销该 Key,检查调用日志定位来源 IP,然后轮换所有 Key。同时检查服务器是否有后门(如查看 `/tmp` 下可疑文件、检查 crontab 异常任务)。
Q5:用 Docker 部署 AI 工具,还需要在宿主机上配置防火墙吗?
A5:需要。Docker 默认会修改 iptables 规则,但宿主机防火墙仍然是第一道防线。建议在宿主机 UFW 中只放行必要端口(如 80、443、SSH),Docker 映射的端口若只需内网访问,则映射到 127.0.0.1。
Q6:能否用 Fail2ban 保护 SSH?
A6:可以,而且推荐。安装 `fail2ban` 后配置 `jail.local` 监控 SSH 日志,连续失败 3 次封禁 10 分钟。注意:如果改了 SSH 端口,需要在 `jail.local` 中指定 `port=2222`。
总结
AI 工具部署前的安全清单不是可选项,而是必选项。SSH 加固、防火墙策略、端口管控和 API Key 管理这四步,能挡住绝大多数初阶攻击,避免服务器沦为肉鸡或 API 额度被刷爆。每一条命令都经过实战验证,照着做,不会多花你半小时,但能省下后面几天甚至几周的排障时间。
—
**相关阅读:**
– [VPS部署AI工具100讲:AI Agent、Codex、Claude Code、Hermes Agent、Ollama与自动化工作流实战教程](https://www.zhujixuan.com/jishujiaocheng/9606.html)
– [Codex、Claude Code、OpenClaw、Hermes Agent、Ollama、n8n 分别适合什么场景](https://www.zhujixuan.com/jishujiaocheng/9759.html)
– [VPS 部署 AI 工具需要哪些基础?Linux、Docker、Nginx 和域名配置入门](https://www.zhujixuan.com/jishujiaocheng/9747.html)
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9755.html 商家投稿邮箱:zhujixuanblog@qq.com
