nftables是推荐的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观察几秒,心里就有底了。










