AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 419851
Accepted
F30
F30
Asked: 2018-01-27 06:30:59 +0800 CST2018-01-27 06:30:59 +0800 CST 2018-01-27 06:30:59 +0800 CST

何时以及如何在 nftables 中使用链优先级

  • 772

在 nftables 中配置链时,必须提供一个priority值。几乎所有在线示例都将a设置piority为0;有时,值 100 与某些钩子 ( output, postrouting) 一起使用。

nftables wiki不得不说:

优先级可用于对链进行排序或将它们放在某些 Netfilter 内部操作之前或之后。例如,优先级为 -300 的 prerouting 钩子上的链将被放置在连接跟踪操作之前。

作为参考,以下是 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):退出时的连接跟踪

这表明priority控制与内部 Netfilter 操作的交互,但仅提及 iptables 使用的值作为示例。

在哪些情况下是priority相关的(即必须设置为值≠ 0)?仅适用于具有相同钩子的多个链条?结合 nftables 和 iptables 怎么样?哪些内部 Netfilter 操作与确定正确priority值相关?

linux firewall
  • 1 1 个回答
  • 6856 Views

1 个回答

  • Voted
  1. Best Answer
    A.B
    2018-05-09T16:15:29+08:002018-05-09T16:15:29+08:00

    更新:(iptables-nft而不是iptables-legacy)正在使用nftables内核 API 和另外一个兼容层来重用xtables内核模块(在 中描述的那些iptables-extensions),当没有可用的本机nftables翻译时。在大多数情况下,它应该被视为nftables,除了这个问题,它像旧版本一样具有固定的优先级,因此nftables的优先级在这里仍然很重要。


    iptables (legacy) 和nftables都依赖于相同的 netfilter 基础设施,并在不同的地方使用钩子。它在那里解释:Netfilter hooks,或者有这个systemtap manpage,它记录了一些钩子处理:

    PRIORITY 是一个整数优先级,给出了触发探测点相对于在同一数据包上触发的任何其他 netfilter 挂钩函数的顺序。钩子函数在每个数据包上按从最小优先级到最大优先级的顺序执行。[...]

    或者这个关于 netfilter 的博客:How to Filter Network Packets using Netfilter–Part 1 Netfilter Hooks (博客消失了,改用Wayback Machine链接。)

    所有这些共同表明,各种模块/功能可以在五个可能的钩子中的每一个上注册(对于 IPv4 情况),并且在每个钩子中,它们将按照该钩子的注册优先级顺序被调用。

    这些钩子不仅适用于iptables或nftables。还有各种其他用户,例如上面的 systemtap,甚至是 netfilter 自己的子模块。例如,当使用 iptables 或 nftables 使用 NAT 时,使用 IPv4,nf_conntrack_ipv4将在 4 个不同优先级的钩子中注册总共 6 次。该模块将依次拉取位于和nf_defrag_ipv4的寄存器。NF_INET_PRE_ROUTING/NF_IP_PRI_CONNTRACK_DEFRAG NF_INET_LOCAL_OUT/NF_IP_PRI_CONNTRACK_DEFRAG

    所以是的,优先级仅在同一个钩子中相关。但是在同一个钩子中,有几个用户,并且他们已经有他们预定义的优先级(通常但不总是在不同的钩子中重用相同的值),所以要围绕他们正确交互,必须使用兼容的优先级。

    例如,如果必须尽早对未碎片整理的数据包执行规则,然后(像往常一样)使用碎片整理的数据包,只需在预路由中注册两个nftables链,一个 <= -401(例如-450),另一个在-399和之间-201(例如-300)。直到最近, iptables可以做的最好的事情是-300,即它在 conntrack 时看不到碎片数据包,因此使用了早期碎片整理(因为内核 4.15 带有选项raw_before_defrag,它将注册在-450,但不能同时做,但iptables-nft不会出现提供这样的选择)。


    所以现在关于nftables和iptables之间的交互:两者可以一起使用,除了旧内核中的 NAT,它们都竞争 netfilter 的 nat 资源:只有一个应该注册 nat,除非使用内核 >= 4.18,如维基。示例nftables设置与 iptables 具有相同的优先级,但差异很小。

    如果同时使用iptables和nftables并且一个应该在另一个之前使用,因为需要交互和效果顺序,只需相应地稍微降低或提高nftables的优先级,因为iptables不能更改。

    例如,在大多数iptables设置中,可以使用具有iptables中不可用的特定匹配功能的nftables来标记数据包,然后在iptables中处理此标记,因为它支持特定目标(例如花哨的iptables LED目标闪烁一个 LED)在nftables中不可用。只需为nftables钩子注册一个稍低的优先级值,以确保它之前完成。对于通常的输入过滤器规则,例如而不是. 再说一次,这个值不应该低于,否则它将在iptables之前执行-50-149' INPUT mangle 链,这可能不是预期的。这是在输入情况下唯一重要的其他低值。例如,没有NF_IP_PRI_CONNTRACK要考虑的阈值,因为conntrack不会在此优先级中注册某些内容,如果与此相关的某些内容确实很重要NF_INET_LOCAL_IN,SELinux 也不会在此挂钩中注册某些内容,因此-225这里没有特殊含义。

    • 14

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve