监听本地 IP 的服务居然可以被公网访问

76 天前
 LOGOSJ
[环境]
路由器拨号(局域网 IP192.168.1.1 公网 IP123.12.12.12 )
主机 Ubuntu 24.04.1 LTS (局域网 IP192.168.1.2 ,与路由器 DMZ )

[异常情况]
在主机上运行有一些服务,有的是直接跑,有的用 Docker 部署。监听地址为本机局域网 IP192.168.1.2 ,期望只允许内网访问。但实际上外网设备可以通过公网 IP+端口的形式访问这些服务。

[做过的尝试]
1.关闭了 UTUN 接口,由于本机采用 Sing box 的 tun 模式入站,猜测可能有关系。关了 UTUN 接口依然如此。
2.使用 Pyhone 起了一个最简单的文件服务,监听本地 IP ,依然可以被公网访问,说明与服务无关。
3.在阿里云服务器上测试,服务监听局域网 IP ,也可以被公网访问(排除本机故障)

[一些猜想]
1.DMZ 引起的,但是查到 DMZ 不涉及 NAT ,而且服务日志可以看见正确的外网访问的源 IP 。目前没有条件关闭 DMZ 测试,一关就失联
2.安装 Singbox 时的一些设置所引起的。例如开启了 IP 转发;修改了转发规则(源 IP 伪装);防火墙放行了所有 TUN 接口的流量。
3.安装了 snell 服务端,这是和阿里云服务器唯一的共同点,但是不认为这会有什么影响


目前先用 UFW 防火墙只允许内网子网 IP 访问这些端口。
虽然这是一个很基础的问题,但是由于本人能力水平实在有限,反请各位高手指点一二!
2637 次点击
所在节点    宽带症候群
17 条回复
xclrr
76 天前
我了解的一种情况是,docker 开了端口映射不指定监听 ip 会突破 ufw ,docker 会自己修改 iptables ,不知道你是不是这种
jimmy2010
76 天前
就是 dmz 引起的吧,dmz 就相当于把整个内网的某个 ip 暴露在公网了,如果进来的流量没有匹配到 nat 规则,就直接全部发给 dmz 主机,反倒是 nat 端口映射可以指定要暴露的端口,而不是全部。
gam2046
76 天前
DMZ 就是一层 NAT 呀,外部请求过路由器的时候,source ip 就变成了路由器的 IP ,因此能够访问你的服务,是符合预期的。
Laoz666
76 天前
docker 的问题 docker 开出的端口不受防火墙限制 默认是 0.0.0.0:port
IvanLi127
76 天前
看起来就是单纯 DMZ 的效果,DMZ 就是能让外网通过 NAT 访问内网,你这机子监听内网 IP 地址,刚刚好呀。
sagaxu
76 天前
这就是 DMZ 的工作方式,它将所有非 NAT 后的流量转发到指定的 IP ,你在路由器上设置 DMZ 主机为 192.168.1.2 ,那么所有监听在 192.168.1.2:*上的端口,都暴露在了公网,能在内网通过 IP:192.168.1.2 访问的服务,全部暴露在公网。

所以一般 DMZ 主机,都要开防火墙,默认阻止所有。
dodakt
76 天前
cdlnls
76 天前
配置了 DMZ 之后不就是这个效果吗?
LOGOSJ
76 天前
@xclrr 不光是 docker 中的服务,直接跑的服务也是一样的。
cdlnls
76 天前
LOGOSJ
76 天前
@gam2046 可是那些服务是可以看见源 IP 的,比如我用 python 起的一个最简单的文件服务,用外网设备访问的时候,在服务器上可以看见访问的源 IP 的,说明 DMZ 没有替换掉
Jhma
76 天前
docker 的网络权限很高,像在 centos7 上部署 docker 他会绕过系统防火墙 firewall-cmd ,且是基于最底层的 iptables 来操作的
LOGOSJ
76 天前
@gam2046 比如测试用的 python 文件服务

Serving at http://192.168.1.2:32187
192.168.1.2 - - [17/Sep/2024 23:06:16] "GET / HTTP/1.1" 200 -
192.168.1.2 - - [17/Sep/2024 23:06:16] code 404, message File not found
192.168.1.2 - - [17/Sep/2024 23:06:16] "GET /favicon.ico HTTP/1.1" 404 -
123.158.***.**- - [17/Sep/2024 23:07:41] "GET / HTTP/1.1" 200 -
123.158.***.** - - [17/Sep/2024 23:07:57] code 404, message File not found
123.158.***.** - - [17/Sep/2024 23:07:57] "GET /favicon.ico HTTP/1.1" 404 -

123.158.*.*的就是我用于访问的外网设备的公网 IP
tool2dx
76 天前
@LOGOSJ 能看见 IP 不代表什么的,DMZ NAT 替换的 dst ip ,也就是目标 IP 被替换为了 192.168.1.2 。你这个 123.158.*是 src ip ,不替换的。
lonelyduan
76 天前
配置 DMZ 不就是这个效果吗…
rnv
75 天前
看到 DMZ 就明白了。如果你想要安全点的方式,就关闭 DMZ ,使用端口映射
LOGOSJ
75 天前
感谢各位朋友的指导,确定是 DMZ 的预期行为。更大的问题是我对“监听”的含义理解错误了,某个服务监听在某个 IP 的某个端口,意味着主机只响应发往该 IP 该端口的请求。而我之前错误的理解成只接受源于与监听地址同子网网段的请求。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1073680

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX