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→协议→端口→链→动作),再敲命令,错得少,改得快。