iptables 表和链是如何遍历的

zer*_*uno 28 firewall iptables

我知道 linux 有 3 个内置表,每个表都有自己的链,如下所示:

过滤器:路由前、转发、后路由

NAT:预路由、输入、输出、后路由

MANGLE预路由、输入、转发、输出、后路由

但我无法理解它们是如何遍历的,如果有的话,以什么顺序。例如,它们在以下情况下如何遍历:

  1. 我将数据包发送到同一本地网络中的一台电脑
  2. 当我向不同网络中的 PC 发送数据包时
  3. 当网关收到一个数据包并且必须转发它时
  4. 当我收到寄给我的包裹时
  5. 任何其他情况(如果有)

Dra*_*oan 37

维基百科有一个很好的图表来显示处理顺序。

有关更多详细信息,您还可以查看 iptables 文档,特别是表和链遍历章节。其中还包括一个流程图

顺序的变化取决于 netfilter 的使用方式(作为网桥或网络过滤器以及它是否与应用层交互)。

通常(尽管上面链接的章节中有更多的魔鬼)链被处理为:

  • 看到输入链“来自外部的通信的入站这台主机”。
  • 将 FORWARD 链视为“使用此主机作为路由器的流量”(源和目标不是此主机)。
  • 将 OUTPUT 链视为“主机要发送的流量”。
  • PREROUTING / POSTROUTING 对每种表类型都有不同的用途(例如对于 nat 表,PREROUTING 用于入站(路由/转发)SNAT 流量,POSTROUTING 用于出站(路由/转发)DNAT 流量。查看文档了解更多信息具体。

各种表是:

  • Mangle 是在遍历时更改数据包(服务类型、生存时间等)。
  • nat 就是放入 NAT 规则。
  • Raw 用于标记和连接跟踪。
  • Filter 用于过滤数据包。

所以对于你的五个场景:

  1. 如果发送主机您的主机带有 iptables,则 OUTPUT
  2. 和上面一样
  3. FORWARD 链(前提是网关是有 iptables 的主机)
  4. 如果“我”是带有 iptables 的主机,则 INPUT
  5. 看看上面的规则链(这是一般的经验法则)和流程图(这也各不相同的东西,你正在努力实现使用iptables)

  • 另一个很好的资源 - https://www.digitalocean.com/community/tutorials/a-deep-dive-into-iptables-and-netfilter-architecture。 (3认同)