广泛开放港口的危险?(莫什)

信息安全 防火墙 港口
2021-08-17 01:30:54

为什么我们通常会配置防火墙来过滤掉所有我们不明确允许的流量?如果我们不在我们的系统上运行恶意软件,这是否只是深度防御的额外安全层,对我们没有任何好处?

说为传入的 UDP 连接打开端口 60000 到 61000 是否有任何危险,这比只打开几个端口安全得多?

我刚刚听说过mosh,它宣传自己是一种更好的移动 ssh 方式(通过 wifi/手机)。Mosh 使用 UDP 而不是 TCP,因此如果您短暂地进入隧道或您的 IP 地址发生变化(切换手机信号塔),您不必等待从拥塞控制返回或建立新的 ssh 会话。基本上 mosh 使用 ssh 作为非特权用户远程启动 mosh-server,使用 ssh 交换 AES-OCB 密钥,然后将加密数据包(带有序列号)发送/接收到 60000-61000 范围内的端口,你应该将防火墙配置为打开。

我对为传入 (UDP) 连接打开约 1000 个端口感到有些不舒服,但想不出一个很好的理由。如果没有软件正在侦听该端口上的数据,它就会被忽略,对吗?(编辑时:否——它实际上指示服务器发回 ICMP(ping)目标不可达响应)。我想如果我的服务器上运行了恶意软件,它可能正在等待在这些打开的端口之一上监听来自伪造 IP 地址的指令。然而,在互联网连接系统上运行的恶意软件已经可以从其他恶意软件服务器建立连接/下载信息(尽管必须知道 IP 地址)并获取指令,因此这并不会降低安全性。

编辑:有趣,刚刚看到另一个问题,这让我阅读了有关UDP_flood_attack的信息。我想另外我还需要以某种方式禁止我的系统为新打开的 UDP 端口发送 ping 目标无法访问的回复。

4个回答

除了贾斯汀关于无意中打开应用程序以进行远程访问的回答之外,请记住,即使没有任何东西专门监听连接,操作系统也总是会监听——如果只是路由/映射到适当的进程或拒绝或静默丢弃数据包。因此,操作系统仍然是一种特定的攻击媒介,当防火墙允许流量流向“非活动”端口时,它仍然不受保护。

但是,在这种情况下,所有条件都相同,打开一个非活动端口或 1000 个非活动端口几乎没有什么区别。但一定要听从最小特权原则的建议。

据我了解,Mosh 并不需要一千个端口才能工作。它只需要一个(每个客户)。因此,您可以打开任何单个端口,并告诉 Mosh 使用它(来自手册):

mosh -p 60000 my.server

随机选择端口的原因是什么?这个我不明白。

[更新]它不选择随机端口。它搜索一组端口以找到第一个打开的端口(参见代码)。如果不是这样,您将不得不在多用户系统上手动选择一个空闲端口。

这意味着您只需要与服务器上的用户(可能使用 mosh 的人)一样多的端口如果是自己的盒子,只需要开放60000端口即可。

问题是开放大量端口可能允许攻击者暴露另一个可能正在使用这些端口的应用程序。例如,用于存储患者记录的 EMR 应用程序可能配置为使用这些端口范围,但我不希望来自不受信任的 Internet 的人能够利用该开口。它归结为尽可能地强制执行最少的特权。在这些情况下,您可能希望利用打开该端口范围的 VPN。这解决了身份验证问题,因此也解决了授权问题。如果您在 DMZ 上谈论您的外部防火墙,那么您仅在协议/端口级别信任,因此必须更加严格。

应该完全有可能最小化 mosh 的 UDP 端口范围

https://github.com/keithw/mosh/blob/master/src/network/network.h#L77

如果我理解正确,这是发送方进程选择 UDP 端口的范围。因此,应该可以编译本地“窄范围”mosh 版本,并为 mosh 提供合适的本地“窄范围”防火墙 UDP 策略。

这让我想到了一个元问题:一个范围有多窄才足以让 mosh 有用?

如果我理解正确,每个 mosh 服务器需要一个端口。因此,在个人服务器和习惯使用 tmux(= 只有一个客户端)的情况下,需要一个用于工作,一个用于修复问题。

但我可能错了,我不是 C 编码器,我昨天才发现 mosh。