加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux-nftables

发布时间:2020-12-14 00:56:10 所属栏目:Linux 来源:网络整理
导读:Linux-nftables https://netfilter.org/ https://netfilter.org/projects/iptables/index.html https://netfilter.org/projects/nftables/index.html https://www.netfilter.org/projects/nftables/manpage.html https://wiki.nftables.org/wiki-nftables/in

Linux-nftables

https://netfilter.org/
https://netfilter.org/projects/iptables/index.html
https://netfilter.org/projects/nftables/index.html
https://www.netfilter.org/projects/nftables/manpage.html
https://wiki.nftables.org/wiki-nftables/index.php/Main_Page
https://wiki.nftables.org/wiki-nftables/index.php/Quick_reference-nftables_in_10_minutes
https://wiki.archlinux.org/index.php/Nftables
https://wiki.gentoo.org/wiki/Nftables
https://wiki.gentoo.org/wiki/Nftables/Examples
https://kernelnewbies.org/nftables_examples

1. Linux防火墙简介
2. nftables介绍
3. 为什么要使用nftables
4. Netfilter日志框架
5. nft命令介绍
6. nft基础操作
7. 更多规则选项
?

1. Linux防火墙简介

Linux系统较早使用的防火墙是(约1996年的Linux 2.0) ipfwadm 和(约1999年的Linux 2.2) ipchains。
基于以上版本经过重新设计和大幅改进后出现了(约2001年的Linux 2.4)的netfilter。一直应用到现在。

  • 包过滤框架:netfilter (约2001年Linux 2.4) 该框架内的软件支持包过滤,网络地址[和端口]转换(NA[P]T)和其他数据包重整。是Linux内核中的一组钩子,允许内核模块向网络堆栈注册回调函数。然后,对于遍历网络堆栈内的相应挂钩的每个数据包,回调注册的回调函数。
  • 用户工具集:iptables,nftables等
    • iptables (约2001年Linux 2.4) 是用户空间命令行程序,用于配置netfilter包过滤规则集。
    • nftables (约2013年Linux 3.13) 旨在取代现有iptables的{ip,ip6,arp,eb}表框架。(iptables,ip6tables,arptables,etables用于以太网桥过滤的功能。)

补充:firewalld也是Linux的防火墙,同时支持iptables和nftables,最新版本默认使用nftables。简单的说firewalld是基于nftfilter防火墙的用户界面工具。而iptables和nftables是命令行工具。firewalld引入区域的概念,可以动态配置,让防火墙配置及使用变得简便。详见firewalld.org

netfilter,iptables,nftables 都是netfilter项目。nftables 用于替代 iptables。
netfilter的功能很强大,远远超越防火墙的范围,详见项目主页。

2. nftables介绍

本文主要记录较新的nftables的特性及nft工具的使用。
nftables 提供了一个新的包过滤框架,该框架基于特定于网络的虚拟机(VM),一个新的用户空间实用程序(nft)和一个用于{ip,ip6}表的兼容层。
它使用现有的钩子,连接跟踪系统,用户空间排队组件和netfilter的日志子系统。
它由三个主要组件组成:内核实现,libnl netlink通信和nftables用户空间前端。
内核提供了netlink配置接口,以及运行时规则集评估,
libnl包含用于与内核通信的低级函数,
而nftables前端是用户通过nft进行交互的内容。

从Linux内核3.13版本开始(2013),nftables已经成为Linux内核主线的一部分。正在逐渐替换iptables。

3. 为什么要使用nftables

https://developers.redhat.com/blog/2016/10/28/what-comes-after-iptables-its-successor-of-course-nftables/
nftables对旧iptables提供的最显着的功能有:
支持查找表 - 无需进行线性规则评估
不再强制执行隐式规则计数器和地址/接口匹配的开销
拥有使用额外脚本的能力。
nftables不包含任何内置表。

可用性:
事务规则更新 - 所有规则都以原子方式应用
应用程序可以订阅nfnetlink通知,以便在添加或删除新规则时接收规则更新
nft命令行工具可以显示正在匹配的规则的实时日志,以便于规则集调试

nftables重用了netfilter框架的许多部分,例如连接跟踪和NAT设施。它还保留了命名法和基本iptables设计的几个部分,例如表格,链条和规则。
就像使用iptables一样,表充当链的容器,链包含单独的规则,可以执行诸如丢弃数据包,移动到下一个规则或跳转到新链的操作。

什么被替换?
从用户的角度来看,nftables添加了一个名为nft的新工具,它取代了iptables,arptables和ebtables中的所有其他工具。从架构的角度来看,它还取代了处理包过滤规则集的运行时评估的内核部分。

允许监控规则更新。nft工具可用于监视规则集中的更改,例如“nft monitor”显示从内核添加和删除的每个规则。
它还提供“跟踪模式”,系统管理员可以在此处执行“添加规则修改” prerouting ip saddr 10.2.3.4 meta nftrace set 1‘。
然后,“nft monitor trace”将显示与来自IP地址10.2.3.4的数据包匹配的每个规则。

4. Netfilter日志框架

