linux防火墙规则核心是“匹配-动作”逻辑:先定义流量特征(源/目的IP、端口、协议等),再执行ACCEPT或DROP/REJECT;iptables与nftables底层一致仅语法不同;需明确规则流向(PREROUTING→input/FORWARD/OUTPUT→POSTROUTING)及各链职责,按方向匹配对应链;每条规则须完整指定协议、源地址、目标端口/类型和动作;规则自上而下匹配,首条命中即执行,顺序至关重要;默认策略为兜底但不可替代显式规则。

Linux防火墙规则的核心在于“匹配-动作”逻辑:先定义流量特征(源/目的IP、端口、协议等),再决定放行(ACCEPT)或拒绝(DROP/REJECT)。iptables(传统)和nftables(现代默认)底层思路一致,只是语法不同。掌握规则流向(PREROUTING → INPUT/FORWARD/OUTPUT → POSTROUTING)和链的职责,比死记命令更重要。
明确规则生效的链和时机
不是所有规则都写在INPUT里。关键看流量方向:
- 进来的连接(如别人访问你的Web服务)→ INPUT链
- 本机主动发出的请求(如curl外网)→ OUTPUT链
- 本机转发的包(如做路由器)→ FORWARD链
- PREROUTING和POSTROUTING主要用于NAT(端口映射、IP伪装),普通过滤很少用
写规则前必须想清楚这4个条件
每条有效规则都应覆盖以下要素,缺一不可:
- 协议类型:tcp / udp / icmp / all(不建议用all,太宽泛)
- 源地址:可以是单IP(192.168.1.100)、网段(192.168.1.0/24)或anywhere(0.0.0.0/0,慎用)
- 目标端口(对tcp/udp)或类型(对icmp):比如–dport 22(ssh),–sport 53(dns响应端口)
- 动作:ACCEPT(放行)、DROP(静默丢弃)、REJECT(返回拒绝提示,适合调试)
顺序决定成败:规则从上到下逐条匹配
iptables/nftables按插入顺序执行,**第一条匹配就立即执行动作,不再往下看**。所以:
- 通用宽松规则(如“允许所有内网流量”)要放在严格规则(如“只允许某IP连SSH”)前面
- 默认策略(如INPUT默认DROP)是最后一道保险,但不能替代明确规则
- 用iptables -L –line-numbers查看序号,用-I 3在第3行插入,-D 5删除第5行
一条实用SSH规则拆解(iptables示例)
只允许192.168.10.0/24网段通过22端口登录本机:
iptables -A INPUT -s 192.168.10.0/24 -p tcp –dport 22 -j ACCEPT
- -A INPUT:追加到INPUT链末尾(生产环境建议用-I插入到合适位置)
- -s 192.168.10.0/24:限制来源网段
- -p tcp:只匹配TCP协议(SSH不用UDP)
- –dport 22:目标端口是22(注意不是–sport,客户端源端口随机)
- -j ACCEPT:匹配即放行
这条之后,通常跟一条默认拒绝:iptables -A INPUT -j DROP(确保其他流量被拦住)。
基本上就这些。不复杂但容易忽略——重点不是记命令,而是想清楚“谁在访问什么、走哪条路、该不该放”。先画草图(源IP→协议→端口→链→动作),再敲命令,错得少,改得快。