深色模式
nftables 入门
摘要:nftables 是 firewalld/iptables 的继任者,一套规则统一了 filter/nat/mangle。本文用
nft命令搭一个放行 SSH、放开回环、默认丢包的最小规则集。
适用环境
bash
sudo nft --version
# 现代 Debian/RHEL 默认自带;若未装:
sudo apt install nftables # Debian/Ubuntu1
2
3
2
3
操作步骤
1. 看现有规则(通常空)
bash
sudo nft list ruleset1
2. 创建表与基础链
bash
sudo nft add table inet filter
sudo nft add chain inet filter input '{ type filter hook input priority 0; policy drop; }'
sudo nft add chain inet filter output '{ type filter hook output priority 0; policy accept; }'1
2
3
2
3
inet 同时覆盖 IPv4/IPv6;policy drop 表示默认拒绝。
3. 加放行规则
bash
# 放行回环
sudo nft add rule inet filter input iifname "lo" accept
# 放行已建立/相关连接
sudo nft add rule inet filter input ct state established,related accept
# 放行 SSH
sudo nft add rule inet filter input tcp dport 22 accept
# 放行 ICMP(ping)
sudo nft add rule inet filter input ip protocol icmp accept
sudo nft add rule inet filter input ip6 nexthdr icmpv6 accept1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
4. 保存规则(防重启丢失)
bash
sudo nft list ruleset | sudo tee /etc/nftables.conf
# Debian/Ubuntu 启用持久化:
sudo systemctl enable --now nftables1
2
3
2
3
验证
bash
sudo nft list ruleset
# 应看到 filter 表下的 input 链含上述 5 条规则
# 外部 ssh 可连、ping 可通,且其它入站被拒1
2
3
2
3
常见坑
WARNING
policy drop 很严格,务必先放行 SSH 与 established 再设默认拒绝,否则远程会马上断连。建议通过带外控制台操作,或用 firewalld 包装以避免锁死。
DANGER
nftables 与 iptables 可共存但规则独立。若同时用两者,容易「一条放行一条拒绝」互相打架。新机器建议统一只用 nftables(firewalld 后端也是 nft)。