本文针对CentOS 7多IP环境,详细介绍了Firewalld防火墙的配置方法,通过区域划分、IP绑定及端口管理,实现多网段的精细化流量控制,有效提升服务器网络的安全性与隔离性。
在CentOS 7系统中,默认使用的防火墙管理工具是 firewalld,相比于传统的 iptables,firewalld 动态防火墙守护进程提供了更好的网络区域管理,能够更灵活地处理多IP或多网卡场景。
当服务器拥有多个IP地址(例如用于负载均衡、多服务部署或内外网隔离)时,正确配置防火墙至关重要,以防止误封或未授权访问,本文将详细介绍在CentOS 7多IP情况下,如何使用 firewalld 进行精细化配置。
基础概念:区域与接口
firewalld 的核心概念是“区域”,默认情况下,firewalld 会将网络接口分配到不同的区域中(如 public、internal)。

- 多网卡场景:通常将不同的网卡(如
eth0、eth1)分别指定到不同的区域,该区域内的所有IP都会继承该区域的防火墙策略。 - 单网卡多IP场景:需要在配置规则时,通过源地址(
source address)来指定特定的IP进行放行或限制。
场景一:多网卡多IP配置(按接口隔离)
如果你的服务器有两块网卡,分别对应内网和外网,这是最简单的配置方式,你只需将网卡绑定到对应的区域即可。
假设环境:
eth0(IP: 192.168.1.100) -> 对外服务eth1(IP: 10.0.0.100) -> 内部服务
配置步骤:
-
将网卡绑定到区域: 将
eth0加入public区域(允许外网访问):firewall-cmd --zone=public --add-interface=eth0 --permanent
-
添加放行规则(以HTTP服务为例): 仅允许外部IP访问
eth0上的 80 端口:firewall-cmd --zone=public --add-service=http --permanent
-
将网卡绑定到区域: 将
eth1加入internal区域(仅限内网访问):firewall-cmd --zone=internal --add-interface=eth1 --permanent
-
重新加载防火墙:
firewall-cmd --reload
这样配置后,eth0 上的所有IP都会受到 public 区域规则的约束,eth1 上的所有IP则会受到 internal 区域规则的约束。
场景二:单网卡绑定多个IP(按IP精细化控制)
如果只有一个网卡 eth0,但上面绑定了多个IP(168.1.100 和 168.1.101),且你需要将不同的服务分别开放给不同的IP,就需要使用 firewalld 的“富规则”。
假设环境:
eth0上有两个IP:168.1.100(运行Web服务) 和168.1.101(运行SSH服务)。- 现在默认区域是
public。
配置步骤:
-
开放默认端口(如SSH的22端口): 假设我们要允许所有人访问
168.1.101的SSH,但限制168.1.100不能直接访问SSH。注意:
firewalld没有直接“拒绝特定IP访问特定端口”的简单开关,通常做法是先开放所有,再用富规则排除。 -
使用富规则(Rich Rule)指定特定IP: 命令语法为
--add-rich-rule。示例 A:允许特定IP访问特定端口 允许
168.1.101访问本机的 22 端口:firewall-cmd --zone=public --add-rich-rule='rule family="ipv4"

