firewalld通过区域化策略(如public、internal、trusted)实现多网卡环境下的分层控制,结合富规则、状态感知(ESTABLISHED/RELATED)和持久化配置(--permanent + --reload),构建可管理、可验证、可演进的防火墙策略体系。

配置系统防火墙规则支持复杂环境下的网络通信加固,关键不是堆砌规则,而是建立可管理、可验证、可演进的策略体系。核心在于分层控制、最小放行、状态感知和持续验证。
明确区域与信任等级(firewalld 优先)
在多网卡、混合网络(如公网+内网+管理网)场景下,直接写 iptables 规则易出错且难维护。firewalld 的 zone 模型天然适配复杂拓扑:
- 将面向互联网的网卡(如 eth0)绑定到 public 区域,仅开放 HTTP/HTTPS/SSH(严格限源 IP)
- 将内部服务通信网卡(如 eth1)绑定到 internal 区域,允许数据库端口(如 3306、5432)、API 服务端口及 ICMP
- 将带外管理接口(如 mgmt0)绑定到 trusted 区域,仅允许可信管理网段(如 10.10.0.0/16)访问 SSH 和监控端口
- 执行命令示例:
firewall-cmd --permanent --zone=public --add-interface=eth0,firewall-cmd --permanent --zone=internal --add-interface=eth1
按连接状态精细化放行(iptables/firewalld 均适用)
单纯“开 80 端口”不等于安全——必须区分新连接、已建立连接和关联连接:
- 默认拒绝所有入站:
iptables -P INPUT DROP(iptables)或firewall-cmd --set-default-zone=drop(firewalld) - 无条件放行本地回环:
-A INPUT -i lo -j ACCEPT - 放行 ESTABLISHED/RELATED 流量(保障出站响应能回来):
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT - 对新连接(--ctstate NEW)单独设限:例如 SSH 仅允新连接来自 192.168.10.0/24,且每分钟最多 3 次尝试
用富规则(Rich Rules)应对动态策略需求
当需基于源 IP、端口范围、时间或日志标记做细粒度控制时,firewalld 的 rich rules 比 raw iptables 更清晰可靠:
- 限制某 IP 段仅能访问 Web 端口:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" port port="80" protocol="tcp" accept' - 拒绝已知恶意 ASN 的全部流量(配合 ipset 或外部黑名单脚本):
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source ipset="blacklist-asn" reject' - 为特定规则添加日志标记便于审计:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" destination port="22" protocol="tcp" log prefix="ssh-blocked" level="info" reject'
确保规则持久化并验证真实生效
重启后失效是防火墙配置最常见失误。必须确认规则不仅“加了”,而且“存了、载了、跑了”:
-
firewalld:所有操作务必加
--permanent,最后执行firewall-cmd --reload;检查是否生效:firewall-cmd --list-all-zones -
iptables:Debian/Ubuntu 用
iptables-save > /etc/iptables/rules.v4;RHEL/CentOS 7+ 启用iptables-services并运行service iptables save - 验证方式:
iptables -L INPUT -n -v查看计数器是否增长;conntrack -L | grep :22确认连接状态被正确识别;从客户端用curl -v http://server:80和telnet server 22实测连通性










