基于国产UOS操作系统第4章-防火墙技术


风晓
风晓 2024-01-04 09:49:06 51353 赞同 0 反对 0
分类: 资源
什么是nfables? nftables是新的数据包分类框架,旨在取代现有的{ip,ip6,arp,eb} _tables基础结构。简而言之:

在大于等于3.13的Linux内核中可用。
它带有一个新的命令行实用程序nft,其语法与iptables不同。
它还带有一个兼容性层,该层允许您在新的nftables内核框架上运行iptables命令。
它提供了通用的集合基础结构,使您可以构造映射和串联。您可以使用此新功能将规则集排列在多维树中,这将大大减少需要检查的规则数量,直到找到对数据包的最终操作为止。

为什么要用nftables?
毕竟,我们喜欢iptables,该工具一直在为我们服务(并且在许多部署中可能会保持一段时间),以逐包和逐流的方式过滤流量,记录可疑流量活动,执行NAT等。其他事情。在过去的15年中,它附带了一百多个扩展!

但是,iptables框架有一些局限性,无法轻松解决:

避免代码重复和不一致:许多iptables扩展都是特定于协议的,因此没有统一的方式来匹配数据包字段,而是为它支持的每种协议都有一个扩展。这使代码库中的代码非常相似,可以执行类似的任务:有效负载匹配。
通过增强的通用集和映射基础结构,可以更快地对数据包进行分类。
通过新的inet系列简化的双堆栈IPv4 / IPv6管理,使您可以注册可查看IPv4和IPv6流量的基链。
更好的动态规则集更新支持。
就像其他Linux网络和Netfilter子系统一样,为第三方应用程序提供Netlink API。
解决语法不一致的问题,并提供更好,更紧凑的语法。

nftables VS iptables
nftables 和 iptables 一样,由表(table)、链(chain)和规则(rule)组成,其中表包含链,链包含规则,规则是真正的 action。与 iptables 相比,nftables 主要有以下几个变化:

iptables 规则的布局是基于连续的大块内存的,即数组式布局;而 nftables 的规则采用链式布局。其实就是数组和链表的区别,好像 Kubernetes 用户对此应该很兴奋?
iptables 大部分工作在内核态完成,如果要添加新功能,只能重新编译内核;而 nftables 的大部分工作是在用户态完成的,添加新功能很 easy,不需要改内核。
iptables 有内置的链,即使你只需要一条链,其他的链也会跟着注册;而 nftables 不存在内置的链,你可以按需注册。由于 iptables 内置了一个数据包计数器,所以即使这些内置的链是空的,也会带来性能损耗。
简化了 IPv4/IPv6 双栈管理
原生支持集合、字典和映射

注:在安装nftables之前必须配置固定IP地址

配置表:
创建表
nft add table ip filter

查看表
nft list tables

删除表
nft delete table ip filter

Troubleshooting: Since Linux kernel 3.18, you can delete tables and its content with this command. However, before that version, you need to delete its content first, otherwise you hit an error that look like this:

配置链
就像在iptables中一样,您将规则附加到链上。但是,与iptables模式操作相反,nftables基础结构没有预定义的链,因此您需要首先注册基本链,然后才能添加任何规则。
添加基础链
nft add chain [] { type hook priority ; [policy ] }

nft add chain ip foo input { type filter hook input priority 0 ; }
nft add chain ip foo output { type filter hook output priority 0 ; }

如果不包括大括号中指定的链配置,则将创建一个非基本链,该链不会看到任何数据包(类似于iptables -N chain-name)。

从nftables 0.5开始,您还可以像iptables中一样为基链指定默认策略:
nft add chain ip foo output { type filter hook output priority 0 ; policy accept; }
与iptables一样,两个可能的默认策略是accept和drop。

在入口挂钩上添加链时,必须指定将链连接到的设备:
nft add table netdev filter
nft add chain netdev filter dev0 filter { type filter hook ingress device ens33 priority 0 ; }

基链类型
可能的链类型为:

