安全:nftables:基础知识

news/2024/9/23 9:22:30

一,policy:

1,原文档链接:

https://docs.redhat.com/zh_hans/documentation/red_hat_enterprise_linux/9/html/configuring_firewalls_and_packet_filters/assembly_creating-and-managing-nftables-tables-chains-and-rules_getting-started-with-nftables#con_basics-of-nftables-tables_assembly_creating-and-managing-nftables-tables-chains-and-rules

2,链策略

如果此链中的规则没有指定任何操作,则链策略定义 nftables 是否应该接受或丢弃数据包。
您可以在链中设置以下策略之一:

  • accept (默认)
  • drop

 

二,两种链:基本链和常规链的区别

表由链组成,链又是规则的容器。存在以下两种规则类型:

  • 基本链 :您可以使用基本链作为来自网络堆栈的数据包的入口点。
  • 常规链 :您可以将常规链用作 jump 目标来更好地组织规则。

如果要向表中添加基本链,所使用的格式取决于您的防火墙脚本:

  • 在原生语法的脚本中,使用:

    table <table_address_family> <table_name> {chain <chain_name> {type <type> hook <hook> priority <priority>policy <policy> ;}
    }
  • 在 shell 脚本中,使用:

    nft add chain <table_address_family> <table_name> <chain_name> { type <type> hook <hook> priority <priority> \; policy <policy> \; }
    为了避免 shell 将分号解释为命令的结尾,请将 \ 转义字符放在分号前面。

       这两个示例都创建 基本链。要创建 常规链,请不要在大括号中设置任何参数。

 

三,链的类型

以下是链类型以及您可以使用的地址系列和钩子的概述:

四,add和insert的区别:

add 命令在链的末尾附加新规则。
如果要在链的开头添加一条规则,请使用 nft insert 命令而不是 nft add

 

例子:

添加表和链

[root@192 ~]# nft add table inet my_table
[root@192 ~]# nft add chain inet my_table my_chain { type filter hook input priority 0 \; }

反斜线(\)用来转义,这样 shell 就不会将分号解释为命令的结尾

查看规则
[root@192 ~]# nft list ruleset
table inet my_table {chain my_chain {type filter hook input priority filter; policy accept;}
}

分别用add/insert命令添加规则

[root@192 ~]# nft add rule inet my_table my_chain tcp dport ssh accept
[root@192 ~]# nft insert rule inet my_table my_chain tcp dport http accept

 查看添加后的规则:

[root@192 ~]# nft list ruleset
table inet my_table {chain my_chain {type filter hook input priority filter; policy accept;tcp dport 80 accepttcp dport 22 accept}
}

五,索引和句柄的区别:

使用索引要注意的地方:一是 index 的值是从 0 开始的;二是 index 必须指向一个存在的规则

把规则插入到链的指定位置,有两种方法:

1、 使用 index 来指定规则的索引。
add 表示新规则添加在索引位置的规则后面,
insert 表示新规则添加在索引位置的规则前面。
index 的值从 0 开始增加。

使用insert插入规则的例子:

[root@192 ~]# nft insert rule inet my_table my_chain index 1 tcp dport nfs accept

查看效果:

[root@192 ~]# nft list ruleset
table inet my_table {chain my_chain {type filter hook input priority filter; policy accept;tcp dport 80 accepttcp dport 2049 accepttcp dport 22 accept}
}

insert插入规则例子2:

[root@192 ~]# nft insert rule inet my_table my_chain index 0 tcp dport mysql accept

查看效果:

