我正在使用 iptable 规则来过滤和处理 Ubuntu 服务器中的数据包。但我无法理解 mangle 表。
正如我们已经指出的,该表主要用于处理数据包。换句话说,您可以自由使用处理匹配等,这些匹配可用于更改 TOS(服务类型)字段等。
强烈建议您不要使用此表进行任何过滤;任何 DNAT、SNAT 或伪装都不会在此表中起作用。
有人可以向我描述 mangle 表并提供一些例子来让我了解何时应该使用它吗?
答案1
除了其他好的答案之外,我最近不得不使用 mangle 表来调整由通过 PPPoE、PPP 和 ATM 传输的流量引起的 MTU(最大传输单元)差异,每种差异都会增加开销,从而减少 IP 可用的有效负载,使其与以太网帧通常的 1500 字节不同。
正常情况下,管道两端的系统会将其 MTU 设置为常规默认值 1500,因此它们会尝试发送这么大的 IP 帧。由于实际可用的有效负载大小较小,这会导致数据包碎片化,但发送方通常会要求不要对数据包进行碎片化,因此最终会将其完全丢弃。
在理想情况下,路径 MTU 发现将允许端点根据需要向下调整其 MTU,但此发现依赖于 ICMP,而我无法控制的网络通常被配置为出于安全原因放弃 ICMP。
唯一的选择是在我的路由器中使用数据包修改来修改 TCP SYN 数据包,从而降低传输层的最大段大小:
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1452
这种事情很麻烦,理想情况下应该避免,但我别无选择,这确实解决了问题。
希望这些示例以及手册页能够有所帮助。
答案2
我最近找到了一个很好的解释这里。它基本上用于设置 IP 数据包的特定标头,以影响后续的路由决策。如果有的话,TTL 选项可能是最有趣的:
TTL 目标用于更改数据包的 TTL(生存时间)字段。我们可以告诉数据包只具有特定的 TTL 等等。这样做的一个很好的理由可能是我们不想让爱管闲事的互联网服务提供商知道我们的身份。一些互联网服务提供商不喜欢用户在一个连接上运行多台计算机,并且有些互联网服务提供商会寻找生成不同 TTL 值的单个主机,并将其视为多台计算机连接到单个连接的众多迹象之一。
其他目标是TOS, MARK, SECMARK, CONNSECMARK
。
答案3
作为一个 iptables 新手,我想说: mangle 表允许修改数据包头中的一些特殊条目。(例如:服务类型、生存时间)(它还允许设置特殊标记和安全上下文标记)
答案4
有一篇关于 iptables 的深入且不太难理解的教程这里。
mangle 表用于以各种方式更改数据包的 IP 标头。例如,您可以调整数据包的 TTL(生存时间)值,延长或缩短数据包可以承受的有效网络跳数。其他 IP 标头也可以以类似的方式更改。
此表还可以在数据包上放置一个内核“标记”,以便其他表和其他网络工具进一步处理。此标记不会触及实际数据包,但会将标记添加到内核对数据包的表示中。
对我帮助很大,因为它还清楚地解释了所有部分如何组合在一起并相互作用。