服务器防火墙区域隔离需通过网卡绑定、区域选型与富规则三步实现:先按用途将eth0、eth1、eth2分别绑定public、internal、mgmt等区域;再为各区域精简服务,仅开放必要端口;最后用富规则基于源地址、端口、协议实施精准访问控制。

服务器防火墙区域隔离不是简单开几个端口,关键是把不同网络平面按信任等级“打标签”,再用区域绑定+富规则组合控制流量走向。核心就三点:分清网卡归属、选对区域类型、补上精细规则。
先按网卡物理位置绑定对应区域
多网卡服务器必须明确每张网卡的用途,不能所有接口都塞进 public 区域:
- 公网出口网卡(如 eth0)→ 绑定到 public 区域:`firewall-cmd --permanent --zone=public --add-interface=eth0`
- 集群内网通信网卡(如 eth1)→ 绑定到 internal 区域:`firewall-cmd --permanent --zone=internal --add-interface=eth1`
- 管理跳板或监控专用网卡(如 eth2)→ 可绑定 trusted 或自定义区域(如 mgmt):`firewall-cmd --permanent --new-zone=mgmt`
执行后务必 `firewall-cmd --reload` 生效,并用 `firewall-cmd --get-active-zones` 确认绑定结果。
针对Linux系统,phpStudy团队推出全网首家linux docker容器面板,只要一个命令,快速安装面板,在面板里可以自行选择软件版本,可以方便的进行安全配置,就算没有Linux基础也可以快速搭建和管理PHP服务器环境!
为每个区域设最小化服务白名单
区域默认策略不等于放行全部,要主动删掉不需要的服务,只留真正必需的:
- public 区域:仅保留 ssh、https;移除 dhcpv6-client、samba-client 等内网服务:`firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client`
- internal 区域:开放 etcd(2379-2380/tcp)、kubelet(10250/tcp)、Prometheus 指标端口(9100/tcp)等:`firewall-cmd --permanent --zone=internal --add-port=2379-2380/tcp`
- trusted 或自定义区域:可直接允许全部连接,或仅限特定源 IP 段:`firewall-cmd --permanent --zone=mgmt --add-source=192.168.10.0/24`
用富规则做“谁—能—访问—什么”的精准控制
单纯开端口不够,横向攻击常绕过服务级限制。富规则支持源地址+端口+协议三重匹配:
- 只允许 master 节点(10.10.10.10)访问 worker 的 kubelet API:`firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" source address="10.10.10.10" port port="10250" protocol="tcp" accept'`
- 封禁已知恶意子网(192.168.200.0/24)所有入向连接:`firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.200.0/24" reject'`
- etcd 集群间通信,要求源地址在 10.10.0.0/16 且端口为 2379:`firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" source address="10.10.0.0/16" port port="2379" protocol="tcp" accept'`
验证与固化配置
每次修改都要检查是否永久生效,避免重启后丢失:
- 查看某区域完整配置:`firewall-cmd --zone=internal --list-all`
- 确认所有规则已写入磁盘:`firewall-cmd --runtime-to-permanent`(若之前只运行时添加)
- 测试连通性前,先关掉 SELinux 干扰(临时):`setenforce 0`,排查完再恢复