[root@192 ~]# nft list ruleset
table inet my_table {chain my_chain {type filter hook input priority filter; policy accept;tcp dport 3306 accepttcp dport 80 accepttcp dport 2049 accepttcp dport 22 accept

add添加规则:

[root@192 ~]# nft add rule inet my_table my_chain index 0 tcp dport 1234 accept

查看效果:

[root@192 ~]# nft list ruleset
table inet my_table {chain my_chain {type filter hook input priority filter; policy accept;tcp dport 3306 accepttcp dport 1234 accepttcp dport 80 accepttcp dport 2049 accepttcp dport 22 accept}
}

 2,使用 handle 来指定规则的句柄。
add 表示新规则添加在索引位置的规则后面,
insert 表示新规则添加在索引位置的规则前面。
handle 的值可以通过参数 --handle 获取

查看句柄:

[root@192 ~]# nft  --handle list ruleset
table inet my_table { # handle 2chain my_chain { # handle 1type filter hook input priority filter; policy accept;tcp dport 3306 accept # handle 5tcp dport 1234 accept # handle 6tcp dport 80 accept # handle 3tcp dport 2049 accept # handle 4tcp dport 22 accept # handle 2}
}

用add添加规则:

[root@192 ~]# nft add rule inet my_table my_chain handle 6 tcp dport 222 accept

查看效果:

[root@192 ~]# nft  --handle list ruleset
table inet my_table { # handle 2chain my_chain { # handle 1type filter hook input priority filter; policy accept;tcp dport 3306 accept # handle 5tcp dport 1234 accept # handle 6tcp dport 222 accept # handle 7tcp dport 80 accept # handle 3tcp dport 2049 accept # handle 4tcp dport 22 accept # handle 2}
}

用insert命令添加规则:

[root@192 ~]# nft insert rule inet my_table my_chain handle 5 tcp dport 333 accept

查看效果:

[root@192 ~]# nft  --handle list ruleset
table inet my_table { # handle 2chain my_chain { # handle 1type filter hook input priority filter; policy accept;tcp dport 333 accept # handle 8tcp dport 3306 accept # handle 5tcp dport 1234 accept # handle 6tcp dport 222 accept # handle 7tcp dport 80 accept # handle 3tcp dport 2049 accept # handle 4tcp dport 22 accept # handle 2}
}

 3,在 nftables 中,句柄值是固定不变的,除非规则被删除,这就为规则提供了稳定的索引。
    而 index 的值是可变的,只要有新规则插入,就有可能发生变化。
    一般建议使用 handle 来插入新规则。

 

六,刷新链和删除链的区别:

删除链

和删除表一样通过delete参数

 nft delete chain 族类型 表名 链名

刷新来自链的规则

清空指定表中特定链的所有规则,但保留该链的结构和配置

nft flush chain 族类型 表名 链名

例子:

删除前:

[root@192 ~]# nft list ruleset
table inet my_table {chain my_chain {type filter hook input priority filter; policy accept;tcp dport 333 accepttcp dport 3306 accepttcp dport 1234 accepttcp dport 222 accepttcp dport 80 accepttcp dport 2049 accepttcp dport 22 accept}
}

清空链

[root@192 ~]# nft flush chain inet my_table my_chain

查看效果:

[root@192 ~]# nft list ruleset
table inet my_table {chain my_chain {type filter hook input priority filter; policy accept;}
}

删除链:

[root@192 ~]# nft delete chain inet my_table my_chain

查看效果:

[root@192 ~]# nft list ruleset
table inet my_table {
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/61303.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode 952. 按公因数计算最大组件大小

1.题目基本信息 1.1.题目描述 给定一个由不同正整数的组成的非空数组 nums ,考虑下面的图: 有 nums.length 个节点,按从 nums[0] 到 nums[nums.length - 1] 标记;只有当 nums[i] 和 nums[j] 共用一个大于 1 的公因数时,nums[i] 和 nums[j]之间才有一条边。 返回 图中最大连…

Leetcode 19.删除链表的倒数第第N个结点

1.题目基本信息 题目:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 地址:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/ 2.解题方法 2.1.解题思路 使用快慢指针 2.2.解题步骤 第一步,初始化快指针为head,慢指针指向一…

Leetcode 297. 二叉树的序列化与反序列化

1.题目基本信息 1.1.题目描述 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。 请设计一个算法来实现二叉树的序列化与反序列化。这里不限…

曾亨瑾第一次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc/这个作业的目标 发布一篇随便简单介绍自己姓名 曾亨瑾学号 2022329301104一、自我介绍 1.基本信息 大家好,我是电气工程及其自动化(2)班的曾亨瑾,来自广东东莞。 2.兴趣爱好 我喜欢打羽毛球和慢跑(虽然都是…

2024软件工程第二次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253这个作业的目标 开发类“羊了个羊”消除类小游戏,并借助AIGC技术提高效率学号 052203132项目展示Github地址:https://github.c…

宏定义与特别运用

目录宏定义数值宏常量字符串宏常量用define宏定义注释符号?程序的编译过程预处理中宏替换和去注释谁先谁后?如何写一个可靠的宏函数do-while-zero结构do-while-zero的评价宏定义中的空格宏只能在main函数上面定义吗?宏的作用范围#undef宏替换是在函数调用之前进行.块中进行#…

Fiddler

一、Fiddler简介 Fiddler是位于客户端和服务器端的HTTP代理 目前最常用的http抓包工具之一 功能非常强大,是web调试的利器监控浏览器的所有HTTP/HTTPS的流量 查看、分析请求内容细节 伪造客户端请求和服务器响应 测试网站的性能 解密HTTPS的web会话 全局、局部断点功能 第三方…

白云龙期货投资-第六讲

## 价量行情中的配合 1,价涨量增,顺势推动。 2,价量背离,趋势转变 (价与量在相对高位称为顶背离,在下跌末期为底背离。背离后如果想再次上涨或者下跌,一般价格都会出现一个盘整期,而成交量则出现缩量地量期)价量行情中的配合 1,价涨量增,顺势推动。 2,价量背离,趋势…