IP、TCP 和 ICMP 数据包中的哪些标头字段通常不会被防火墙和 NAT/网关更改,无论是否有状态?

网络工程 tcp 防火墙 ip icmp
2022-02-10 02:50:41

我需要确定 IP、TCP 和 ICMP 数据包中的哪些标头字段永远不会(至少在 99% 的情况下,可能不包括一个奇怪的过于激进的防火墙)被防火墙或 NAT/网关设备更改,包括有状态和无国籍。

例如,我观察到某些标头将被防火墙/NAT 设备操纵,例如窗口大小或 PSH 和 URG 标志的存在。我相信即使是“数据偏移”(TCP 标头结构中的“doff”名称)在某些时候也受到了影响。这些对防火墙和 NAT 设备的操作有多普遍?

TCP 序列 ID#、IP ID、ICMP 类型、ICMP 代码、ICMP id/序列,我知道不应该被更改,至少我已经观察到并正在寻找社区的确认。 #(在 ECHO 中时),我会想象 ICMP 数据。

我认为 TCP 窗口大小是由某些防火墙/NAT 操纵的吗?IP TTL 呢?这会在到达目的地之前被边界设备操纵吗?

非常感谢任何其他关于哪些标题被操纵以及哪些没有被操纵的信息。

2个回答

您可能正在开发隐藏隧道的新方法)

至于 IP、TCP、ICMP 标头的字段 - 您不能绝对确定它们在网络中不会受到影响。它主要取决于源和目标网络拓扑、安全措施和网络设备或软件。甚至,交通的方向也很重要。当流量流动时,它有很大的不同。从家庭网络到您的 VDS 服务器或从公司 PC 到负载均衡器后面的谷歌服务器等。

  • 除非目标位于 NAT 或负载均衡器之后,否则IP 目标地址TCP/UDP 目标端口可能不会被触及
  • TCP SEQ|ACK有时会被某些防火墙更改(Cisco ASA 将它们随机化以防止会话劫持和其他攻击)
  • 除非流量流经复杂的防火墙,否则数据偏移量可能不会受到影响
  • 大多数 ICMP 类型和代码都被典型的防火墙阻止,除了Echo request|replydestination unreachable并且TTL expired in transit对 traceroute 很有用
  • ICMP echo和 SEQ 的有效载荷可能未受影响。
  • 除了一些棘手的情况(修改 FTP、SIP 等的 ALG 网关或 HTTP/FTP 代理)外,防火墙通常不会触及TCP 的有效负载。但是大多数端口被公司防火墙阻止,其他端口被转发给代理。
  • TCP 标志通常不受影响,但 TCP 会话遵循一些规则(握手等),因此防火墙(有状态)会监视它们并丢弃无效或不相关的数据包
  • IPv4 数据包中的DF 位通常不会被触及,可能还有其他字段,例如长度和偏移量,但数据包的大小应该合适才能通过
  • QoS 位可以在公共网络上进行修改或完全归零。

好吧,您的问题在某种程度上是逆向工程研究。感谢您之后分享您的经验。

您所问的大部分内容取决于设备的配置方式,并且您的问题没有一个单一的答案。

对于 IPv4,默认情况下,路由器只会更改 TTL 和 Header Checksum 字段,除非需要对数据包进行分段。Fragmentation 会改变其他字段,例如 Fragment Offset。IPv6 取消了 Header Checksum 和分段,因此路由器将更改 Hop Limit 字段。

防火墙不需要 NAT,NAT 也不需要发生在防火墙上。有不同类型的防火墙。如果您在防火墙上路由,则防火墙的路由器部分将更改与路由器相同的字段。许多防火墙是透明防火墙。你可以有一个代理 TCP 的防火墙,但这不是通用的。在这种情况下,防火墙最终成为所需 TCP 连接两端的 TCP 端点。在这种情况下发生的变化取决于供应商和配置。类似的事情也可能发生在服务器负载均衡器上。

NAT 会更改源或目标 IP 地址和/或端口号,具体取决于您配置 NAT 的方式。使用 NAT 的方法有很多种,具体的变化取决于 NAT 方法。更改数据包标头中的任何内容都需要重新计算标头校验和字段。