VPS防火墙配置实战:18789端口内网访问限制完整指南
前言
在运维工作中,服务器安全是一个永恒的话题。今天我遇到一个典型的问题:某台有公网 IP 的 VPS 服务器上,OpenClaw Gateway 的 18789 端口暴露在公网,存在严重的安全隐患。本文将详细记录从发现问题的完整排查过程,以及最终的解决方案,希望给遇到类似问题的同学一些参考。
问题背景
业务场景
我们的 OpenClaw 系统部署在多台服务器上,其中包括一台有公网 IP 的 VPS(VPS4)。这台机器需要对外提供 Web 服务(443、8443 端口),同时运行 OpenClaw Gateway 管理内部 Agent。
发现问题
在一次安全检查中,发现了一个严重的问题:
- VPS 公网 IP:64.69.34.2**
- OpenClaw Gateway 端口:18789
- 问题:18789 端口可以从公网直接访问
这意味着任何人都可以通过 http://vps4.margrop.net:18789/ 访问到 OpenClaw Gateway 的管理接口,这是非常危险的行为。
环境信息
- 服务器类型:VPS(有公网 IP)
- 操作系统:Ubuntu 24.04
- 部署方式:Docker 容器
- 应用:OpenClaw Gateway
- 需要暴露的端口:22(SSH)、443(HTTPS)、8443
- 需要限制的端口:18789(仅内网)
问题分析
第一层:防火墙配置
首先检查防火墙规则。VPS 默认使用 iptables 或 ufw 作为防火墙软件。
1 | |
理论上,防火墙应该阻止从公网访问 18789 端口。但实际上,公网依然可以访问这个端口。
第二层:Docker 端口绑定
问题出在 Docker 的端口映射配置上。
1 | |
原来,在启动容器时,端口映射是这样配置的:
1 | |
0.0.0.0:18789 意味着绑定所有网络接口,包括公网网卡。这导致流量直接通过 Docker 端口映射进来,根本没有走防火墙。
根因总结
这是一个典型的”层层失守”问题:
- 第一层失守:Docker 端口绑定到
0.0.0.0 - 第二层失守:防火墙规则虽然配置了,但没有起到作用
流量路径:
1 | |
解决方案
方案一:修改 Docker 端口绑定(推荐)
最直接的解决方案是将 Docker 端口映射改为仅绑定本地地址:
1 | |
验证结果:
| 来源 | 访问 18789 | 状态 |
|---|---|---|
| localhost (127.0.0.1) | ✅ | 正常 |
| 内网 (192.168.160.x) | ✅ | 正常 |
| 公网 (64.69.34.2**) | ❌ | 已阻止 |
方案二:防火墙 + Docker 双重防护
除了修改 Docker 配置,还应该配置防火墙规则作为第二层防护:
1 | |
方案三:使用 Docker 网络模式
对于更严格的隔离,可以使用 Docker 的网络模式:
1 | |
这样容器就不会暴露到宿主机的公网接口上。
完整操作步骤
步骤 1:检查当前状态
1 | |
步骤 2:修改 Docker 启动配置
1 | |
步骤 3:配置防火墙(可选但推荐)
1 | |
步骤 4:验证修复效果
1 | |
常见问题解答
Q:为什么防火墙规则没有生效?
A:Docker 的端口映射在防火墙之前处理流量。如果 Docker 绑定到 0.0.0.0,流量直接进入容器,不会经过防火墙。需要同时修改 Docker 配置和防火墙规则。
Q:如何判断端口是否暴露在公网?
A:从有公网 IP 的机器(或使用在线端口检测工具)尝试连接。如果能连上,说明暴露了。
Q:修改 Docker 端口绑定后内网还能访问吗?
A:取决于你绑定到哪个地址。绑定到 127.0.0.1 仅本地可访问;绑定到内网 IP(如 192.168.160.14)则内网可访问。
Q:生产环境应该怎么做更安全?
A:建议多层防护:
- 不暴露管理端口到公网
- 使用 VPN 或内网访问
- 配置防火墙规则
- 使用认证和鉴权机制
安全最佳实践
1. 端口暴露原则
- SSH(22):可暴露,但建议使用密钥登录
- Web 服务(80/443):需要暴露,但建议配置 HTTPS
- 管理端口(18789、9000 等):不应暴露在公网
2. Docker 安全建议
1 | |
3. 定期安全检查
建议定期执行以下检查:
1 | |
总结
本文记录了一次典型的 VPS 端口暴露安全问题及其修复过程。核心教训是:
- Docker 端口映射要谨慎:不要绑定到
0.0.0.0,尤其是管理端口 - 多层防护:防火墙 + Docker 配置 + 应用认证
- 定期检查:安全不是一次性工作,需要持续关注
希望这篇文章能帮到你。如果有问题,欢迎在评论区讨论。
作者:小六,一个在上海努力搬砖的程序员