Ron*_*nce 1 networking security firewall kernel tcp-ip
这个问题是我上一个问题的后续。
我的逻辑是说内核防火墙位于网络访问层和 Internet 层之间,因为它需要访问 IP 数据包标头以读取源和目标 IP 地址,以便在确定之前进行过滤数据包的目的地是主机,或者如果数据包的目的地是别处,则应将其转发到下一跳。
不知何故,说防火墙是互联网层的一部分似乎也合乎逻辑,因为这是路由表所在的地方,防火墙在某些方面类似于路由表规则。
内核网络堆栈中的单个位置不存在防火墙。例如,在 Linux 中,支持防火墙功能的底层基础结构由netfilter数据包过滤器框架提供。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 数据包过滤器提供了多种工具,每一种都与不同类型的数据包处理相关联:
在iptables
用户空间工具和ip_tables
内核模块关注自己与IPv4的包过滤。
在ip6tables
用户空间工具和ip6_tables
内核模块关注自己与IPv6的数据包过滤。
在arptables
用户空间工具和arp_tables
内核模块关注自己与ARP报文过滤。
除了 iptables 数据包过滤器之外,ebtables
用户空间工具和eb_tables
内核模块还关注链路层以太网帧过滤。由于类似的基于表的架构,这些工具有时统称为xtables。
该架构提供了基于数据包遍历表的数据包选择抽象。每个表都包含按链组织的数据包过滤规则。五个预定义链,PREROUTING、INPUT、FORWARD、OUTPUT 和 POSTROUTING 对应于 netfilter 提供的五个内核钩子。当规则应用于特定的 netfilter 钩子时,规则所属的表决定了规则的相对顺序:
raw
表在任何其他表之前过滤数据包。mangle
表用于更改数据包。nat
表用于网络地址转换(例如端口转发)。filter
表用于数据包过滤,它不应该改变数据包。security
表用于由 Linux 安全模块 (LSM)(例如 SELinux)实施的强制访问控制 (MAC) 网络规则。Jan Engelhardt 的下图显示了表和链如何对应于 OSI 模型的不同层:
今年早些时候,一个名为nftables的新数据包过滤框架被合并到主线 Linux 内核版本 3.13 中。nftables 框架旨在替换现有的 xtables 工具。它还基于 netfilter 基础结构。
类 Unix 操作系统中的其他基于内核的防火墙包括IPFilter(多平台)、PF(OpenBSD,移植到各种其他 BSD 变体和 Mac OS X)、NPF(NetBSD)、ipfirewall(FreeBSD,移植到各种操作系统) .
归档时间: |
|
查看次数: |
3473 次 |
最近记录: |