Appearance
配置规则
每个规则由零个或多个表达式组成,后跟一个或多个语句。
每个表达式都测试数据包是否与特定有效payload字段或数据包/流元数据 匹配。
多个表达式从左到右线性计算:如果第一个表达式匹配,则计算下一个表达式,依此类推。如果我们到达最终表达式,则数据包将匹配规则中的所有表达式,并执行规则的语句。
每个语句都执行一个操作,例如设置 netfilter 标记、计算数据包、记录数据包或做出判定,例如接受或丢弃数据包或跳转到另一条链。
与表达式一样,多个语句从左到右线性计算:单个规则可以使用多个语句执行多个操作。请注意,判决声明就其性质而言结束了规则。
常用规则
shell
{add | insert} rule [family] table chain [handle handle | index index] statement ... [comment comment]
replace rule [family] table chain handle handle statement ... [comment comment]
{delete | reset} rule [family] table chain handle handle
1. 备份配置
备份配置
备份单个表 nft list table [family] <table> <filePath>
备份所有规则 nft list ruleset > all_ruleset
导入规则
nft -f <filePath>
注意
早期版本需要手动先创建table,否则导入可能因表不存在而报错,再更高的版本支持自动创建
Flushing Sets: flush table 不会刷新该表中定义的任何sets。要同时刷新集,请使用flush ruleset 刷新规则集(自 Linux 3.17 起可用)或显式删除sets。早期版本 (Linux <=3.16) 不允许导入已存在的集,但在更高版本中允许这样做
重复规则: 如果在配置文件开头加上
flush table <table>
行,则可以实现类似每次加载前清空规则,然后导入配置表,如果不清空,则多导入几次就会产生几次重复值 (注意 会清空原有的规则),只有有一个include的文件中包含即可
2. 新建规则
{add | insert} rule [family] table chain [handle handle | index index] statement ... [comment comment]
add: 在指定handle后面新增一条规则,如没有指定handle就在最后新增
insert: 在指定handle前面新增一条规则,如没有指定,则在第一条新增
shell
[root@localhost ~]# nft -a -n list table inet test
table inet test { # handle 21
chain chain2 { # handle 2
comment "常规链"
}
chain chain1 { # handle 58
comment "基础链"
type filter hook input priority 0; policy accept;
tcp dport 22 accept # handle 66
tcp dport 443 accept # handle 67
tcp dport 1443 accept # handle 68
}
chain chain4 { # handle 60
type filter hook input priority 110; policy accept;
tcp dport 22 accept # handle 65
}
}
[root@localhost ~]# nft insert rule inet test chain1 handle 67 tcp dport 12 accept
[root@localhost ~]# nft add rule inet test chain1 handle 67 tcp dport 14 accept
[root@localhost ~]# nft -a -n list table inet test
table inet test { # handle 21
chain chain2 { # handle 2
comment "常规链"
}
chain chain1 { # handle 58
comment "基础链"
type filter hook input priority 0; policy accept;
tcp dport 22 accept # handle 66
tcp dport 12 accept # handle 70
tcp dport 443 accept # handle 67
tcp dport 14 accept # handle 71
tcp dport 1443 accept # handle 68
}
chain chain4 { # handle 60
type filter hook input priority 110; policy accept;
tcp dport 22 accept # handle 65
}
}
[root@localhost ~]#
3. 修改/替换
replace rule [family] table chain handle handle statement ... [comment comment]
此功能用来替换规则,也可以叫做修改规则
shell
[root@localhost ~]# nft replace rule inet test chain1 handle 71 tcp dport 114 accept
[root@localhost ~]# nft -a -n list table inet test
table inet test { # handle 21
chain chain2 { # handle 2
comment "常规链"
}
chain chain1 { # handle 58
comment "基础链"
type filter hook input priority 0; policy accept;
tcp dport 11 accept # handle 69
tcp dport 22 accept # handle 66
tcp dport 12 accept # handle 70
tcp dport 443 accept # handle 67
tcp dport 114 accept # handle 71
tcp dport 1443 accept # handle 68
}
chain chain4 { # handle 60
type filter hook input priority 110; policy accept;
tcp dport 22 accept # handle 65
}
}
[root@localhost ~]#
4. 删除规则
delete rule [family] table chain handle handle
delete就不赘述了,按照handle删除规则即可