nftable s 是推荐的 linux 新一代 防火墙 框架,遵循“先匹配、先执行、遇匹配即停止”逻辑;需设默认 DROP 策略,再按序添加 accept 规则,注意位置优先级,并及时保存与日志调试。

Linux防火墙 规则不难,关键在理解“先匹配、先执行、遇匹配即停止”的逻辑。用 iptables 或nftables都行,但当前推荐nftables(替代 iptables 的新一代框架),语法更简洁、结构更清晰。下面直接按高频场景讲怎么写、怎么查、怎么防坑。
开放指定 端口(如 Web 服务)
只允许外部访问本机的 80 和 443端口,其他一律拒绝:
- 先确保默认策略是 DROP(安全基线):
nft add table inet Filter→nft add chain inet filter input {type filter hook input priority 0 ; policy drop ;} - 再添加放行规则:
nft add rule inet filter input tcp dport {80, 443} accept - 注意:必须把 accept 规则加在 drop 策略之前,否则会被默认策略拦住
仅允许特定 IP 访问ssh(22 端口)
避免暴力破解,限制只有公司办公网(比如 192.168.10.0/24)能连 SSH:
nft add rule inet filter input ip saddr 192.168.10.0/24 tcp dport 22 accept- 如果还想保留本机自己连(lo接口),加一条:
nft add rule inet filter input iifname "lo" accept - 别忘了最后加一条记录日志 + 丢弃的兜底规则:
nft add rule inet filter input tcp dport 22 log prefix "SSH_BLOCKED: " drop
禁止某 IP 段访问全部服务
发现某个网段(如 203.0.113.0/24)频繁扫描,直接全封:
nft add rule inet filter input ip saddr 203.0.113.0/24 drop- 建议加在 input 链靠前位置(比如第 2 条),避免被其他 accept 规则绕过
- 临时封禁可加
counter方便观察效果:nft add rule inet filter input ip saddr 203.0.113.0/24 counter drop
保存与排查技巧(别重启就失效)
nftables 默认不持久化,重启后规则消失:
- 保存当前规则:
nft list ruleset > /etc/nftables.conf(debian/ubuntu系需启用 nftables 服务) - 检查规则是否生效:
nft list ruleset或按链查:nft list chain inet filter input - 调试时加 log 规则最直观:
nft add rule inet filter input log prefix "DEBUG_INPUT: " counter,然后journalctl -u nftables -f看日志 - 误操作锁死 SSH?别慌——多数 云服务 器支持 VNC 或控制台登录,本地终端也建议提前开个 screen 会话留后门
基本上就这些。规则不在多,在准;不在复杂,在可读可维护。写完跑一遍 nft list 确认顺序,加个 log 观察几秒,心里就有底了。