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 分配防火墙标记

要将防火墙标记分配给指定特定端口的数据包,管理员可以使用 firewalldfirewall-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 识别并相应地转发。
警告
上述命令将立即生效,但不会在系统重启后保留。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.