nftables 是什么? 提供什么功能? 如何使用?

Nftables Wiki:https://wiki.nftables.org/wiki-nftables/index.php/Main_Page

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

第一次看到nftables还是在Centos 8 What's New中,于是就开始研究下nftables到底是什么? 提供什么功能? 如何使用?

What is nftables?

  nftables is the new packet classification framework that replaces the existing {ip,ip6,arp,eb}_tables infrastructure. 

  Centos 8已将iptables替换为nftables,因此是时候学习nftablesiptables之间的差异。

  Centos 8中Firewalld守护进程使用nftables作为默认后端,在Centos 7中使用的是iptables作为后端。

  nftables简化了双堆栈IPv4/IPv6的管理,它提供了inet基链来允许同时管理IPv4和IPv6流量。

  nftables基于链式布局比iptables数组布局有更好的性能。

nftables hook

跟netfilter一样,也有下面5个钩子,常用的也就 input/output/forward 三个hook。

                                             Local
                                            process
                                              ^  |      .-----------.
                   .-----------.              |  |      |  Routing  |
                   |           |-----> input /    \---> |  Decision |----> output \
--> prerouting --->|  Routing  |                        .-----------.              \
                   | Decision  |                                                     --> postrouting
                   |           |                                                    /
                   .-----------.---------------> forward --------------------------- 

Linux kernel 4.2 中新增了ingress hook,This new hook basically provides an alternative to tc ingress filtering. You still need tc for traffic shaping/queue management.

                                 .-----------.             
                                 |           |-----> input ...
---> ingress ---> prerouting --->|  Routing  |
                                 | Decision  |
                                 |           |
                                 |-----------|-----> forward ...

nftables三个概念:

  table - 指包含chain的一个容器, 没有特定语义

  chain - 指包含在一个table里的rule容器

  rule - 指包含在chain里的action

1、Table

  table语法

    $ nft list tables [<family>]

    $ nft list table [<family>] <name> [-n] [-a]

    $ nft (add | delete | flush) table [<family>] <name>

  table语法示例

    - 查询所有表

      $ nft list tables

    - 创建inet表

      $ nft add table inet tb_01

    - 查询指定表

      $ nft list table tb_01 -an

    - 删除表

      $ nft delete table inet tb_01

    - 清除表

      $ nft flush table inet tb_01

2、Chain

  Chian可以创建的Type:

    - filter

    - router

    - nat

  Family支持的Hook:

    - ip/ipv6/inet: prerouting, input, forward, output, postrouting

    - arp: input, output

    - netdev: ingress

  Priority 参考值:

    - NF_IP_PRI_NAT_DST (-100): destination NAT
            - NF_IP_PRI_FILTER (0): filtering operation, the filter table
            - NF_IP_PRI_SECURITY (50): Place of security table where secmark can be set for example
            - NF_IP_PRI_NAT_SRC (100): source NAT

  Policy是控制Chian中Flow的默认判决语句:

    - accept

    - drop

    - queue

    - continue

    - return

  chain语法

    $ nft (add | create) chain [<family>] <table> <name> [ { type <filter|router|nat> hook <hook> [device <device>] priority <priority> \; [policy <policy> \; ] } ]

    $ nft (delete | list | flush) chain [<family>] <table> <name>

            $ nft rename chain [<family>] <table> <name> <newname>

  chain语法示例

    - 在table中添加type为filter的input chian, 优先级为0,Policy默认的动作为 drop

      $ nft add chain inet tb_01 chain_01_input { type filter hook input priority 0 \; policy drop \; }

    - 在table中添加type为filter的output chian, 优先级为0,Policy默认的动作为 accept

      $ nft add chain inet tb_01 chain_01_output { type filter hook input priority 0 \; policy accept \; }

3、Rules

  handle is an internal number that identifies a certain rule.

  position is an internal number that is used to insert a rule before a certain handle.

      matches 和 statements 因为内容太多,请参考文档 https://wiki.nftables.org/wiki-nftables/index.php/Quick_reference-nftables_in_10_minutes#Rules

  rule语法

    $ nft add rule [<family>] <table> <chain> <matches> <statements>

    $ nft insert rule [<family>] <table> <chain> [position <position>] <matches> <statements>

    $ nft replace rule [<family>] <table> <chain> [handle <handle>] <matches> <statements>

    $ nft delete rule [<family>] <table> <chain> [handle <handle>]  

  rule示例 <更多示例 https://wiki.nftables.org/wiki-nftables/index.php/Simple_rule_management>

    - 在chain里添加规则,开放22端口

      $ nft add rule inet tb_01 chain_01_input tcp dport 22 accept

    - 在chain里替换指定规则

      $ nft replace rule inet tb_01 chain_01_input handle 2 tcp dport 22 drop

    - 在chain里删除规则

      $ nft delete rule inet tb_01 chain_01_input handle 2

