1. 首页 > 技术教程 > 正文

AI 工具部署前的服务器安全清单:SSH、防火墙、端口和 API Key 管理

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

zhujixuan TASK 083

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