内核防火墙是否位于网络访问层和互联网层之间?

内核防火墙是否位于网络访问层和互联网层之间?

这个问题是我的后续问题上一个问题

我的逻辑是,内核防火墙位于网络访问层和互联网层之间,因为它需要访问 IP 数据包标头来读取源 IP 地址和目标 IP 地址,以便在确定是否存在之前进行过滤数据包的目的地是主机,或者如果数据包的目的地是其他地方,则应转发到下一跳。

不知何故,说防火墙是互联网层的一部分似乎也是合乎逻辑的,因为那是路由表所在的位置,并且防火墙在某些方面类似于路由表规则。

答案1

防火墙不存在于一个地方在内核网络堆栈中。例如,在 Linux 中,支持防火墙功能的底层基础设施是由网络过滤器数据包过滤框架。 netfilter 框架本身无非是一个内核协议栈中各个点的钩子集

Netfilter提供了五个钩子:

  • NF_IP_PRE_ROUTING

    通过初始健全性检查的数据包将被传递到NF_IP_PRE_ROUTING挂钩。这发生在做出任何路由决策之前。

  • NF_IP_LOCAL_IN

    发往主机本身的数据包将被传递到NF_IP_LOCAL_IN钩子。

  • NF_IP_FORWARD

    发往另一个接口的数据包将传递到NF_IP_FORWARD挂钩。

  • NF_IP_LOCAL_OUT

    本地创建的数据包在做出路由决策后传递NF_IP_LOCAL_OUT,尽管路由可能因挂钩而改变。

  • NF_IP_POST_ROUTING

    钩子NF_IP_POST_ROUTING是数据包在网络上传输之前可以传递到的最终钩子。

防火墙由一个内核模块组成,该模块为netfilter框架提供的每个钩子注册一个回调函数;以及用于配置防火墙的用户空间工具。每次将数据包传递给钩子时,都会调用相应的回调函数。回调函数可以自由地操作触发回调的数据包。回调函数还确定是否进一步处理数据包;掉落;由回调本身处理;排队,通常用于用户空间处理;或者是否应该为数据包再次调用相同的钩子。

Netfilter 通常与iptables数据包过滤器。作为Gnouc 已经在你之前的问题中指出了iptables 有一个内核模块 ,ip_tables它与 netfilter 接口,还有一个用户空间程序 ,iptables用于配置内核中的数据包过滤器。事实上,iptables 数据包过滤器提供了多种工具,每种工具都与不同类型的数据包处理相关:

  • 用户空间工具iptablesip_tables内核模块关心的是IPv4数据包过滤。

  • 用户空间工具ip6tablesip6_tables内核模块关心的是IPv6数据包过滤。

  • 用户空间工具arptablesarp_tables内核模块关心的是ARP数据包过滤。

除了 iptables 数据包过滤器之外,ebtables用户空间工具和eb_tables内核模块关心链路层以太网帧过滤。这些工具有时统称为扩展表,因为类似的基于表的架构。

该架构提供了基于以下内容的数据包选择抽象:桌子数据包沿着。每个表都包含包过滤规则组织于链条。五个预定义链:PREROUTING、INPUT、FORWARD、OUTPUT 和 POSTROUTING 对应于 netfilter 提供的五个内核挂钩。规则所属的表决定了规则应用于特定 netfilter 挂钩时的相对顺序:

  • raw表先于任何其他表过滤数据包。
  • mangle表用于更改数据包。
  • nat表用于网络地址解读(例如端口转发)。
  • filter表用于数据包过滤,它不应该改变数据包。
  • security表用于由 Linux 安全模块 (LSM)(例如 SELinux)实现的强制访问控制 (MAC) 网络规则。

Jan Engelhardt 的下图显示了表和链如何对应 OSI 模型的不同层:

通过 Linux 网络和 xtable 的数据包流路径示意图

今年早些时候,一个新的数据包过滤框架被称为nftables已合并到主线 Linux 内核版本 3.13 中。 nftables 框架旨在取代现有的 xtables 工具。它也基于 netfilter 基础设施。

类 Unix 操作系统中其他基于内核的防火墙包括IP过滤器(多平台),PF(OpenBSD,移植到各种其他 BSD 变体和 Mac OS X),NPF(NetBSD),ip防火墙(FreeBSD,移植到各种操作系统)。

相关内容