Iptables 用于在 Linux 内核中设置、维护和检查 IPv4 数据包过滤规则表。可以定义几个不同的表。每个表包含许多内置链,也可能包含用户定义的链。
每个链是可以匹配一组数据包的规则列表。每个规则指定如何处理匹配的数据包。这称为“目标”,它可能是跳转到同一个表中的用户定义链。
如何理解链的概念?
一条链是一个固定的规则列表吗?
我该如何定义/指定和使用链?例如,
-A, --append chain rule-specification
将一个或多个规则附加到所选链的末尾。当源名称和/或目标名称解析为多个地址时,将为每个可能的地址组合添加一条规则。
下面的命令中是INPUT
一个链的名称吗?这是我可以随意起的名字吗?这条链是否恰好有两条规则?谢谢。
iptables -A INPUT -p tcp -s localhost --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j DROP
答案1
iptables 链只是按顺序处理的规则列表。它们可以是固定内置的之一(默认表中的INPUT
、OUTPUT
、表中的其他一些),也可以是用户定义的,然后可以从其他表中调用。FORWARD
filter
nat
正如-A
(追加)、-I
(插入)和-D
(删除)命令所暗示的那样,链中的规则是可以自由编辑的,它们不是固定的。
下面的命令中是
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
表开始,它们是经常需要的。)