每次开新机器都要翻一遍文档,干脆记下来:一套只放行必要端口的 nftables 规则,附带防 SSH 爆破的限速写法,开箱即用。
写到 /etc/nftables.conf,然后 systemctl enable --now nftables:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
iif lo accept
icmp type { echo-request } accept
# SSH 限速:每分钟最多 5 个新连接
tcp dport 22 ct state new \
meter ssh_flood { ip saddr limit rate 5/minute } accept
tcp dport { 80, 443 } accept
udp dport 443 accept
counter drop
}
chain forward { type filter hook forward priority 0; policy drop; }
chain output { type filter hook output priority 0; policy accept; }
}
ct state established,related accept 必须放在最前面,否则回包会被丢掉;iif lo accept 别忘了,很多本机服务走回环通信。ICMP 建议保留 echo-request,路径 MTU 探测靠它。
最稳妥的做法是先在测试机上跑一遍 nft -c -f /etc/nftables.conf 做语法检查,再正式加载。规则里一定先放行你的 SSH 来源 IP,或者确保有 VNC 控制台兜底,别问我怎么知道的。
table inet 同时覆盖 v4/v6,这是推荐写法。如果机器没开 v6,把 icmp 换成只匹配 ipv4 即可,但别把整个 v6 入口一起 drop 了又留着 v6 地址监听。
规则不复杂,关键是养成“先验证、再加载、留后路”的习惯。存个档,下次直接抄。
← 返回首页