<think>好的,用户现在问的是Lucky软件中的“daji”功能和用途。我需要先回顾之前的对话,看看有没有提到过相关内容。之前的对话中,用户第一次询问了“luvky”软件,但我没有找到相关信息,推测可能是拼写错误,提到了Lucky框架。然后用户提供了引用,其中有一个例子显示用户使用了一个用户名是lucky,可能是在Linux环境下操作文件。现在用户明确提到了“Lucky软件”中的“daji”功能,需要分析这个功能。 首先,用户提到的引用内容是关于Linux常用命令的,比如ls、touch、mkdir等,其中用户lucky在操作文件。这可能意味着用户在使用某个名为Lucky的软件,或者可能指的是某个教程中的示例,其中用户名为lucky。但根据用户的问题,他们现在询问的是“Lucky软件”中的“daji”功能。我需要确定“daji”是什么,可能的中文拼音是“大吉”或者“达记”等,但需要结合上下文。 考虑到之前的回复中,我提到了Lucky框架,可能与系统配置相关,但用户现在提到的“daji”功能可能不存在,或者存在拼写错误。另外,用户提供的引用中的例子可能只是示例,与Lucky软件无关,而是用户lucky在操作文件。需要确认是否存在Lucky软件,或者用户是否存在拼写错误。 可能的情况是,用户将“lucky”和“daji”混淆了,或者“daji”是某个特定功能模块。另外,需要检查是否有其他可能的软件或工具名称接近,比如“daji”可能是“大疆”相关的,但不太可能。或者可能是“大集”,但需要进一步分析。 在之前的回复中,我建议用户检查拼写,或使用软件包管理器搜索。现在用户再次提问,可能需要进一步澄清。但根据现有信息,可能Lucky软件中的“daji”功能并不存在,或者用户有其他来源的信息。需要结合可能的领域,比如系统管理、开发工具等,推测其功能。 可能的回答方向是:指出未找到明确信息,推测可能的拼写错误或功能模块,建议用户检查拼写,或提供更多上下文。同时,可以结合之前提到的Lucky框架,假设其可能有某个模块或插件,但需要验证。此外,引用中的例子显示用户在使用Linux命令,可能与系统管理相关,推测“daji”可能是某种自动化任务或配置管理的功能。 需要确保回答符合格式要求,使用中文,正确使用LaTeX,生成相关问题。同时,引用之前的引用内容,可能用户提到的引用中的“lucky”是用户名,而不是软件名,所以需要明确区分。可能需要指出用户可能混淆了用户名和软件名,或者“daji”是某个特定命令或脚本。 总结回答步骤:首先说明未找到明确信息,推测可能性,如拼写错误、功能模块、或用户示例中的操作,然后建议用户确认名称,检查文档,或提供更多信息。生成相关问题,引导用户进一步澄清需求。</think>### 关于 "Lucky 软件中 daji 功能" 的技术分析 根据您提供的引用内容和历史对话记录,目前存在以下技术验证结论: --- #### 关键发现 1. **术语混淆可能性** 引用[1]中的 `lucky` 是 **Linux 系统用户名**(如 `[lucky@wz ~]$` 表示用户终端提示符),而非软件名称。`daji` 未在已知技术文档或开源项目中出现,可能为以下情况之一: - **命令/脚本名称**:用户自定义的本地脚本(如 `daji.sh`) - **拼音误写**:例如 "搭建"(dājiàn)、"大机"(dàjī)等功能模块的缩写 2. **Linux 环境关联性** 引用[1]中的操作涉及 `ls`, `touch`, `mkdir` 等基础命令,若 `daji` 是某工具的功能模块,可能属于: - **系统管理工具**:如批量文件操作、定时任务管理 - **开发辅助工具**:自动化部署或配置生成 --- #### 技术验证路径 若需进一步确认 `daji` 的功能,建议按以下步骤操作: 1. **检查本地环境** ```bash # 查找与 daji 相关的可执行文件 which daji # 验证是否为系统命令 find ~ -name "*daji*" -type f # 搜索用户目录下的相关文件 ``` 2. **验证软件上下文** 如果 `Lucky` 指代某个特定工具,需确认其完整名称: - **项目仓库查询**:在 GitHub 搜索 `Lucky automation` 或 `Lucky toolkit` - **手册页检查**:若已安装该软件,尝试 ```bash man lucky | grep -i "daji" # 在手册中搜索功能关键字 ``` --- #### 功能推测(基于命名模式) 假设 `daji` 是功能模块,可能涉及以下领域: | 功能类型 | 潜在用途 | 技术实现参考 | |----------------|---------------------------|------------------------------| | 批量文件操作 | 按日期/大小分类文件 | 基于 `find` + `xargs` 的封装 | | 系统监控 | 资源占用报警 | 集成 `Prometheus` 指标采集 | | 网络配置 | 防火墙规则自动化 | 调用 `iptables`/`nftables` | --- #### 技术验证提示 1. **检查命令历史** 通过 `history | grep "lucky"` 追溯与 `lucky` 相关的操作记录 2. **确认软件来源** 如果是第三方工具,需验证其安装路径和文档: ```bash dpkg -L lucky # Debian 系查询软件包文件 rpm -ql lucky # Red Hat 系查询软件包文件 ``` --- ### 相关问题 1. 如何在 Linux 中追踪自定义脚本的执行过程? 2. 有哪些工具可以实现批量文件修改的自动化? 3. 如何通过命令行工具监控系统资源使用情况? 如需更精确的解答,请提供以下补充信息: - `daji` 出现的具体上下文(错误日志/操作流程) - 执行 `lucky --help` 或 `daji --version` 的输出结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值