防火墙怎么设?Open-AutoGLM云服务器端口配置
你已经成功在云服务器上部署了 Open-AutoGLM 的推理服务,也配好了本地电脑的 ADB 环境,手机调试一切就绪——可当执行python main.py命令时,终端却卡在连接阶段,报错:Connection refused或Failed to connect to server。
别急,这不是模型没跑起来,也不是 ADB 没连上,大概率是云服务器的防火墙把请求拦住了。
这就像你家装修好了智能中控系统,遥控器也配好了,但大门装了把新锁——钥匙(请求)是对的,可门(端口)根本没开。本文不讲大模型原理、不堆参数调优,专注解决一个最实际、最高频、新手最容易卡住的问题:怎么正确开放云服务器端口,让本地控制端稳稳连上远端的 AutoGLM-Phone 服务。
全文基于真实部署场景,所有命令可直接复制粘贴,每一步都标注了“为什么这么设”,帮你一次配对、长期稳定。
1. 明确服务暴露方式:不是所有端口都需要开放
Open-AutoGLM 作为手机 AI Agent 框架,其云侧核心是vLLM 或 SGLang 提供的 HTTP API 服务,默认监听在0.0.0.0:8000(vLLM)或0.0.0.0:8080(SGLang)等地址。但注意:这个端口只是服务在服务器内部监听的地址,它本身并不自动对外网可见。
真正决定“能不能从你家电脑访问到它”的,是两层关卡:
- 第一层:云服务器操作系统防火墙(如 ufw / firewalld / iptables)
- 第二层:云厂商安全组(如阿里云安全组、腾讯云网络ACL、AWS Security Group)
很多用户只开了系统防火墙,却忘了配安全组;或反过来,安全组放行了,但系统防火墙仍拦截——结果就是“明明端口开着,却连不上”。
我们按实际部署顺序,逐层打通。
2. 查看服务实际监听端口与绑定地址
在云服务器上,先确认你的 Open-AutoGLM 推理服务是否真的在运行,以及它监听在哪。
2.1 检查进程与端口占用
# 查看所有监听中的 TCP 端口(重点关注 LISTEN 状态) sudo ss -tuln | grep ':' # 或使用 netstat(如已安装) sudo netstat -tuln | grep LISTEN你会看到类似输出:
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN关键看第一列0.0.0.0:8000—— 表示服务正监听所有网卡的 8000 端口,这是可外网访问的前提。
❌ 如果显示的是127.0.0.1:8000,说明服务只绑定了本地回环,必须修改启动命令:
# 启动 vLLM 时,务必加上 --host 0.0.0.0 python -m vllm.entrypoints.api_server \ --model zhipu/autoglm-phone-9b \ --host 0.0.0.0 \ --port 8000 \ --tensor-parallel-size 1小贴士:
--host 0.0.0.0是关键!它告诉服务“接受来自任意 IP 的连接”,而不是仅限本机。很多教程省略这步,导致后续所有防火墙配置都白忙。
2.2 验证服务本地可通(绕过防火墙)
在云服务器内部,用 curl 测试 API 是否响应:
curl http://localhost:8000/health # 应返回 {"status":"ok"} 或类似健康状态如果这步失败,说明服务根本没起来,先排查模型加载、显存、依赖等问题——防火墙配置是最后一步,不是第一步。
3. 开放系统级防火墙:ufw(Ubuntu)或 firewalld(CentOS/RHEL)
绝大多数云服务器使用 Ubuntu 或 CentOS 系统。我们分两种主流情况说明。
3.1 Ubuntu 系统(推荐 ufw)
Ubuntu 默认启用ufw(Uncomplicated Firewall),简洁易用。
# 1. 查看当前状态 sudo ufw status verbose # 2. 若为 inactive,先启用 sudo ufw enable # 3. 允许指定端口(以 8000 为例,替换成你实际使用的端口) sudo ufw allow 8000 # 4. (可选)允许特定IP访问,更安全(例如只允许你家宽带IP) # sudo ufw allow from 203.123.45.67 to any port 8000 # 5. 再次查看状态,确认规则已生效 sudo ufw status numbered输出应包含:
Status: active To Action From -- ------ ---- 8000 ALLOW Anywhere 8000 (v6) ALLOW Anywhere (v6)成功:8000端口已加入白名单,ufw 不再拦截该端口入站流量。
3.2 CentOS / Rocky Linux / AlmaLinux(推荐 firewalld)
这些系统默认使用firewalld。
# 1. 查看状态 sudo firewall-cmd --state # 应返回 running # 2. 查看当前区域(通常是 public) sudo firewall-cmd --get-active-zones # 3. 临时开放端口(重启后失效) sudo firewall-cmd --add-port=8000/tcp --permanent # 4. 重载配置使永久规则生效 sudo firewall-cmd --reload # 5. 验证 sudo firewall-cmd --list-ports # 应输出:8000/tcp注意:
--permanent参数必须加!否则重启后规则丢失。--reload是必须步骤,不执行则不生效。
4. 配置云厂商安全组:这才是外网访问的“总闸门”
系统防火墙管的是“服务器操作系统”,而安全组管的是“云服务器这张网卡的物理入口”。它位于网络链路最前端,优先级高于系统防火墙。
无论你用的是阿里云、腾讯云、华为云还是 AWS,操作逻辑一致:找到你这台云服务器所属的安全组,添加一条入方向(Inbound)规则,协议为 TCP,端口为你服务监听的端口(如 8000),源 IP 设置为你的本地电脑公网 IP(或 0.0.0.0/0 临时测试)。
下面以三家主流平台为例,给出精准路径和截图要点(文字描述,无图):
4.1 阿里云 ECS 安全组配置
- 进入 ECS 控制台
- 左侧菜单 →网络与安全→安全组
- 找到你 ECS 实例绑定的安全组(名称通常含 “sg-” 开头),点击配置规则
- 点击手动添加→入方向
- 填写:
- 授权策略:允许
- 协议类型:自定义 TCP
- 端口范围:8000/8000(不要写成 8000,必须带端口范围格式)
- 授权对象:你的本地公网 IP/32(如
203.123.45.67/32),切勿填 0.0.0.0/0 上线环境!
- 保存
如何查自己本地公网 IP?在浏览器打开 https://ip.cn ,页面顶部即显示。
4.2 腾讯云 CVM 安全组配置
- 进入 CVM 控制台
- 左侧菜单 →网络与安全→安全组
- 找到对应安全组 → 点击配置安全组规则
- 点击添加规则→入站规则
- 填写:
- 类型:自定义
- 协议端口:TCP:8000
- 源 IP:203.123.45.67/32(同上,精确到单 IP)
- 保存
4.3 AWS EC2 安全组配置
- 进入 EC2 控制台
- 左侧菜单 →Network & Security→Security Groups
- 找到关联实例的安全组 → 点击Edit inbound rules
- 点击Add rule
- 填写:
- Type:Custom TCP
- Protocol:TCP
- Port range:8000
- Source:Custom → 203.123.45.67/32
- 保存规则
统一原则:安全组规则必须明确、最小权限。生产环境严禁使用 0.0.0.0/0,测试环境可临时使用,验证通过后立即改回具体 IP。
5. 验证端口是否真正开放:三步连通性测试
配置完两层防火墙,别急着跑main.py,先做三步验证,快速定位问题环节:
5.1 第一步:本地电脑能否 ping 通云服务器?
ping <你的云服务器公网IP>- 通:说明网络层可达(ICMP 协议)
- ❌ 不通:检查云服务器是否关机、弹性公网 IP 是否绑定、安全组是否禁用了 ICMP(部分厂商默认禁用,不影响 TCP)
提示:ping 不通 ≠ 端口不通。TCP 服务可以完全正常,但 ICMP 被屏蔽。所以 ping 不通不等于失败,继续下一步。
5.2 第二步:本地电脑能否 telnet 通目标端口?
# Windows(需启用 Telnet 客户端)或 macOS/Linux 终端执行 telnet <云服务器公网IP> 8000- 显示
Connected to ...或一片空白(表示连接成功,服务正在等待 HTTP 请求)→端口已通! - ❌ 显示
Could not open connection或Connection refused→ 说明请求被某层拦截:- 若之前
curl http://localhost:8000/health成功 → 问题出在安全组或系统防火墙未生效 - 若
curl也失败 → 服务未启动或绑定地址错误(回到第2节)
- 若之前
5.3 第三步:本地电脑用 curl 直接调用 API(模拟 main.py)
curl -X POST "http://<云服务器公网IP>:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ -d '{ "model": "autoglm-phone-9b", "messages": [{"role": "user", "content": "你好"}] }'- 返回 JSON 响应(含
choices字段)→服务、防火墙、网络全部就绪,可放心运行 main.py - ❌ 返回
curl: (7) Failed to connect→ 回到第5.2步重试 - ❌ 返回
{"error": "Not Found"}→ 路径错误,确认你用的是 vLLM 的/v1/chat/completions,不是 OpenAI 兼容接口的其他路径
6. 常见坑点与避坑指南(血泪总结)
以下全是真实踩过的坑,按发生频率排序:
6.1 坑:端口映射写错,main.py 里填的是内网端口
现象:你在云服务器上用docker run -p 8800:8000启动了容器,服务监听在容器内 8000,映射到宿主机 8800。
但你在main.py命令里写的是:
--base-url http://<IP>:8000/v1 # ❌ 错!这是容器内端口,宿主机对外暴露的是 8800正确写法:
--base-url http://<IP>:8800/v1 # 宿主机映射端口才是外网可访问的记住口诀:main.py 连的是“宿主机的端口”,不是容器/服务内部的端口。
6.2 坑:安全组开了,ufw/firewalld 也开了,但还是连不上
大概率原因:云服务器有多张网卡(如 eth0 + eth1),而服务只监听了 eth0,但安全组规则指向了 eth1 的 IP。
解决方案:统一使用0.0.0.0绑定,并确认你填入main.py的 IP 是安全组规则所针对的那张网卡的公网 IP。
6.3 坑:本地电脑在公司/学校内网,出口 IP 是 NAT 共享的,无法固定
现象:你查到的本地 IP 是10.x.x.x或192.168.x.x,这不是公网 IP,填进安全组无效。
解决方案:
- 临时测试:安全组源 IP 填
0.0.0.0/0(仅限测试,验证通过后立刻改回) - 长期方案:联系网络管理员获取出口公网 IP,或使用 frp/ngrok 等内网穿透工具反向代理,让云服务器主动连你(不推荐,增加延迟和复杂度)
6.4 坑:HTTPS 强制跳转导致 HTTP 请求失败
如果你在云服务器上配置了 Nginx 反向代理并启用了 HTTPS,但main.py仍用http://请求,Nginx 可能 301 跳转到https://,而 vLLM 服务本身不支持 HTTPS。
解决方案:main.py中--base-url改为https://,并在 Nginx 中正确配置 SSL 证书和 proxy_pass。
7. 最小可行配置清单(抄作业版)
为方便你快速核对,以下是完整、精简、无冗余的配置步骤清单,按执行顺序排列:
| 步骤 | 操作 | 命令/位置 | 验证方式 |
|---|---|---|---|
| 1 | 确认服务监听0.0.0.0 | 启动命令加--host 0.0.0.0 | ss -tuln | grep :8000 |
| 2 | 本地测试服务健康 | 云服务器内执行 | curl http://localhost:8000/health |
| 3 | 开放系统防火墙 | Ubuntu:sudo ufw allow 8000CentOS: sudo firewall-cmd --add-port=8000/tcp --permanent && sudo firewall-cmd --reload | sudo ufw status或firewall-cmd --list-ports |
| 4 | 配置云安全组 | 阿里云/腾讯云/AWS 控制台 → 安全组 → 入方向规则 → TCP:8000 → 源IP=你的本地公网IP/32 | 控制台界面确认规则存在 |
| 5 | 本地 telnet 测试 | 本地电脑执行 | telnet <云IP> 8000→ 成功即通 |
| 6 | 本地 curl API 测试 | 本地电脑执行 | curl -X POST "http://<云IP>:8000/v1/chat/completions" -d '{...}' |
完成以上6步,99% 的连接问题都会消失。
8. 安全加固建议(上线前必做)
当你确认功能可用后,请立即执行以下加固操作,避免服务暴露在公网风险中:
- 将安全组源 IP 从
0.0.0.0/0改为你的固定公网 IP/32 - 为 API 加一层基础认证(如 Nginx Basic Auth),防止未授权调用
- 限制 vLLM 的最大并发请求数(
--max-num-seqs)和上下文长度(--max-model-len),防资源耗尽 - 关闭不必要的 ADB 调试端口(如 5037),仅保留业务必需端口
- 定期更新系统与依赖,尤其关注 vLLM、SGLang、ADB 工具的安全公告
安全不是功能的对立面,而是让功能走得更远的基石。一个能自动点外卖的 AI,不该成为攻击者入侵你手机的跳板。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。