返回介绍

最佳实践 84:深入理解 iptables 各种表和各种链

发布于 2025-04-20 17:44:51 字数 2135 浏览 0 评论 0 收藏

通过以上几节的最佳实践,可以知道,iptables 为系统工程师提供了强大的包过滤功能、NAT 网络地址转换功能。在 Linux 中,为 iptables 提供这些功能的底层模块,是 netfilter 框架。netfilter 是 Linux 内核中的一系列钩子(hook),它为内核模块在网络栈中的不同位置注册回调函数(callback function)提供了支持。数据包在协议栈中依次经过这些在不同位置的回调函数的处理。

Netfilter 钩子与 iptables 各种表和链的处理顺序如图 16-13 所示。

图 16-13 netfilter 钩子与 iptables 各种表和链的处理顺序图

Netfilter 有 5 个钩子可以提供程序去注册。在数据包经过网络栈的时候,这些钩子上注册的内核模块依次被触发。这 5 个钩子的处理时间如下。

- NF_IP_PRE_ROUTING:在数据流量进入网络栈后立即被触发,这个钩子上注册的模块在路由决策前即被执行。如图 16-13 中所示的阶段。

- NF_IP_LOCAL_IN:这个钩子在路由判断确定包是发送到本机时执行。如图 16-13 中所示的阶段。

- NF_IP_FORWARD:这个钩子在路由判断是需要转发给其他主机时执行。如图 16-13 中的所示的阶段。

- NF_IP_LOCAL_OUT:这个钩子在本机进程产生的网络被送到网络栈上时执行,如图中所示的阶段。

- NF_IP_POST_ROUTING:这个钩子在数据包经过路由判断即将发送到网络前执行。如图 16-13 中所示的阶段。

Iptables 中有 5 个链(chain),分别如下。

- PREROUTING:NF_IP_PRE_ROUTING 钩子触发。

- INPUT:NF_IP_LOCAL_IN 钩子触发。

- FORWARD:NF_IP_FORWARD 钩子触发。

- OUTPUT:NF_IP_LOCAL_OUT 钩子触发。

- POSTROUTING:NF_IP_POST_ROUTING 钩子触发。

Iptables 中有 5 种表(table),分别如下。

- filter 表。filter 表是 iptables 中使用最广泛的表,这个表的作用是进行过滤,也就是由这个表来决定一个数据包是否继续它的目的地址或者被拒绝。

- nat 表。顾名思议,这个是进行网络地址转换用的,如本章中的最佳实践 83 所示,可以改变数据包的源地址或者目的地址。

- mangle 表。mangle 表用于修改 IP 的头部信息,如修改 TTL(Time to Live)。

- raw 表。raw 表为 iptables 提供了一种不经过状态追踪的机制,在大流量对外业务的服务器上使用这个表以避免状态追踪带来的性能问题。如本章中的最佳实践 81 中的案例所示。

- security 表。提供在数据包中加入 SELinux 特性的功能。一般用得不多,在下面的章节中不再包含这一部分内容。

通过以上分析,我们知道 netfilter 仅仅有 5 个钩子,而 iptables 有 5 个链和 5 种表,由此可见在一个钩子上可能有多个表的不同链需要处理,如图 16-13 中的 raw 表、mangle 表、filter 表都有 POSTROUTING 链,这些链根据自己向内核注册时的优先级(priority)依次处理。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。