keepalived 不提供防火墙功能,但可与 iptables 协同构建高可用安全防护墙集群:keepalived 管理 vip 与主备切换,iptables 实现状态化过滤;需同二层网络、唯一主机名、时间同步、iptables 规则统一分发,并通过 notify 指令在状态变更时校验并同步规则。

Keepalived 本身不直接提供防火墙功能,但它能与 iptables 协同构建高可用安全防护墙集群——核心思路是:用 Keepalived 管理虚拟 IP(VIP)和主备自动切换,用 iptables 实现状态化包过滤与策略控制,两者在各自职责内紧密配合,确保安全策略不随节点切换而失效或错配。
基础环境准备与网络隔离要求
安全防护墙集群要求所有节点处于同一二层网络(如 VPC 子网),且必须满足以下前提:
- 各节点主机名唯一且与
hostname -f输出一致,建议通过/etc/hosts实现互相解析(避免依赖外部 DNS) - 所有节点时间严格同步(推荐使用 chrony 或 ntpdate 定时校准,误差需
- 关闭 SELinux(
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config) - iptables 规则需持久化(CentOS 7+ 推荐用
iptables-services包 +service iptables save;或用iptables-restore配合脚本加载)
iptables 策略设计要点
作为安全防护墙,iptables 规则必须具备“可迁移性”和“一致性”。关键原则:
- VIP 不参与 NAT 或连接跟踪决策,仅作为入口/出口地址标识;所有 INPUT/FORWARD 规则应基于物理接口(如
-i eth0)或子网段(如-s 192.168.10.0/24),而非绑定 VIP 的接口别名 - 显式放行 VRRP 协议流量:
iptables -A INPUT -d 224.0.0.18 -p vrrp -j ACCEPT(VRRP 默认组播地址) - 若启用非默认端口健康检查(如自定义 HTTP 探针),需额外放行对应端口(如
-p tcp --dport 8080) - 禁用系统默认的 FORWARD DROP(除非明确启用路由转发),安全墙通常工作在 L3/L4 边界,规则应聚焦于 INPUT 和 OUTPUT
Keepalived 配置关键项(含安全加固)
配置文件 /etc/keepalived/keepalived.conf 中需特别注意以下安全相关设置:
-
禁用明文 SMTP 邮件告警:生产环境建议注释掉
notification_email及smtp_server段,改用本地日志 + 外部日志平台告警(如 rsyslog 转发至 ELK) -
强制认证机制:每个
vrrp_instance必须配置authentication { auth_type PASS; auth_pass xxxxx; },密码长度 ≥8 位,避免弱口令 -
限制 VRRP 组播范围:不使用默认
vrrp_mcast_group4 224.0.0.18全局设置,改为在实例内指定,或结合 iptables 限制接收源:iptables -A INPUT -s ! 192.168.10.0/24 -d 224.0.0.18 -j DROP -
禁用非必要模块:如无需 LVS 调度,删除或注释整个
LVS CONFIGURATION段,减小攻击面
主备切换时的 iptables 同步保障
Keepalived 切换 VIP 本身不触发 iptables 规则变更,因此必须确保两节点规则完全一致。推荐做法:
- 将 iptables 规则导出为脚本(
iptables-save > /etc/sysconfig/iptables-rules.sh),并纳入 Ansible/Puppet 等配置管理工具统一分发 - 利用 Keepalived 的
notify_master/notify_backup指令,在状态变更时执行校验脚本:notify_master "/usr/local/bin/check-iptables-sync.sh && systemctl restart iptables" - 检查脚本应比对
iptables-save输出的 MD5 值,并在不一致时触发告警或自动回滚











