本地部署大模型,如何防止被非法调用?:本地大模型安全防护

自己搭了个大模型服务(比如 Llama、ChatGLM、通义千问),本来只想内部用,结果发现有人通过公网直接调你的 API?
这种情况并不少见。
本文从零开始,教你用最简单、最可靠的方法给本地大模型服务加几道锁,彻底防止非法调用。

第一步:先给 API 加上密钥认证

不管模型是用什么框架启动(vllm、ollama、FastChat 等),第一步一定是开启 API 密钥校验。

以 vLLM 为例,启动时加上 --api-key 参数:

python -m vllm.entrypoints.openai.api_server \
    --model /path/to/model \
    --api-key your-secure-key-here

ollama 默认不开启鉴权,可以在环境变量里设置:

export OLLAMA_AUTH_TOKEN="your-secure-key"
ollama serve

如果用的是 OpenAI 兼容的 API 封装,大部分都支持配置 API_KEY 环境变量。
设置完后,所有请求必须携带 Authorization: Bearer your-secure-key-here 才能成功。

验证方法: 不带密钥直接 curl 测试,返回 401 错误就代表生效。

第二步:用 IP 白名单限制来源

密钥只能防住没有凭证的访问,但如果密钥泄露或你希望只让公司内网访问,必须加 IP 白名单。

2.1 使用 iptables 限制(Linux 通用)

假设你的大模型服务监听端口是 8000,只允许内网段 192.168.1.0/24 和特定公网 IP 203.0.113.5 访问:

# 允许内网
sudo iptables -A INPUT -p tcp --dport 8000 -s 192.168.1.0/24 -j ACCEPT
# 允许指定公网 IP
sudo iptables -A INPUT -p tcp --dport 8000 -s 203.0.113.5 -j ACCEPT
# 拒绝其他所有
sudo iptables -A INPUT -p tcp --dport 8000 -j DROP

注意: 保存规则,重启后依然生效。
不同发行版保存方式不同,CentOS 用 service iptables save,Ubuntu 推荐用 iptables-persistent

2.2 如果用了宝塔面板

在“安全”菜单里,点击“添加端口规则”,端口填模型服务端口,来源 IP 设为“指定 IP”,然后填入允许的 IP 或网段。
其他 IP 自动屏蔽。

第三步:用 Nginx 反向代理做二次过滤

如果模型服务已经开放,或者你想更灵活地控制访问(比如按路径限制、限制请求频率),建议在模型前面加一层 Nginx。

Nginx 配置示例(监听 443 并转发到本地 8000,同时限流):

upstream model_backend {
    server 127.0.0.1:8000;
}

server {
    listen 443 ssl;
    server_name your.domain.com;

    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;

    # 限流:每个 IP 每秒最多 5 个请求
    limit_req_zone $binary_remote_addr zone=modellimit:10m rate=5r/s;

    location / {
        limit_req zone=modellimit burst=10;
        # 可再加一层 IP 白名单,仅允许以下 IP
        allow 192.168.1.0/24;
        allow 203.0.113.5;
        deny all;

        proxy_pass http://model_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

这样即使有人拿到你的接口地址,非白名单 IP 直接返回 403,暴力请求也会被限流。

避坑指南(高频问题)

Q:加了 API 密钥和 IP 白名单是不是就够了?
A:基本够用。但如果模型暴露在公网且密钥比较复杂,可以不加白名单。如果密钥泄露,白名单才是最后防线。建议两项都用。

Q:内网 IP 经常变化,白名单怎么维护?
A:可以使用云厂商的安全组或防火墙管理器(如 firwalld)动态更新,也可以写脚本定期从信任机器拉取当前公网 IP。

Q:用了 Nginx 反向代理后,对方还是能直接访问后端端口?
A:必须让后端服务只监听 127.0.0.1 或内网地址,不暴露到公网。例如 vLLM 启动时加 --host 127.0.0.1

Q:限流配置会误杀正常用户吗?
A:rate=5r/s 可根据你的实际使用情况调整。建议先用 burst=20 测试,稳定后再收紧。

效果验证:逐层检查

  1. 验证密钥认证: 用不带密钥的请求测试,应返回 401。
  2. 验证 IP 白名单: 从非白名单 IP 访问(比如用手机热点),应被拒绝(iptables 返回无响应,Nginx 返回 403)。
  3. 验证限流: 短时间内连续发送请求,Nginx 应返回 503。
  4. 检查端口暴露: 用在线端口扫描工具扫你的公网 IP,除了 80/443,不应看到模型服务端口。

实际部署时,建议把以上三步都走一遍,并定期检查日志(/var/log/nginx/access.logjournalctl)看是否有异常请求。
坚持这样做,你的本地大模型基本不会被非法调用了。

分享到:
上一篇
用 AI 写 Python 脚本,被平台检测为恶意程序
下一篇
服务器被挂马后,如何加强网站安全防护?
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意