iptables表和链如何遍历


22

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

过滤器:预打印,前进,后送

NAT:预输出,输入,输出,写入

混合输出,输入,前进,输出,输出

但是我不明白它们是如何遍历的,以什么顺序遍历。例如,在以下情况下如何遍历它们:

  1. 我将数据包发送到同一局域网中的PC
  2. 当我将数据包发送到其他网络中的PC时
  3. 当网关收到数据包并且必须转发时
  4. 当我收到发给我的小包时
  5. 任何其他情况(如果有)

Answers:


28

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

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

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

通常(尽管上面链接的章节中的细节中有更多魔鬼),链条的处理方式如下:

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

各个表是:

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

因此,对于您的五个方案:

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

我最近还遇到了此链接-stuffphilwrites.com/2014/09/iptables-processing-flowchart。Phil Hagen那里有一个不错的流程图。
slm

1
另一个很好的资源-digitalocean.com/community/tutorials/…
slm
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.