3.4. 多端口服务和负载平衡器
在创建多端口负载平衡器服务时,任何拓扑下的 LVS 路由器都需要额外的配置。通过使用防火墙标记将不同但相关的协议(如 HTTP(端口 80)和 HTTPS(端口 443)或 Load Balancer 与真正的多端口协议一起使用时,多端口服务可以动态创建。在这两种情况下,LVS 路由器使用防火墙标记来识别应使用相同的防火墙标记,以识别针对不同端口指定的数据包,但符合相同的防火墙标记。此外,当与持久性结合使用时,防火墙标记可确保从客户端计算机的连接路由到同一主机,只要连接在 persistence 参数指定的时段内即可。
虽然用于平衡实际服务器上的负载的机制可以识别分配给包的防火墙标记,但它本身无法分配防火墙标记。分配 防火墙标记的作业必须由网络数据包过滤 iptables 执行。Red Hat Enterprise Linux 7 中的默认防火墙管理工具是
firewalld
,可用于配置 iptables。如果首选,可以直接使用 iptables。有关在 Red Hat Enterprise Linux 7 中使用 iptables 的详情,请查看 Red Hat Enterprise Linux 7 安全指南。
3.4.1. 使用 firewalld 分配防火墙标记
要将防火墙标记分配给指定特定端口的数据包,管理员可以使用
firewalld
的firewall-cmd 工具。
如果需要,确认
firewalld
正在运行:
# systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
Active: active (running) since Tue 2016-01-26 05:23:53 EST; 7h ago
要启动 firewalld
,请输入:
# systemctl start firewalld
确保 firewalld
在系统启动时启动:
# systemctl enable firewalld
本节演示了如何将 HTTP 和 HTTPS 捆绑为示例;但是,FTP 是另一种常见的多端口协议。
使用防火墙标记时要记住的基本规则是,对于在 Keepalived 中使用防火墙标记的每个协议,都必须有一条防火墙规则来为网络数据包分配标记。
在创建网络数据包过滤规则之前,请确保尚未有任何规则。要做到这一点,打开 shell 提示符,以
root
身份登录,然后输入以下命令:
# firewall-cmd --list-rich-rules
如果没有富规则,则提示符将立即重新显示。
如果
firewalld
是活跃的且丰富的规则,它会显示一组规则。
如果现有规则非常重要,请检查
/etc/firewalld/zones/
的内容,并在继续前将任何需要保留的规则复制到安全位置。使用以下格式的命令删除不需要的富规则: firewall-cmd --zone=zone --remove-rich-rule='rule' --permanent--permanent 选项使设置持久,但命令只会在下次系统启动时生效。如果需要使设置立即生效,请重复省略 --permanent 选项的命令。
要配置的第一个负载均衡器相关的防火墙规则是允许 Keepalived 服务的 VRRP 流量正常工作。使用以下命令:
# firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
如果省略 区域,则将使用默认区域。
以下是将同一防火墙标记
80
分配给用于浮动 IP 地址 n.n.n.n 的规则(端口 80 和 443)。
# firewall-cmd --add-rich-rule='rule family="ipv4" destination address="n.n.n.n/32" port port="80" protocol="tcp" mark set="80"' --permanent # firewall-cmd --add-rich-rule='rule family="ipv4" destination address="n.n.n.n/32" port port="443" protocol="tcp" mark set="80"' --permanent # firewall-cmd --reload success # firewall-cmd --list-rich-rules rule protocol value="vrrp" accept rule family="ipv4" destination address="n.n.n.n/32" port port="80" protocol="tcp" mark set=80 rule family="ipv4" destination address="n.n.n.n/32" port port="443" protocol="tcp" mark set=80
如果省略 区域,则将使用默认区域。
有关使用
firewalld
丰富的语言命令的更多信息,请参阅 Red Hat Enterprise Linux 7 安全指南。
3.4.2. 使用 iptables 分配防火墙标记
要将防火墙标记分配给指定特定端口的数据包,管理员可以使用 iptables。
本节演示了如何将 HTTP 和 HTTPS 捆绑为示例;但是,FTP 是另一种常见的多端口协议。
使用防火墙标记时要记住的基本规则是,对于在 Keepalived 中使用防火墙标记的每个协议,都必须有一条防火墙规则来为网络数据包分配标记。
在创建网络数据包过滤规则之前,请确保尚未有任何规则。要做到这一点,打开 shell 提示符,以
root
身份登录,然后输入以下命令:
/usr/sbin/service iptables status
如果 iptables 没有运行,则提示符将立即重新应用。
如果 iptables 处于活动状态,它将显示一组规则。如果存在规则,请输入以下命令:
/sbin/service iptables stop
如果规则已经就位很重要,请检查
/etc/sysconfig/iptables
的内容,并在继续操作前将任何需要保留的规则复制到安全位置。
第一个与配置防火墙规则相关的负载均衡器是允许 Keepalived 服务的 VRRP 流量正常工作。
/usr/sbin/iptables -I INPUT -p vrrp -j ACCEPT
以下是将同一防火墙标记
80
分配给用于浮动 IP 地址 n.n.n.n 的规则(端口 80 和 443)。
/usr/sbin/iptables -t mangle -A PREROUTING -p tcp -d n.n.n.n/32 -m multiport --dports 80,443 -j MARK --set-mark 80
请注意,您必须以
root
身份登录并加载 iptables 模块,然后才能首次发出规则。
在上面的 iptables 命令中,n.n.n.n.n 应替换为 HTTP 和 HTTPS 虚拟服务器的浮动 IP。这些命令在适当的端口上为防火墙标记 80 分配指向 VIP 的任何通信,进而得到 IPVS 识别并相应地转发。
警告
上述命令将立即生效,但不会在系统重启后保留。