12.8.3 系统与网络层安全加固要点

系统与网络层安全加固应以最小暴露面、最少权限和可审计为原则,保证 Keepalived 高可用环境在遭受攻击或异常时仍能稳定切换。本节给出加固原理草图、基线配置、关键命令示例、排错与练习。

原理草图(安全分区与心跳路径):

文章图片

一、系统层基线加固与最小权限
1) 关闭不必要服务、限制登录与账号权限:

# 查看监听端口与服务
ss -lntup
systemctl list-unit-files --type=service | grep enabled

# 禁用不必要服务(示例)
systemctl disable --now postfix

# SSH 强化:禁用 root 远程,启用密钥
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl reload sshd

# 给 Keepalived 使用专用账号(如发行版默认已创建 keepalived 用户)
id keepalived || useradd -r -s /sbin/nologin keepalived

2) Keepalived 配置文件与脚本权限:

# 配置目录与文件权限
chown -R root:root /etc/keepalived
chmod 700 /etc/keepalived
chmod 600 /etc/keepalived/keepalived.conf

# 健康检查脚本权限
chown root:root /etc/keepalived/check_web.sh
chmod 700 /etc/keepalived/check_web.sh

3) 安全更新策略示例(以定期补丁窗口为例):

# RHEL/CentOS
yum -y update --security

# Ubuntu
apt-get update && apt-get -y upgrade

二、网络层隔离、白名单与防火墙策略
1) VRRP 心跳隔离:建议专用 VLAN/网卡,或设置单播 VRRP。
Keepalived 单播示例(/etc/keepalived/keepalived.conf):

vrrp_instance VI_1 {
  state MASTER
  interface eth1
  virtual_router_id 51
  priority 120
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 7f9a1b2c
  }
  unicast_src_ip 10.10.10.2
  unicast_peer {
    10.10.10.3
  }
  virtual_ipaddress {
    10.10.10.100/24 dev eth0
  }
}

2) 防火墙放行 VRRP(协议号 112)与单播端口,限制业务访问来源:

# firewalld:允许 VRRP
firewall-cmd --permanent --add-rich-rule='rule protocol value="vrrp" accept'
# 允许业务端口(示例仅允许内网段访问 80/443)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" port protocol="tcp" port="80-443" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port protocol="tcp" port="80-443" drop'
firewall-cmd --reload

三、ARP 与 DoS 防护的关键内核参数
1) ARP 防护参数(避免 VIP 争用与欺骗):

cat >/etc/sysctl.d/99-keepalived-hardening.conf <<'EOF'
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096
EOF
sysctl --system

2) VIP 绑定与 ARP 行为验证:

ip a show dev eth0 | grep 10.10.10.100
arp -an | grep 10.10.10.100

四、健康检查脚本白名单化与稳定性
示例脚本(/etc/keepalived/check_web.sh):

#!/usr/bin/env bash
# 说明:检查本机 Nginx 端口,失败则返回非 0 触发降级
curl -fsS --max-time 2 http://127.0.0.1:80/health >/dev/null
exit $?

Keepalived 配置引用:

vrrp_script chk_web {
  script "/etc/keepalived/check_web.sh"
  interval 2
  weight -20
  timeout 3
}
vrrp_instance VI_1 {
  track_script {
    chk_web
  }
}

五、排错与验证流程
1) VRRP 被防火墙阻断的排错:

# 抓包验证 VRRP 心跳
tcpdump -i eth1 -nn proto 112

# 查看防火墙规则是否允许
firewall-cmd --list-rich-rules

2) VIP 不可访问或切换异常的排错:

# 检查 VIP 是否在主节点
ip addr show | grep 10.10.10.100

# 检查 Keepalived 日志
journalctl -u keepalived -f

六、练习
1) 演练最小权限:将 /etc/keepalived/keepalived.conf 权限改为 644,观察服务是否报错;再恢复到 600,并记录日志差异。
2) 演练防火墙规则:先阻断 VRRP(删除 rich-rule),观察 2 台节点状态变化;再恢复规则并验证稳定切换。
3) 演练 ARP 防护:关闭 arp_ignore/arp_announce,模拟双主冲突,记录现象并恢复内核参数。

通过以上加固与验证流程,可在不影响高可用切换的前提下提升系统与网络层安全性,并保障 Keepalived 在攻击或异常条件下的稳定可控。