11.4. 使用 nft 命令管理表、链和规则
要在命令行上或 shell 脚本中管理 nftables
防火墙,请使用 nft
工具。
此流程中的命令不代表典型的工作流,且没有被优化。此流程只演示了如何使用 nft
命令来管理表、链和规则。
流程
创建一个带有
inet
地址系列的名为nftables_svc
的表,以便表可以处理 IPv4 和 IPv6 数据包:nft add table inet nftables_svc
# nft add table inet nftables_svc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将处理传入网络流量的、名为
INPUT
的基本链添加到inet nftables_svc
表中:nft add chain inet nftables_svc INPUT { type filter hook input priority filter \; policy accept \; }
# nft add chain inet nftables_svc INPUT { type filter hook input priority filter \; policy accept \; }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为了避免 shell 将分号解释为命令的结尾,请使用
\
字符转义分号。向
INPUT
链添加规则。例如,允许端口 22 和 443 上的传入 TCP 流量,并作为INPUT
链的最后一条规则,拒绝其他传入的流量,并伴有互联网控制消息协议(ICMP)端口无法访问的消息:nft add rule inet nftables_svc INPUT tcp dport 22 accept nft add rule inet nftables_svc INPUT tcp dport 443 accept nft add rule inet nftables_svc INPUT reject with icmpx type port-unreachable
# nft add rule inet nftables_svc INPUT tcp dport 22 accept # nft add rule inet nftables_svc INPUT tcp dport 443 accept # nft add rule inet nftables_svc INPUT reject with icmpx type port-unreachable
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您输入
nft add rule
命令,则nft
会将按与运行命令相同的顺序将规则添加到链。显示包括句柄的当前规则集:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在句柄为 3 的现有规则前面插入一条规则。例如,要插入一个允许端口 636 上 TCP 流量的规则,请输入:
nft insert rule inet nftables_svc INPUT handle 3 tcp dport 636 accept
# nft insert rule inet nftables_svc INPUT handle 3 tcp dport 636 accept
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在句柄为 3 的现有规则后面附加一条规则。例如,要插入一个允许端口 80 上 TCP 流量的规则,请输入:
nft add rule inet nftables_svc INPUT handle 3 tcp dport 80 accept
# nft add rule inet nftables_svc INPUT handle 3 tcp dport 80 accept
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 再次显示带有 handle 的规则集。验证是否后添加的规则已添加到指定位置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 handle 为 6 的规则:
nft delete rule inet nftables_svc INPUT handle 6
# nft delete rule inet nftables_svc INPUT handle 6
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要删除规则,您必须指定 handle。
显示规则集,并验证删除的规则是否不再存在:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
INPUT
链中删除所有剩余的规则:nft flush chain inet nftables_svc INPUT
# nft flush chain inet nftables_svc INPUT
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示规则集,并验证
INPUT
链是否为空:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
INPUT
链:nft delete chain inet nftables_svc INPUT
# nft delete chain inet nftables_svc INPUT
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以使用此命令删除仍然包含规则的链。
显示规则集,并验证
INPUT
链是否已被删除:nft list table inet nftables_svc
# nft list table inet nftables_svc table inet nftables_svc { }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
nftables_svc
表:nft delete table inet nftables_svc
# nft delete table inet nftables_svc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以使用此命令删除仍然包含链的表。
注意要删除整个规则集,请使用
nft flush ruleset
命令,而不是在单独的命令中手动删除所有规则、链和表。