安装 nftables

1
2
3
sudo pacman -S nftables
sudo systemctl start nftables
sudo systemctl enable nftables

增加表, Adding tables:

1
2
nft add table [<family>] <name>
nft add table ip foo

family 参数是可选的,如果不指定 family,默认是 IPv4

增加链,add chain:

1
2
nft add chain [<family>] <table-name> <chain-name> { type <type> hook <hook> priority <value> \; [policy <policy>] }
nft add chain filter input { type filter hook input priority 0 \; } # 要和hook(钩子)相关连

增加规则, add rule:

1
2
3
4
nft add rule <table-name> <chain-name> ip daddr 8.8.8.8 counter
nft add rule filter input tcp dport 22 accept

nft insert rule nat post ip protocol icmp icmp type echo-request accept

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
nft list ruleset     # 列出所有规则
nft list tables # 列出所有表
# 列出每个族的表
nft list tables ip
nft list table ip foo # 列出foo表的内容

nft list chain filter input # 列出filter表input链

# 列出handle
nft list table filter -n -a

1
2
3
4
5
6
7
8
9
#清空整个规则集
nft flush ruleset
# 删除表中所有的规则
nft flush table ip foo

nft delete table ip foo

# 按 handle 删除
nft delete rule table0 chain0 handle 4

更改链名用rename
更改规则用replace
-n
-nn 以上命令后面也可以加 -nn 用于不解析ip地址和端口
-a 加 -a 用于显示 handles

保存规则到文件

nftables.service 启动时自动加载 /etc/nftables.conf

1
nft list ruleset> /etc/nftables.conf

从文件加载规则

1
nft -f /etc/nftables.conf