Nftables 7 : Nftables Logging
http://computer-outlines.over-blog.com/article-nftables-7-nftables-logging-123303629.html
/proc/net/netfilter/nf_log
从Linux 2.6.14开始,可以通过内核数据包过滤器记录的用户空间数据包进行传递。
有两个工具:
QUEUE et NFQUEUE:外部应用程序用于决策(SNORT IDS / IPS,NuFW,ulogd,...)
LOG et NFLOG:用于外部日志记录(Wireshark,Syslog,...)

NFlog是一个新的iptables和Nftables的目标是通过虚拟设备记录数据包。
NFLOG目标会复制数据包并将其发送到指定的netlink套接字。

$ sudo cat /proc/net/netfilter/nf_log
?0 NONE ()
?1 NONE ()
?2 NONE () // IPv4
?3 NONE ()
?4 NONE () // Novell IPX
?5 NONE ()
?6 NONE ()
?7 NONE ()
?8 NONE ()
?9 NONE ()
10 NONE () // IPv6
11 NONE ()
12 NONE ()
// 行号是协议。
比如启用IPv6 nfnetlink_log:
echo "nfnetlink_log" > /proc/sys/net/netfilter/nf_log/10
$ ls /proc/net/netfilter/nf_log
/proc/net/netfilter/nf_log
$ ls /proc/sys/net/netfilter/nf_log
0? 1? 10? 11? 12? 2? 3? 4? 5? 6? 7? 8? 9
$ sudo cat /proc/net/netfilter/nf_log
...
10 nfnetlink_log(nfnetlink_log)

5. nft命令介绍

不同与iptables,nftables不包含任何内置表。还拥有使用额外脚本的能力,拥有一些高级的类似编程语言的能力,例如定义变量和包含外部文件。
与iptables类似的是,表层次结构:表包含链,链里是具体的过滤规则。处理规则则由 地址,接口,端口或包含当前处理数据包中的其他数据等表达式以及诸如drop,queue,continue等声明组成。
可以用于多种地址族的过滤和处理:
  • ip: IPv4 地址
  • ip6: IPv6 地址
  • inet: IPv4 和 IPv6 地址
  • arp: 地址解析协议(ARP)地址
  • bridge: 处理桥接数据包
注:当没有指定地址族时,默认为IP。

特定的地址族包含钩子,对ip,ipv6,和inet地址族来说,可以应用如下钩子
  • prerouting: 刚到达并且未被处理过的数据包
  • input: 已经被接收并且已经经过prerouting钩子的传入数据包
  • forward: 如果数据包将被发送到另一个设备,他将会通过forward钩子
  • output: 从本地系统传出的数据包
  • postrouting: 仅仅在离开系统之前
ARP地址族只能使用input和output钩子。

$ nft -h
? -h,--help 显示帮书
? -v,--version 显示版本信息

? -c,--check 检查命令的有效性,而不实际应用更改。
? -f,--file <filename> 包含文件内容<filename>
? -i,--interactive 从命令行读取输入

? -j,--json 以JSON格式化输出
? -n,--numeric 指定一次后,以数字方式显示网络地址(默认行为)。
?? 指定两次以数字方式显示Internet服务(端口号)。
指定三次以数字方式显示协议,用户ID和组ID。
? -s,--stateless 省略规则集的有状态信息。
? -N 将IP地址转换为名称。
? -a,--handle 显示规则句柄handle.
? -e,--echo Echo what has been added,inserted or replaced.
? -I,--includepath <directory> 添加<directory>目录到包含文件的搜索路径中。默认为: /usr/share
? --debug <level [,level...]> 添加调试,在level处(scanner,parser,eval,netlink,mnl,proto-ctx,segtree,all)

# nft 操作符 操作目标 操作内容
操作符: 增,删,改,查,清除,插入,创建
操作目标: 表,链(),规则()
表操作(add,delete,list,flush;
链操作(add,rename,flush,create);链类型(type:filter,route,nat);链钩子(hook...)
规则(add,insert;
操作内容:...

查询所有表名
nft list tables

查询某个表的内容
nft list table 表名

? ? Subcmd→
cmd↓
表语法
table
链语法
chain
规则语法
rule
备注
add ? ? ? 添加到末尾
create ? ? ? 除非已存在同名链
insert ? ? ? 插入到指定位置
delete ? ? ? ?
flush ? ? ? ?
rename ? ? ? 链名称
list ? ? ? ?

6. nft基础操作

https://yq.aliyun.com/articles/531207
1、增
增加表:nft add table fillter
增加链:nft add chain filter input { type filter hook input priority 0 ; } # 要和hook(钩子)相关连
增加规则:nft add rule filter input tcp dport 22 accept
2、删
只需要把上面的 add 改为 delete 即可
3、改
更改链名用rename
更改规则用replace
4、查
nft list ruleset # 列出所有规则
nft list tables # 列出所有表
nft list table filter # 列出filter表
nft chain filter input # 列出filter表input链
以上命令后面也可以加 -nn? 用于不解析ip地址和端口
加 -a 用于显示 handles

7. 更多规则选项

声明 meta 元表达式 ct 连接跟踪 IPv4 IPv6 报头表达式 TCP UDP 报头表达式 ARP 报头表达式

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读