iptables中的mangle表是什么?


28

我正在使用iptable规则来过滤和操作Ubuntu服务器中的数据包。但我看不懂mangle表。

引用此iptables教程

正如我们已经指出的,该表主要用于处理数据包。换句话说,您可以自由地使用可用于更改TOS(服务类型)字段等的匹配项等。

强烈建议您不要将此表用于任何过滤;此表中的任何DNAT,SNAT或伪装也不起作用。

有人可以向我描述mangle表,并提供一些示例以了解何时应使用它吗?


6
iptables(8)手册页拥有所有你想要的信息,包括mangle表使用的几个很好的例子。
迈克尔·汉普顿

Answers:


23

除了其他好的答案,我最近还不得不使用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

这种事情很麻烦,理想情况下应该避免,但是我没有其他选择,这确实解决了问题。

希望这些示例以及手册页有所帮助。


23

我最近在这里找到了很好的解释。它基本上用于为IP数据包设置特定的报头,以影响进一步做出的路由决策。如果有的话,TTL选项可能是最有趣的:

TTL目标用于更改数据包的TTL(生存时间)字段。我们可以告诉数据包仅具有特定的TTL等。这样做的一个很好的原因可能是我们不想将自己献给爱管闲的Internet服务提供商。一些Internet服务提供商不喜欢在单个连接上运行多台计算机的用户,并且已知某些Internet服务提供商正在寻找生成不同TTL值的单个主机,并将其视为连接到单个计算机的多台计算机的众多标志之一。连接。

其他目标是TOS, MARK, SECMARK, CONNSECMARK


4
Mangle还用于QOS中以处理数据包标记或在数据负载分配中将数据包分配到不同的路由。
TomTom

8

作为iptables新手,我想说:mangle表允许修改数据包头中的一些特殊条目。(例如:服务类型,生存时间)(还允许设置特殊标记和安全上下文标记)


2

这里有很好的深入探讨,但在这里很难理解iptables的教程。

mangle表用于以各种方式更改数据包的IP标头。例如,您可以调整数据包的TTL(生存时间)值,以延长或缩短数据包可以维持的有效网络跳数。其他IP标头可以用类似的方式更改。

该表还可以在包上放置内部内核“标记”,以便在其他表中以及由其他联网工具进行进一步处理。该标记不会触及实际的数据包,但会将该标记添加到数据包的内核表示中。

它对我很有帮助,因为它也清楚地说明了所有零件如何装配在一起并相互干扰。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.