nftables

https://home.regit.org/netfilter-en/nftables-quick-howto/

https://blog.csdn.net/dog250/article/details/54170683

http://blog.jobbole.com/59624/

https://farkasity.gitbooks.io/nftables-howto-zh/content/

http://wiki.nftables.org/wiki-nftables/index.php/Main_Page

nftables 作为新一代的防火墙策略框架,是从内核 3.13 版本引入的新的数据包过滤框架,nftables是一个致力于替换现有的{ip,ip6,arp,eb}tables框架 (也就是大家熟知的iptables) 的项目,而且提供了类似tc的带宽限速能力

nftables 引入了一个新的命令行工具nft,取代了之前的iptables、ip6iptables、ebtables等各种工具,是用户空间的管理工具。

netfilter

netfilter是Linux内核的包过滤框架,它提供了一系列的钩子 (Hook) 供其他模块控制包的流动。这些钩子包括

NF_IP_PRE_ROUTING: 刚刚通过数据链路层解包进入网络层的数据包通过此钩子,它在路由之前处理

NF_IP_LOCAL_IN: 经过路由查找后,送往本机 (目的地址在本地) 的包会通过此钩子

NF_IP_FORWARD: 不是本地产生的并且目的地不是本地的包 (即转发的包) 会通过此钩子

NF_IP_LOCAL_OUT: 所有本地生成的发往其他机器的包会通过该钩子

NF_IP_POST_ROUTING: 在包就要离开本机之前会通过该钩子,它在路由之后处理

nftables 结构上分为 table(表), chain(链), rule(规则), 与Iptables不一致的地方在于,table 与 chain 允许不止一个,名字也可以自由设置。

在 nftables 中,表是链的容器。所以开始使用 nftables 时你首先需要做的是添加至少一个表。然后,你可以向你的表里添加链,然后往链里添加规则。

table 只是存放chain的容器,不同table之间没有直接关系。

不同的chain通过priority进行选择。相同类型的链,priority数值最小、或者相同priority但是最先添加的chain作为当前有效类型的链表。

跟iptables类似,nftables也是使用表和链来管理规则。

nftables有 6 种不同类型的表,它们是:

ip

arp

ip6

bridge

inet,这在 Linux 内核 3.14 之后可用。这个特殊的表是 IPv4 和 IPv6 混合使用的表,这对简化混合栈防火墙的管理有帮助。因此,你在 inet 表中注册的链在 IPv4 和 IPv6 中都能看到。

netdev,这在 Linux 内核 4.2 之后可用。它有一个进入时的钩子,你可以使用它注册一个链以便在路由之前更早的阶段进行过滤,它是已存在的 tc 的替代。

https://wiki.shileizcc.com/display/firewall/nftables

https://itxx00.github.io/blog/2017/06/13/nftables-man-page/

https://github.com/feiskyer/sdn-handbook/blob/master/linux/iptables.md

http://dog250.blog.51cto.com/2466061/1583015

https://wiki.nftables.org/wiki-nftables/index.php/Simple_rule_management

https://farkasity.gitbooks.io/nftables-howto-zh/content/chapter3/operations_at_ruleset_level.html