根据我的理解,iptables 在传输层(第 4 层)上工作,发生的任何数据包过滤都是基于第 4 层的 ip 协议,如 tcp 和 udp。因此,如果我们输入 esp、gre 和 l2tp 等协议iptables-p选项,有意义吗?我们可以使用 iptables 基于第 2/3 层协议过滤数据包吗?如果不是,那么iptables是如何根据icmp协议过滤数据包的呢?
iptables 新手,我仍在学习中。谢谢!
答案1
iptables
支持数据链路、网络和传输层的过滤。
(协议-p
)选项并不具体限于第4层协议。这手册页特别提到了 icmp 和 esp。我知道 gre 也受支持(“gre”或协议“47”)。指定的协议可以按名称或其在 中指定的整数传递给此选项/etc/protocols
。我不确定 iptables 是否支持此列表中的所有协议。
如果指定了 -p 或 --protocol 并且当且仅当遇到未知选项时,iptables 将尝试加载与协议同名的匹配模块,以尝试使该选项可用。
这个“匹配模块”语法是扩展的数据包匹配模块,将通过使用选项来指定-m --match
。
您可以在此处找到支持的扩展列表:iptables 扩展。可用的 netfilter 内核模块的列表位于/lib/modules/$(uname -r)/kernel/net/netfilter
。