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

部署 AI 工具前必须做的 10 项 VPS 安全设置

部署 AI 工具前,先把 VPS 安全搞扎实。不管是跑 Ollama、Open WebUI,还是折腾 Claude Code、Hermes Agent、n8n,一旦端口裸奔、SSH 弱口令、防火墙没开,你的 VPS 分分钟变成矿机或肉鸡。主机选技术博客整理了 10 项必须做的安全设置,适合所有跑 AI 应用、AI Agent 和自动化工作流的场景。

zhujixuan TASK 159

1. 修改 SSH 默认端口并禁用 root 密码登录

22 端口是扫号机的重点目标。先改端口,再上密钥。

sed -i 's/#Port 22/Port 22022/' /etc/ssh/sshd_config
sed -i 's/PermitRootLogin yes/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
systemctl restart sshd

改完后用新端口登录测试,确认没问题再关旧连接。密钥对生成可以参考 `ssh-keygen -t ed25519`,然后把公钥扔到 `~/.ssh/authorized_keys`。

2. 配置 UFW 或 iptables 防火墙只放行必要端口

AI 工具通常需要 80/443(反向代理)、11434(Ollama API)、3000(Open WebUI)、5678(n8n)等。防火墙只开这些,其余全关。

ufw default deny incoming
ufw default allow outgoing
ufw allow 22022/tcp # SSH 新端口
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 11434/tcp # Ollama
ufw allow 3000/tcp # Open WebUI
ufw allow 5678/tcp # n8n
ufw enable

注意:Ollama API 和 n8n 的 Webhook 端口如果只在内网调用,可以用 `ufw allow from 你的内网IP to any port 11434` 限制来源。

3. 禁止 ping 和端口扫描响应

很多扫描器靠 ICMP 发现主机。简单屏蔽:

echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.conf
sysctl -p

如果线上需要监控,可以只允许特定 IP 的 ping。

4. 配置 fail2ban 防止暴力破解

SSH 改端口后仍有概率被扫,fail2ban 能自动封禁尝试次数过多的 IP。

apt install fail2ban -y
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
systemctl enable fail2ban –now

对于 AI 工具的 Web 界面(比如 Open WebUI 的登录页),也可以加 jail 规则,但注意别把自己封了。

5. 使用非 root 用户运行所有 AI 服务

root 权限过大,一旦服务被攻破,整个 VPS 就完了。创建一个专用用户:

useradd -m -s /bin/bash aiadmin
usermod -aG docker aiadmin # 如果用到 Docker

然后在 `~aiadmin/.ssh/authorized_keys` 里放你的公钥。以后所有服务(Ollama、n8n、Open WebUI)都用 `sudo -u aiadmin` 或 `docker run –user` 来跑。

6. 为 Docker 容器设置资源限制和只读文件系统

AI 工具大多跑在 Docker 里,但默认容器能写根文件系统。加参数限制:

docker run -d \
–memory="4g" \
–cpus="2" \
–read-only \
–tmpfs /tmp \
–tmpfs /var/run \
-p 11434:11434 \
ollama/ollama

`–read-only` 让容器无法写文件,日志和临时数据通过 `–tmpfs` 映射到内存。如果服务需要持久化数据(如模型、数据库),用 `-v` 挂载卷,并确保卷目录权限正确。

7. 配置自动安全更新

很多漏洞是通过系统包更新的,别等手动。用 `unattended-upgrades` 自动打补丁:

apt install unattended-upgrades -y
dpkg-reconfigure –priority=low unattended-upgrades

选择“是”即可。同时建议每天凌晨重启一次(如果服务能接受短暂中断),用 `crontab -e` 加一行:

0 4 * * * /sbin/reboot

8. 限制 API 端口的公网暴露

像 Ollama 默认监听 0.0.0.0:11434,如果直接暴露公网,任何人都能调用你的模型。两种方案:

只监听本地:修改 Ollama 启动参数 `OLLAMA_HOST=127.0.0.1`,然后通过 Nginx 反向代理加 Basic Auth 或 IP 白名单。

用防火墙限制来源:`ufw allow from 你的静态IP to any port 11434`。

n8n 的 Webhook 同理,不要在公网暴露 Webhook 端口,除非你用了 API Key 验证。

9. 启用 Nginx 反向代理并强制 HTTPS

AI 工具的 Web 界面(Open WebUI、n8n、Hermes Agent)建议都走 Nginx 反代,并申请 Let's Encrypt 证书。

nginx
server {
listen 443 ssl;
server_name ai.yourdomain.com;

ssl_certificate /etc/letsencrypt/live/ai.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ai.yourdomain.com/privkey.pem;

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

使用 `certbot` 自动续期证书,并加一个 HTTP 到 HTTPS 的重定向。

10. 定期审计日志和监控异常连接

日志是发现入侵的第一道防线。安装 `logwatch` 或 `goaccess`,每天收邮件摘要。同时用 `netstat -tunlp` 检查监听端口,看有没有不认识的服务。

netstat -tunlp | grep LISTEN
lastb | head -20

建议每周手动跑一次,或者用 `wazuh` 做集中式安全监控(小 VPS 用 `ossec` 也可以)。

老鸟叮嘱

别偷懒用默认密码:任何 AI 工具的管理后台,第一件事就是改默认管理员密码。Open WebUI 默认没有密码,必须设置。

API Key 别硬编码:用环境变量或 `.env` 文件,并且 `.env` 不要提交到 GitHub。

Docker 网络模式:如果多个容器需要通信,用自定义 bridge 网络,不要用 `–network host`,否则所有端口都暴露。

备份:安全设置再好,也挡不住手误。定期备份模型文件、数据库和配置文件,备份到另一台机器或对象存储。

FAQ

Q1:部署 AI Agent(如 Hermes Agent)需要开放哪些端口?
A:通常 Agent 通过 API 调用,不需要额外开放端口。如果 Agent 有 Web 控制台(比如 n8n),就只开那个端口。Agent 本身监听本地回环即可。

Q2:我用的是阿里云/腾讯云,安全组和 UFW 都要配吗?
A:双重保险。云厂商的安全组是外层的,UFW 是系统内层的。建议安全组只放行需要的端口,UFW 也做同样限制。

Q3:Ollama 模型下载很慢,安全设置会影响下载速度吗?
A:不影响。防火墙只限制入站连接,出站下载模型不受影响。如果下载慢,可以换镜像源或使用代理。

Q4:跑 Claude Code 或 Codex 需要 VPS 有 GPU 吗?
A:Claude Code 和 Codex 是 API 调用型,不需要本地 GPU,普通 VPS 即可。只有本地跑模型(如 Ollama)才需要 GPU 或高性能 CPU。

Q5:n8n 的 Webhook 怎么安全暴露?
A:建议用 Nginx 反代,加 Basic Auth 或 IP 白名单。如果必须公网访问,给 Webhook 加一个随机后缀路径,比如 `/webhook/abc123`,不要用默认路径。

Q6:我改完 SSH 端口后连不上了怎么办?
A:如果防火墙没放行新端口,或者 SSH 配置语法错误,你可能会被锁。务必先开一个新终端窗口测试连接,确认正常后再关闭旧会话。如果真连不上,通过云控制台的 VNC 或救援模式进去修复。

转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9932.html 商家投稿邮箱:zhujixuanblog@qq.com