如果 NAT 后面的端口向恶意主机发送数据包,该主机可以将数据包发送到任何开放端口,还是只能发送到发送数据包的端口?

如果 NAT 后面的端口向恶意主机发送数据包,该主机可以将数据包发送到任何开放端口,还是只能发送到发送数据包的端口?

例如,NAT 路由器后面的计算机使用 Skype。Skype 使用端口 4000 向服务器发送数据包,以与其他 Skype 客户端建立间接连接。

由于 Skype 已向服务器发送了一个数据包第一的,服务器显然可以将数据包发送回利用 NAT 的路由器。

我的问题是,考虑到路由器正在使用 NAT,该服务器是否允许将数据包发送到 NAT 具有的任何开放/转发端口,还是仅向端口 4000 发送?

我知道 Skype 服务器根本不是恶意的,这只是一个例子

答案1

对于由其他人发起的传入流量:恶意主机始终可以将数据发送到路由器的任何端口(端口扫描)。如果端口未转发,您的路由器可能会决定是否丢弃未经请求的数据包或礼貌地响应连接无效。如果端口已转发,它将到达路由器后面的终端主机。

对于由您的主机发起的传出流量:没有规定您必须使用哪个原始端口来与 Skype 中继服务器通信。此外,在您的终端主机上,Skype 可能使用 TCP 4000,但 NAT 实际上可能使用另一个端口来发送消息,例如端口 A。Skype 服务器只能看到端口 A,而看不到端口 4000。如果 Skype 服务器响应端口 A 以外的其他端口,则适用“对于传入流量”中描述的情况。如果 Skype 服务器响应端口 A,则 NAT 会通过发送到端口 4000 将其路由回您的主机。

需要澄清的是:NAT(网络地址转换器)是您的路由器。不要将“用于传入流量”部分与网络对主机的响应混淆。它实际上意味着外部服务器是第一个与您的主机对话以建立连接的服务器。

答案2

简单的答案是“它只能将数据包(发送到 NAT 路由器后面的客户端)发送到发送数据包的端口”。但这在很大程度上是正确的,但并不完全正确。

答案取决于 IPTables 的设置方式、相关端口和使用的模块。简单的 nat 设备只允许将流量映射到其来源的同一端口,但并非所有设备都如此简单。在 Linux 和其他操作系统中,您会得到“状态防火墙”,通常使用“已建立和相关”端口,以及查看连接状态的各种模块 - 例如,如果发出出站 FTP 请求(端口 21),如果加载了 FTP 模块,路由器也可能打开端口 20 以传输数据。FTP 也可能打开其他端口,恶意服务器可能能够这样做来访问任意高编号端口。一些可能被利用的常见跟踪模块包括 FTP、SIP、Netbios、PPTP、gre、tftp、h323、irc。有一个错误 CVE-2014-8160,在某些条件下使用连接跟踪时,可能允许任意绕过防火墙 - 可能以您考虑的方式。

恶意服务器很难打开其他端口,但并非不可能。当然,您需要一些易受攻击的程序来监听其他端口 - 并且(在 Linux 下),您可以通过确保您的连接跟踪规则位于拒绝这些端口上的一般访问的规则之后来减轻这种风险。

相关内容