网络过滤器

Netfilter定义了堆栈中的检查点以及检查点上引用的数据结构以及引用它们的过程。

检查点由宏NF_HOOK定义。

netfilter IP数据包过滤系统是一个功能强大的工具,用于在进行数据包过滤决策时添加,编辑和删除防火墙遵循的规则。

这些规则存储在集成到Linux内核中的专用数据包过滤器表中。

在数据包过滤表中,规则按我们称之为链的方式进行分组。

我将详细讨论这些规则以及如何构建它们并将它们分组。

尽管netfilter IP包过滤系统被称为单个实体,但它实际上由两个组件netfilter和iptables组成。

netfilter组件,也称为内核空间(kernelspace),是内核的一部分,由包过滤表组成,包含内核用于控制包过滤的规则集。

iptables组件是一种工具,也称为用户空间,可以轻松地在数据包筛选器表中插入,修改和删除规则。

除非您使用的是Red Hat Linux 7.1或更高版本,否则您需要从netfilter.org下载该工具并进行安装。

通过使用用户空间,您可以构建自己的自定义规则,这些规则存储在内核空间的数据包筛选器表中。

这些规则的目标是告诉内核如何处理来自某些源,某些目的地或某些协议类型的数据包。

如果数据包与规则匹配,则使用目标ACCEPT来允许数据包通过。

您还可以使用目标DROP或REJECT来阻止和终止数据包。

可以对数据包执行的其他操作还有许多其他目标。

可以根据规则处理的分组类型将规则分组为链。

处理入站数据包的规则被添加到INPUT链中。

处理出站数据包的规则将添加到OUTPUT链中。

处理正在转发的数据包的规则将添加到FORWARD链中。

这三个链是基本数据包过滤表中内置的默认主干。

此外,还有许多其他类型的链(例如PREROUTING和POSTROUTING),以及提供用户定义的链。

每个链可以具有定义“默认目标”的策略,该默认目标是要执行的默认动作,这在分组与链中的任何规则不匹配时完成。

一旦规则建立并且链条到位,您就可以开始真正的数据包过滤过程。

此时内核空间从用户空间接管。

当数据包到达防火墙时,内核首先检查数据包的标头,尤其是数据包的目的地。

我们将此流程称为路由。

如果数据包来自外部世界并进入系统,并且防火墙处于打开状态,则内核将其传递给内核空间数据包过滤器表的INPUT链。

如果数据包来自系统内部的另一个源或系统所连接的内部网络,并且数据包进入另一个外部系统,则数据包将传递到OUTPUT链。

类似地,源自外部系统并转到外部系统的数据包将传递到FORWARD链。

接下来,将数据包的标头信息与传递给它的链中的每个规则进行比较,以查看它是否与规则完全匹配。

如果数据包与规则匹配,则内核执行数据包上规则目标指定的操作。

但是,如果数据包与此规则不匹配,则会将其与链中的下一个规则进行比较。

最后,如果数据包与链中的任何规则都不匹配,内核将参考链的策略来决定如何处理数据包。

理想的策略应该告诉内核DROP数据包。

netfilter的最大优点是可以配置状态防火墙,这是以前的工具(如ipfwadm和ipchains)无法提供的重要功能。

状态防火墙可以指定并记住为发送或接收数据包而建立的连接状态。

防火墙可以从数据包的连接跟踪状态获取此信息。

在决定新的数据包过滤时,防火墙使用的这些状态信息可以提高其效率和速度。

有四种有效状态,名为ESTABLISHED,INVALID,NEW和RELATED。

状态ESTABLISHED表示该数据包属于已建立的连接,该连接始终用于发送和接收数据包,并且完全有效。

INVALID状态表示该数据包未与任何已知的流或连接相关联,并且可能包含不正确的数据或标头。

状态NEW表示数据包已经或将要发起新连接,或者它与尚未用于发送和接收数据包的连接相关联。

最后,RELATED指示数据包正在启动新连接,并且它与已建立的连接相关联。

netfilter的另一个重要优势是它可以让用户完全控制防火墙配置和数据包过滤。

您可以自定义自己的规则以满足您的特定需求,仅允许您想要进入系统的网络流量。

此外,netfilter是免费的,非常适合那些想省钱的人,它可以取代昂贵的防火墙解决方案。