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)必须放在业务规则前面;所有开放端口都要有明确业务依据,没用的赶紧关掉。