网络过滤器

网络过滤器

我正在尝试了解防火墙在 Linux 中的工作原理...我已阅读文档,但我不确定某些事情...

Netfilters 包含在现代内核中,它允许您使用挂钩来监视包而不更改其内容。

他们说 iptables 是一个使用 netfilter 和 ip_tables 模块的软件..
我的问题是....

  • IPTables 用户空间软件是否注册任何钩子?
  • ip_table模块有什么作用?
  • 谁来处理 iptables 或模块?
  • IPtable 做什么?(只是管理内存中的规则?还是它有钩子并处理流量?)?

答案1

网络过滤器

netfilter 是一组遍布内核中网络代码的钩子。这意味着如果一段代码要做一些重要的事情(我们称之为 X),它会调用一个函数来表示“我要做 X”。然后,该函数将通过注册的回调通知任何其他感兴趣的各方。它也被 IPVS 等其他(不是 iptables)系统使用。

netfilter 还包括将数据包传递到用户空间程序的机制 - iptables 将其用于 QUEUE 和 ULOG 目标,以允许用户在用户空间中处理数据包。

ip_tables(内核模块)

ip_tables 是一个使用 netfilter 来获取这些通知的模块。它识别被告知相关的数据包并执行被告知要做的操作。它知道哪些数据包是相关的,以及根据用户给它的规则对它们执行的操作;它将这些规则存储在表中。事实上,它使用了 ip_tables 使用的更通用的模块 xtables。

扩展模块

扩展模块完成了提供匹配标准和目标操作的大部分工作。扩展模块的一些示例包括 IP_NF_TARGET_LOG 和 NF_NAT。

iptables(用户空间工具)

iptables 是一个用户空间工具,用于在 ip_tables 模块中设置这些规则。该工具还附带许多解析命令行选项和注册规则的插件。

了解有关 iptables 内部结构的更多信息

如果你想了解更多内部原理,可以参考很棒的书关于它。如果您想为 iptables 创建附加功能,本书提供了您所需的一切,但不会帮助您进一步了解如何使用 iptables。

了解有关使用 iptables 的更多信息

如果您想更好地了解如何使用 iptables,最好阅读几个不同的文档以了解不同方式的解释。更重要的是,自己玩玩 iptables。我特别喜欢使用 LOG 目标来查看数据包通过表和链的流动以及规则对它们的影响。此外,通过表格的数据包流图非常有用。最后,如果您尝试使用 iptables 执行某些操作,但它没有达到您的预期,请在网站上提出具体问题;有很多经常回答问题的人熟悉 iptables。

答案2

iptables命令仅操作内核的数据包过滤规则。根据这些规则,网络流量通常完全由内核管理。内核可以执行非常复杂的路由和监控。除此之外iptablesip路由2实用程序的集合对于控制高级场景中的内核行为是必要的。

ip_tables模块(没有ip_table模块)是内核数据包处理组件的一部分。除非您正在开发内核网络代码或安装来自这样做的人的自定义补丁,否则您不需要关心哪个模块到底在做什么。

当收到数据包时可以调用用户空间代码。这对应于非常具体的过滤、修改、路由或日志记录需求。内核具有在某些事件上运行用户空间代码的钩子,并且netfilter 用户空间库为这些钩子提供接口。

答案3

首先了解一下,在Linux中,TCP/IP的发送、接收、转发都是在内核中完成的。因此,与网络相关的所有内容都是内核模块,它们要么必须内置到内核中,要么modprobe在启动后进行删除。

引用自http://www.netfilter.org/:“netfilter 是 Linux 内核中的一组钩子,允许内核模块向网络堆栈注册回调函数。然后,为遍历网络堆栈中相应钩子的每个数据包回调已注册的回调函数。”

这意味着 Netfilter 只是内核中的一堆“开口”,允许人们创建和插入其他代码,从而改变 Linux 执行与网络相关的任何操作的方式。

文章进一步指出:“iptables 是一种用于定义规则集的通用表结构。IP 表中的每条规则都包含多个分类器(iptables 匹配)和一个连接的操作(iptables 目标)。”

iptables是一个特定的项目和一组内核模块,它利用 Netfilter 提供的“开口”来实现基于规则的数据包过滤(也称为防火墙)等等。

因此,iptables1) 将自身挂接到 Netfilter,拦截内核将要发送到 NIC 或发送到应用程序的网络数据包,2) 根据其当前的每组规则处理此数据包,3) 当规则匹配时,将数据包发送到该规则的目标

通过正确配置的规则,您可以丢弃来自 NIC 的某些数据包、更改数据包以实施 NAT 或端口重定向,或者仅根据数据包的协议特定内容或数据包的有效负载内容采取操作。您还可以编写规则,将数据包传递给用户空间应用程序(这是NFQUEUE目标)以进行进一步处理(基于用户空间的过滤器,例如moblock使用此)。

我不是一名 Linux 内核专家,但我相信有一个主要iptables模块可以处理添加/删除规则,这就是iptables用户空间应用程序所涉及的内容。几乎每个目标都由其自己的内核模块处理,该模块可以作为单独的模块存在,也可以构建到内核中。

你可以自己找找。从 中下载内核www.kernel.org,un-bzip2-it,直接 cd 到其中并执行make menuconfig.从“网络支持”开始深入查看,您将能够看到 iptables 可用的所有模块。

相关内容