filter,显然用于过滤数据包。这由arp,bridge,ip,ip6和inet表系列支持。
route,如果修改了任何相关的IP标头字段或数据包标记,则用于重新路由数据包。如果您熟悉iptables,则此链类型为mangle表提供等效的语义,但仅用于输出挂钩(对于其他挂钩,请使用类型filter代替)。ip和ip6表家族对此提供支持。
nat,用于执行网络地址转换(NAT)。属于流的第一个数据包始终会命中此链,而不会继续跟踪数据包。因此,切勿使用此链进行过滤。ip和ip6表家族对此提供支持。
基础链钩
配置链时可以使用的挂钩是:

prerouting:这些数据包的路由决定尚未发生,因此您不知道它们是寻址到本地系统还是远程系统。
input:它是在路由决策之后发生的,您可以看到定向到本地系统的数据包以及系统中正在运行的进程。
forward:在路由选择决定之后也会发生,您可以看到未定向到本地计算机的数据包。
输出:捕获源自本地计算机中进程的数据包。
postrouting:路由决策后,数据包离开本地系统。
入口(仅在netdev系列中可用):从Linux内核4.2开始,您可以在从NIC驱动程序传递数据包之后,在进行预路由之前过滤流量。因此,您可以选择tc。
基链优先
优先级可用于对链进行排序或将其放置在某些Netfilter内部操作之前或之后。例如,将在连接跟踪操作之前放置优先级为-300的预路由挂接上的链。

作为参考,这是iptables中使用的不同优先级的列表:

NF_IP_PRI_CONNTRACK_DEFRAG(-400):碎片整理的优先级
NF_IP_PRI_RAW(-300):连接跟踪操作之前放置的原始表的传统优先级
NF_IP_PRI_SELINUX_FIRST(-225):SELinux操作
NF_IP_PRI_CONNTRACK(-200):连接跟踪操作
NF_IP_PRI_MANGLE(-150):操作操作
NF_IP_PRI_NAT_DST(-100):目标NAT
NF_IP_PRI_FILTER(0):过滤操作,过滤表
NF_IP_PRI_SECURITY(50):可以在其中设置secmark的安全表的位置
NF_IP_PRI_NAT_SRC(100):源NAT
NF_IP_PRI_SELINUX_LAST(225):SELinux在数据包出口
NF_IP_PRI_CONNTRACK_HELPER(300):出口处的连接跟踪

删除链
nft delete chain ip foo input

简单的规则管理:
nft add rule ip foo input tcp dport ssh accept //创建规则允许ssh登陆
nft insert rule ip foo input tcp dport http accept //插入规则允许http
列出所有规则
nft list ruleset
table ip foo {
chain input {
type filter hook input priority 0; policy accept;
tcp dport http accept
tcp dport ssh accept
使用 index 来指定规则的索引。add 表示新规则添加在索引位置的规则后面,inser 表示新规则添加在索引位置的规则前面。index 的值从 0 开始增加。
nft insert rule ip foo input index 1 tcp dport nfs accept
table ip foo {
chain input {
type filter hook input priority 0; policy accept;
tcp dport http accept
tcp dport nfs accept
tcp dport ssh accept

使用 handle 来指定规则的句柄。add 表示新规则添加在索引位置的规则后面,inser 表示新规则添加在索引位置的规则前面。handle 的值可以通过参数 --handle 获取。
table ip foo { # handle 2
chain input { # handle 1
type filter hook input priority 0; policy accept;
tcp dport http accept # handle 5
tcp dport nfs accept # handle 7
tcp dport ssh accept # handle 4
nft add rule ip foo input handle 7 tcp dport 3306 dorp
nft --handle list ruleset
table ip foo { # handle 2
chain input { # handle 1
type filter hook input priority 0; policy accept;
tcp dport http accept # handle 5
tcp dport nfs accept # handle 7
tcp dport mysql accept # handle 8
tcp dport ssh accept # handle 4

删除规则
单个规则只能通过其句柄删除,首先需要找到你想删除的规则句柄:
nft delete rule ip foo input handle 7

列出规则
前面的示例都是列出了所有规则,我们还可以根据自己的需求列出规则的一部分。例如:
nft list table ip foo
列出某条链中的所有规则:
nft list chain ip foo input

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
风晓L1
粉丝 1 资源 2038 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  125
统信桌面专业版【全盘安装UOS系统】介绍  120
银河麒麟桌面操作系统安装佳能打印机驱动方法  111
银河麒麟桌面操作系统 V10-SP1用户密码修改  105
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益209.03元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!