服务器防火墙需按角色、网络平面和访问意图分层控制,使用firewalld的zone机制划分public、internal、trusted区域,绑定接口或源IP,配置最小化服务白名单与富规则实现细粒度访问控制,并永久保存后重载生效。

服务器防火墙在分布式系统中不是“打开几个端口”就能应付的,关键在于按角色、网络平面和访问意图分层控制。配置思路要从拓扑出发,而不是从单台机器入手。
宝塔面板11.3.0是一款针对Linux服务器设计的可视化管理工具,通过重构核心模块实现资源占用显著降低,尤其适合低配置服务器环境。它将复杂的命令行操作转化为直观的图形界面,帮助开发者快速完成网站部署、环境配置及日常运维工作,无需专业技术背景即可高效管理服务器。
按网络平面划分区域并绑定接口
分布式集群通常有三类流量:对外服务的公网面、节点间通信的内网面、运维管理的管控面。firewalld 的 zone 机制正好适配这种逻辑隔离。
- 查当前可用区域:
firewall-cmd --get-zones - 将公网网卡(如 eth0)固定到
public区:firewall-cmd --permanent --zone=public --add-interface=eth0 - 将内网通信网卡(如 eth1)绑定到
internal区:firewall-cmd --permanent --zone=internal --add-interface=eth1 - 若多数节点以内部通信为主,设
internal为默认区:firewall-cmd --set-default-zone=internal
为每个区域设置最小化服务白名单
不同区域只放行真正需要的协议,避免继承默认规则带来的风险。
-
public区:仅保留ssh和https,移除dhcpv6-client等内网服务:firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client -
internal区:添加 etcd(2379–2380/tcp)、kube-apiserver(6443/tcp)、Prometheus 指标端口(9090/tcp)等:firewall-cmd --permanent --zone=internal --add-port=2379-2380/tcp -
trusted区不绑接口,而是按源 IP 段授权,例如只允许跳板机网段:firewall-cmd --permanent --zone=trusted --add-source=10.10.50.0/24
用富规则实现源+端口级细粒度控制
单纯开端口无法满足“谁能在什么条件下访问什么”的需求,必须用 rich rule。
- 允许 master 节点(10.10.10.10)访问 worker 的 kubelet API(10250/tcp):
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 集群做双重校验:只允许特定源地址访问特定端口,防止扫描扩散:
firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" source address="10.10.20.0/24" port port="2379" protocol="tcp" accept'
配置后必须永久保存并重载
每条 --permanent 命令只写入配置文件,不立即生效。完成所有设置后统一重载:firewall-cmd --reload
验证是否生效:firewall-cmd --list-all-zones 或针对某区域查规则:firewall-cmd --zone=internal --list-all
不复杂但容易忽略。

















