首页 Linux网维 Linux 3.13 引入 nftables,你可能会喜欢的几种理由

Linux 3.13 引入 nftables,你可能会喜欢的几种理由

Linux 3.13 带来了很多特性nftables也是第一次正式发布nftables是一个致力于替换现有的{ip,ip6,arp,eb}tables框架(也就是大家熟知的ipta…

Linux 3.13 带来了很多特性nftables也是第一次正式发布nftables是一个致力于替换现有的{ip,ip6,arp,eb}tables框架(也就是大家熟知的iptables)的项目然而,Linux3.13中的nftables版本还是不完整的,还缺少一些重要的特性。

这些特性会在后续的Linux版本中发布大多数场景下nftables已经可以使用,但是完整的支持(即,nftables优先级高于iptables)应该在Linux 3.15 nftables引入了一个新的命令行工具nft。

nft是iptables及其衍生指令(ip6tables,arptables)的超集同时,nft拥有完全不同的语法是的,如果你习惯于iptables,这是个不好的消息但是有一个兼容层允许你使用iptables,而过滤是由内核中的nftables完成的。

到目前为止,只有非常少的文档资料你可以找到我的nftables快速开始,其他的一些初步文档很快就会公开 一些命令行例子一行多个目标 加入你想用iptables记录并丢弃一个包,你必须写两条规则,一条记录,一条丢弃: 。

iptables -A FORWARD -p tcp –dport 22 -j LOG iptables -A FORWARD -p tcp –dport 22 -j DROP 使用nft,你可以把两个目标合并到一起:

nft add rule filter forward tcp dport 22 log drop 方便创建集合 假如你想针对不同的端口允许包并且允许不同的icmpv6类型使用iptables,你需要使用类似如下的规则: 。

ip6tables -A INPUT -p tcp -m multiport –dports 23,80,443 -j ACCEPT ip6tables -A INPUT -p icmpv6 –icmpv6-type neighbor-solicitation -j ACCEPT

ip6tables -A INPUT -p icmpv6 –icmpv6-type echo-request -j ACCEPT ip6tables -A INPUT -p icmpv6 –icmpv6-type router-advertisement -j ACCEPT

ip6tables -A INPUT -p icmpv6 –icmpv6-type neighbor-advertisement -j ACCEPT  使用nft,集合可以用在规则中任一元素: nft add rule ip6 filter input tcp dport {telnet, http, https} accept

nft add rule ip6 filter input icmpv6 type { nd-neighbor-solicit, echo-request, nd-router-advert, nd-neighbor-advert } accept

这样更容易编写,而且对于过滤方更加高效,因为对每一种协议只需要添加一个规则 你也可以给集合命名,以便在其他地方使用: # nft -i # use interactive mode nft> add set global ipv4_ad { type ipv4_address;}

nft> add element global ipv4_ad { 192.168.1.4, 192.168.1.5 } nft> add rule ip global filter ip saddr @ipv4_ad drop

之后,当检测到一个新的破坏者时: # nft -i nft> add element global ipv4_ad { 192.168.3.4 } 映射 nftables的一个高级特性就是映射可以使用不同类型的数据并映射它们。

例如,我们可以映射网络端口到专用的规则集合(之前创建的存储在一个链中)在这个例子中,链的名称为low_sec和high_sec: # nft -i nft> add map filter jump_map { type ifindex : verdict; }

nft> add element filter jump_map { eth0 : jump low_sec; } nft> add element filter jump_map { eth1 : jump high_sec; }

nft> add rule filter input iif vmap @jump_map  现在,比如说你有一个新的动态端口ppp1,对它做过滤非常简单,仅仅把它加到jump_map映射中就可以了 。

nft> add element filter jump_map { ppp1 : jump low_sec; }  运维和内核方面(更新速度更快) 在iptables中添加一条规则,会随着规则数量增多而变得非常慢,这也就解释了为什么调用iptables的脚本需要花很久才完成。

这种状况对nftables而言就不存在了nftables使用原子的快速操作来更新规则集合 内核更新更少 使用iptables,每一个匹配或投递都需要内核模块的支持因此,如果你忘记一些东西或者要添加新的功能时都需要重新编译内核。

nftables就不存在这种状况了在nftables中,大部分工作是在用户态完成的,内核只知道一些基本指令(过滤是用伪状态机实现的)例如,icmpv6支持是通过nft工具的一个简单的补丁实现的在iptables中这种类型的更改需要内核和iptables都升级才可以。

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

作者: 3182235786a

为您推荐

linux文件命令

linux文件命令

在 Linux 中,我们可以使用 `with open()` 语句和 `write()` 函数来写入文件。以下是一个简单...
linux的命令

linux的命令

以下是一个简单的 Linux 命令示例,该命令将显示当前日期和时间: “`c #include <st...
linux 命令

linux 命令

由于 Linux 命令是由 C 语言编写的,因此下面是一个简单的用中文编写的 Linux 命令示例,它将输出“Hello...
linux命令tar

linux命令tar

这个问题看起来有些模糊,我不确定您是想了解如何在 Linux 系统中使用 tar 命令,还是如何编写一个名为 tar 的...
linux压缩命令

linux压缩命令

Linux压缩命令:高效管理文件和目录 Linux操作系统提供了一系列强大的压缩命令,使您能够高效地管理文件和目录。无论...

发表回复

返回顶部