Keepalived与防火墙Zone协同配置指南:安全与高可用的平衡之道
2025.09.26 20:42浏览量:8简介:本文详细阐述Keepalived在防火墙开启环境下如何配置Zone规则,解决高可用集群与网络安全的协同问题,提供可落地的技术方案。
一、问题背景:高可用与安全的冲突
在构建高可用集群时,Keepalived通过VRRP协议实现主备节点快速切换,确保服务连续性。然而,当系统启用防火墙(如firewalld或iptables)时,VRRP广播包可能被拦截,导致主备切换失败。同时,防火墙的Zone机制通过划分不同安全域来管理流量,若配置不当,Keepalived的VIP(虚拟IP)通信也会受阻。
典型场景:
- 防火墙默认拒绝所有入站流量,Keepalived的VRRP多播包(224.0.0.18)无法通过
- VIP绑定后,外部访问被Zone规则拦截
- 主备节点切换时,防火墙未动态更新允许规则
二、防火墙Zone核心概念解析
1. Zone的作用与分类
防火墙Zone是Linux系统(如firewalld)中用于隔离不同安全级别的逻辑区域,常见Zone包括:
- trusted:允许所有流量
- public:仅允许已授权的服务(默认限制入站)
- internal:内部网络专用,信任度高于public
- drop:丢弃所有入站请求
每个网络接口必须关联到一个Zone,流量根据源接口的Zone应用对应规则。
2. Keepalived与Zone的交互逻辑
Keepalived运行时涉及两类流量:
- 控制流量:VRRP多播包(目的IP 224.0.0.18,端口112)
- 数据流量:通过VIP访问的实际服务(如80/443端口)
若未正确配置Zone规则,两类流量均可能被拦截。例如,public Zone默认拒绝所有非授权入站,需显式放行VRRP和VIP相关端口。
三、Keepalived防火墙配置实战
1. 环境准备
假设系统使用firewalld作为防火墙管理工具,两台节点(Node1、Node2)均启用public Zone。
# 查看当前Zone配置firewall-cmd --get-active-zones# 输出示例:# public# interfaces: eth0
2. 放行VRRP协议
VRRP使用多播地址224.0.0.18和端口112,需在public Zone中添加服务:
# 添加VRRP服务(firewalld内置服务)firewall-cmd --zone=public --add-service=vrrp --permanent# 重新加载防火墙规则firewall-cmd --reload
验证:
firewall-cmd --zone=public --list-services# 输出应包含vrrp
3. 配置VIP通信规则
假设VIP为192.168.1.100,需放行该IP的入站流量:
方法一:使用rich规则(推荐)
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept' --permanentfirewall-cmd --reload
方法二:绑定接口到专用Zone
创建专用Zone(如keepalived-zone):
firewall-cmd --new-zone=keepalived-zone --permanentfirewall-cmd --reload
将VIP绑定接口(如eth0:1)关联到该Zone:
# 假设VIP绑定到eth0:1nmcli connection modify "eth0:1" connection.zone keepalived-zone# 重启网络服务(根据系统调整)systemctl restart NetworkManager
在keepalived-zone中放行所有流量:
firewall-cmd --zone=keepalived-zone --add-service=http --permanentfirewall-cmd --zone=keepalived-zone --add-service=https --permanentfirewall-cmd --reload
4. 动态规则更新(主备切换时)
当主备切换时,VIP会从一个节点迁移到另一个节点。需确保防火墙规则随VIP动态调整:
方案一:使用脚本触发规则更新
在Keepalived的notify脚本中调用防火墙更新命令:
# /etc/keepalived/notify.sh 示例case "$1" inMASTER)firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept' --permanentfirewall-cmd --reload;;BACKUP)firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.1.100" accept' --permanentfirewall-cmd --reload;;esac
方案二:使用firewalld的direct接口
通过firewall-cmd --direct直接插入iptables规则,避免持久化配置冲突:
# 主节点启动时添加规则firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -d 192.168.1.100 -j ACCEPT# 备节点移除规则(需结合notify脚本)
四、常见问题与排查
1. VRRP多播包被拦截
现象:keepalived.log中出现VRRP_Instance(VI_1) Entering MASTER STATE但备节点未响应。
排查步骤:
检查防火墙是否放行vrrp服务:
firewall-cmd --zone=public --list-services | grep vrrp
使用tcpdump抓包分析:
tcpdump -i eth0 -n host 224.0.0.18
2. VIP访问被拒绝
现象:VIP可ping通,但HTTP服务无法访问。
解决方案:
确认服务端口是否放行:
firewall-cmd --zone=public --list-ports
检查是否绑定到正确Zone:
firewall-cmd --get-zone-of-interface=eth0:1
五、最佳实践建议
- 最小权限原则:仅放行Keepalived必需的端口(VRRP 112/udp、服务端口如80/443)
- 专用Zone隔离:为VIP绑定接口创建独立Zone,避免影响其他接口规则
- 自动化运维:通过Ansible等工具统一管理两节点的防火墙配置
- 日志监控:启用firewalld的日志功能,记录被拒绝的流量:
# /etc/firewalld/firewalld.confLogDenied=all# 重启服务systemctl restart firewalld
六、总结
在启用防火墙的环境下部署Keepalived,需重点关注VRRP协议和VIP流量的Zone规则配置。通过合理划分Zone、动态更新规则以及结合监控工具,可实现高可用集群与网络安全的双重保障。实际配置时,建议先在测试环境验证规则生效性,再逐步应用到生产环境。

发表评论
登录后可评论,请前往 登录 或 注册