linux防火墙 规则编写需遵循“默认拒绝→放行必要→验证效果→持久保存”四步逻辑,核心是理清流量方向、协议 端口 及状态匹配,并依 工具(firewalld/nftables/iptables)正确配置与保存。

Linux防火墙 规则编写没有万能模板,但有一套通用逻辑:先明确需求,再选择 工具 ,接着按“默认拒绝→放行必要→验证效果→持久保存”四步走。关键不是记命令,而是理清流量方向、协议 端口、状态匹配这些底层要素。
明确你要控制的流量类型
防火墙本质是控制进出主机的数据包。必须先搞清:谁访问谁、用什么协议、走哪个端口、是否需要状态跟踪 。比如对外提供 Web 服务,核心就是放行外部到本机 TCP 80/443;如果是 数据库 只允许内网访问,则限定源 IP 段 + 目标端口 3306。
选对工具再写规则——iptables、nftables、firewalld 不是随便换
centos 7/8、RHEL 8+ 默认用 firewalld,底层可能是 nftables;debian/ubuntu传统用 iptables,新版也逐步切 nftables。别硬套旧教程命令:
- firewalld 适合策略级管理:用 firewall-cmd –permanent –add-port=22/tcp 这类语句,自动处理底层规则
- nftables 是 iptables 继任者,语法更简洁:用nft add rule ip Filter input tcp dport 22 accept
- iptables 仍可用,但新系统建议学 nftables,避免未来兼容问题
四步写出安全又可用的规则
跳过“先清空所有规则”这种危险操作。真实环境应增量修改:
- 默认策略设为 DROP:INPUT 和 FORWARD 链先设policy DROP,堵住所有未明说的流量
- 放行基础连接:回环(lo)、已建立连接(state RELATED,ESTABLISHED)、SSH(若远程管理)、ICMP(可选)
- 按需添加业务端口:Web、数据库、自定义服务,务必指定协议(tcp/udp)和端口范围,不写 0 -65535
- 加源 IP 限制更稳妥 :比如 SSH 只允办公网段ipset 或直接saddr 192.168.10.0/24
验证与保存不能省
规则写完不测试 = 没写。用 telnet 或nc从另一台机器测端口通不通;用 tcpdump 抓包看是否被 drop;用 nft list ruleset 或iptables -L -vn确认规则顺序和命中数。
- firewalld:改完运行firewall-cmd –reload,永久生效要加–permanent
- nftables:规则默认不持久,需 nft list ruleset > /etc/nftables.conf 并启用对应服务
- iptables:用iptables-save > /etc/iptables/rules.v4(Debian 系)或service iptables save(RHEL 系)
基本上就这些。不复杂但容易忽略的是:规则顺序决定优先级,越靠前越先匹配;状态匹配(RELATED,ESTABLISHED)必须放在业务规则前面;所有开放端口都要有明确业务依据,没用的赶紧关掉。