iptables 中的链是什么?

Tim*_*Tim 5 iptables

iptables 用于在 Linux 内核中设置、维护和检查 IPv4 包过滤规则表。可以定义几个不同的表。每个表都包含许多内置链,也可能包含用户定义的链。

每个链都是一个规则列表,可以匹配一组数据包。每个规则指定如何处理匹配的数据包。这称为“目标”,它可能是到同一个表中用户定义链的跳转。

我该如何理解链的概念?

链是固定的规则列表吗?

我应该如何定义/指定和使用链?例如,

-A, --append chain rule-specification
Run Code Online (Sandbox Code Playgroud)

将一个或多个规则附加到所选链的末尾。当源和/或目标名称解析为多个地址时,将为每个可能的地址组合添加规则。

在下面的命令中是INPUT一个链的名称?是不是可以随便起个名字?这条链是否正好有两条规则?谢谢。

iptables -A INPUT -p tcp -s localhost --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j DROP
Run Code Online (Sandbox Code Playgroud)

ilk*_*chu 12

iptables 链只是规则列表,按顺序处理。它们可以是固定内置的人(一个INPUT,OUTPUT,FORWARD在默认的filter表,在例如在一些其他nat表),然后可以从别人调用,或者用户定义的,。

正如-A(append)、-I(insert) 和-D(delete) 命令所暗示的那样,链中的规则是可自由编辑的,它们不是固定的。

在下面的命令中是INPUT一个链的名称?

是的。

是不是可以随便起个名字?

那个不是,它是包含进入系统的数据包规则的内置链(目的地是主机上运行的进程)。默认filter表中的另外两个是OUTPUT(显然来自系统的FORWARD数据包)和(路由数据包)。

该手册页iptables(8)有表及其内置链(下的说明TABLES)。

当然,您可以将输入数据包的任何规则放在任意用户定义的链中,然后您只需要添加一条规则来INPUT引用该链。(例如iptables -A INPUT -j mychain会跳转到mychain并处理那里的任何规则。)

这条链是否正好有两条规则?

我们不知道。这两个命令将两个规则附加到链中。但在这些命令运行之前,可能还有其他人已经存在。

如果你iptables -F INPUT在这两个之前有第一个命令,那么结果将是只剩下这两个规则。

另请参阅:如何遍历 iptables 表和链,其中包含指向您从未需要了解的所有内容的链接,例如 https://stuffphilwrites.com/2014/09/iptables-processing-flowchart/。(您可能想忽略raw和mangle表格,因为它们经常需要。)