65.9K
CodeProject 正在变化。 阅读更多。
Home

通过网络进行数据包遍历

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.29/5 (5投票s)

2006年4月1日

5分钟阅读

viewsIcon

21814

通过网络进行数据包遍历

开始

 

我上一篇文章描述了 IP-Tables 的基础知识。

现在,我们将讨论数据包如何遍历不同的链以及它们的顺序。我们还将讨论表的遍历顺序。稍后,当我们编写自己的特定规则时,我们将看到它的价值。我们还将了解一些其他依赖于内核的组件何时介入。也就是说,不同的路由决策等等。如果我们想编写可以更改数据包路由模式/规则的 iptables 规则,这一点尤其重要;即数据包为何以及如何路由,DNAT 和 SNAT 是很好的例子。当然,也不能忘记 TOS 位。

 

 为了阐明图示,请考虑这一点。如果我们收到一个数据包,经过第一个路由决策,但该数据包并非发往本地机器本身,那么它将通过 FORWARD 链进行路由。另一方面,如果数据包是发往本地机器正在监听的 IP 地址,那么我们将通过 INPUT 链将数据包发送到本地机器。

 

还值得注意的是,数据包可能发往本地机器,但目标地址可能在 PREROUTING 链中通过 NAT 进行更改。由于这发生在第一个路由决策之前,因此在更改后会查看该数据包。因此,路由可能在路由决策完成之前就已经改变。请注意,所有数据包都将通过图示中的一条或另一条路径。如果您将数据包 DNAT 回到它来自的网络,它仍然会穿过剩余的链,直到它再次离开网络。

 

 

MANGLE TABLE :

此表主要用于修改数据包。换句话说,您可以自由使用 mangle 匹配等,这些可以用来更改 TOS(服务类型)字段等。此表不能用于任何过滤;在此表中,DNAT、SNAT 或 Masquerading 也无效。

 

 

仅在 mangle 表中有效的目标

 

TOS 目标用于设置和/或更改数据包中的服务类型(Type Of Service)字段。这可以用于设置网络关于数据包如何路由等的策略。 

 

TTL 目标用于更改数据包的 TTL(生存时间)字段。我们可以告诉数据包只具有特定的 TTL 等。这样做的原因之一可能是我们不希望向爱管闲事的互联网服务提供商暴露自己。一些互联网服务提供商不喜欢用户在单个连接上运行多个计算机,并且有些互联网服务提供商会查找单个主机生成不同的 TTL 值,并将其视为多个计算机连接到单个连接的迹象之一。

 

MARK 目标用于为数据包设置特殊的标记值。 

 

 

NAT TABLE :

 此表仅用于对不同数据包进行 NAT(网络地址转换)。换句话说,它仅用于转换数据包的源字段或目标字段。请注意,如前所述,流中的第一个数据包才会命中此链。之后,其余数据包将自动执行与第一个数据包相同的操作。

执行此类操作的实际目标是

 

DNAT(目标网络地址转换)目标主要用于您拥有公共 IP 并希望将防火墙的访问重定向到其他主机(例如,在 DMZ 中)的情况。换句话说,我们更改数据包的目标地址并将其重新路由到该主机。

 

 

SNAT(源网络地址转换)主要用于更改数据包的源地址。在大多数情况下,您将隐藏您的本地网络或 DMZ 等。一个很好的例子是防火墙,其外部 IP 地址已知,但我们需要用防火墙的 IP 地址替换我们本地网络的 IP 地址。使用此目标,防火墙将自动进行 SNAT 和 De-SNAT 数据包,从而有可能从 LAN 连接到 Internet。 

 

MASQUERADE 目标的使用方式与 SNAT 完全相同,但 MASQUERADE 目标在计算方面需要更多的开销。原因是每次 MASQUERADE 目标被数据包命中时,它都会自动检查要使用的 IP 地址,而不是像 SNAT 目标那样只使用单个配置的 IP 地址。 

 

 

FILTER TABLE :

 filter 表当然主要用于过滤数据包。我们可以根据需要匹配和过滤数据包。对于此链或可能因格式错误等原因而溜过的数据包没有特别之处。这是我们实际对数据包采取行动并查看其内容,然后根据其有效载荷将其 DROP 或 ACCEPT 的地方。当然,我们也可以进行预过滤;然而,这个特定的表就是过滤设计的目的。几乎所有目标在此链中都可用。

 

我的下一篇文章将提供有关状态机的信息。 

 

 

© . All rights reserved.