[mysql] 17.5 组复制(MGR)安全指南

举报
dber 发表于 2021/02/25 18:39:19 2021/02/25
【摘要】 17.5.1 组复制IP白名单组复制插件具有一个配置选项,用于确定可以从哪些主机接收组通信连接。此选项称为 group_replication_ip_whitelist。如果在服务器s1上设置此选项,则当服务器s2为了建立组通信而与s1建立连接时,s1首先接受允许列表,然后再接受s2的连接。如果s2在允许列表中,则s1接受连接,否则s1拒绝s2的连接尝试。如果未明确指定允许列表,则组通信引擎...

17.5.1 组复制IP白名单

组复制插件具有一个配置选项,用于确定可以从哪些主机接收组通信连接。此选项称为 group_replication_ip_whitelist。如果在服务器s1上设置此选项,则当服务器s2为了建立组通信而与s1建立连接时,s1首先接受允许列表,然后再接受s2的连接。如果s2在允许列表中,则s1接受连接,否则s1拒绝s2的连接尝试。

如果未明确指定允许列表,则组通信引擎(XCom)会自动扫描主机上的活动接口,并使用私有子网中的地址来标识这些接口。这些地址和localhost IPv4的IP地址用于创建自动组复制允许列表。因此,自动允许列表包括在以下范围内为主机找到的任何IP地址:

10/8 prefix       (10.0.0.0 - 10.255.255.255) - Class A
172.16/12 prefix  (172.16.0.0 - 172.31.255.255) - Class B
192.168/16 prefix (192.168.0.0 - 192.168.255.255) - Class C
127.0.0.1 - localhost for IPv4

在错误日志中会添加一个条目,说明已为主机自动列出的地址。

专用地址的自动允许列表不能用于来自私有网络之外的服务器的连接,因此,即使该服务器在公用IP上具有接口,默认情况下也不允许来自外部主机的组复制连接。对于位于不同计算机上的服务器实例之间的组复制连接,必须提供公用IP地址并将其指定为显式允许列表。如果为允许列表指定任何条目,localhost 则不会自动添加私有和地址,因此,如果使用其中任何一个,则必须明确指定它们。

要手动指定允许列表,请使用 group_replication_ip_whitelist 选项。如果服务器是复制组的活动成员,则无法在服务器上更改其许可列表。如果该成员处于活动状态,则必须STOP GROUP_REPLICATION 在更改允许列表之前先发表声明,然后再 START GROUP_REPLICATION声明。

在白名单中,您可以指定以下任意组合:

  • IPv4地址(例如,198.51.100.44

  • 具有CIDR格式的IPv4地址(例如, 192.0.2.21/24

  • 主机名,从MySQL 5.7.21开始(例如, example.org

  • 带有CIDR格式的主机名,从MySQL 5.7.21开始(例如, www.example.com/24

MySQL 5.7不支持IPv6地址和解析为IPv6地址的主机名。您可以将CIDR合适与主机名或IP地址结合使用,以允许列出具有特定网络前缀的IP地址块,但请确保指定子网中的所有IP地址都在您的控制之下。

必须停止并重新启动成员上的组复制才能更改白名单。白名单中的每个条目需要用逗号隔开。例如:


mysql> STOP GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_ip_whitelist="192.0.2.21/24,198.51.100.44,203.0.113.0/24,example.org,www.example.com/24";
mysql> START GROUP_REPLICATION;


白名单必须包含每个成员的group_replication_local_address 系统变量中指定的IP地址或主机名 。该地址与MySQL服务器SQL协议的主机和端口不同,并且未在bind_address服务器实例的系统变量中指定 。

当复制组重新配置(例如,当新的主当选或成员加入或离开),组成员重新建立它们自己之间的连接。如果在重新配置后仅由不再属于复制组的服务器允许组成员加入列表,则该组成员将无法重新连接到复制组中不允许其列出的其余服务器。为了完全避免这种情况,请为复制组成员的所有服务器指定相同的允许列表。

注意

例如,可以根据您的安全要求在不同的组成员上配置不同的白名单,以使不同的子网分开。如果需要配置其他允许列表以满足您的安全要求,请确保复制组中的白名单之间有足够的重叠,以最大程度地提高服务器在没有原始种子成员的情况下能够重新连接的可能性。

对于主机名,仅当另一台服务器发出连接请求时,才进行名称解析。无法解析的主机名不会用于允许列表验证,并且警告消息会写入错误日志。对已解析的主机名执行前向确认的反向DNS(FCrDNS)验证。

警告

主机名本质上不如允许列表中的IP地址安全。FCrDNS验证提供了良好的保护水平,但可能会受到某些类型的攻击的损害。仅在绝对必要时在允许列表中指定主机名,并确保所有用于名称解析的组件(例如DNS服务器)都在您的控制下。您也可以使用hosts文件在本地实现名称解析,以避免使用外部组件。

17.5.2 组复制安全套接字协议 (SSL) 支持

使用SSL保护组通信连接和恢复连接。以下说明如何配置连接。

为组复制恢复配置SSL

通过常规的异步复制连接执行恢复。选择donor 后,加入该组的服务器将建立异步复制连接。这都是自动的。

但是,在加入组的服务器连接到donor 之前,必须已经创建了需要SSL连接的用户。通常,这是在预配置​​服务器加入组时设置的。

donor> SET SQL_LOG_BIN=0;
donor> CREATE USER 'rec_ssl_user'@'%' REQUIRE SSL;
donor> GRANT replication slave ON *.* TO 'rec_ssl_user'@'%';
donor> SET SQL_LOG_BIN=1;

假设已经在组中的所有服务器都设置了使用SSL的复制用户,则可以将加入组的服务器配置为在连接到donor时使用这些凭据。这是根据为组复制插件提供的SSL选项的值完成的。

配置用于组通信的SSL

安全套接字可用于在组中的成员之间建立通信。此配置取决于服务器的SSL配置。因此,如果服务器配置了SSL,则组复制插件也配置了SSL。下表显示了配置组复制的选项。

new_member> SET GLOBAL group_replication_recovery_use_ssl=1;
new_member> SET GLOBAL group_replication_recovery_ssl_ca= '.../cacert.pem';
new_member> SET GLOBAL group_replication_recovery_ssl_cert= '.../client-cert.pem';
new_member> SET GLOBAL group_replication_recovery_ssl_key= '.../client-key.pem';

配置恢复通道时,使用SSL连接用户凭据。

new_member> CHANGE MASTER TO MASTER_USER="rec_ssl_user" FOR CHANNEL "group_replication_recovery";
new_member> START GROUP_REPLICATION;

配置用于组通信的SSL

安全套接字可用于在组中的成员之间建立通信。此配置取决于服务器的SSL配置。因此,如果服务器配置了SSL,则组复制插件也配置了SSL。

表17.2 SSL选项

服务器配置

插件配置说明

ssl_key

密钥文件的路径。用作客户端和服务器证书。

ssl_cert

证书文件的路径。用作客户端和服务器证书。

ssl_ca

具有受信任的SSL证书颁发机构的文件的路径。

ssl_capath

包含受信任的SSL证书颁发机构的证书的目录路径。

ssl_crl

包含证书吊销列表的文件的路径。

ssl_crlpath

包含已撤销证书列表的目录路径。

ssl_cipher

在通过连接加密数据时使用的允许密码。

tls_version

安全通信使用此版本及其协议。


这些选项是组复制所依赖的MySQL Server配置选项。此外,还有以下特定于组复制的选项,用于在插件本身上配置SSL。

表17.3 group_replication_ssl_mode配置

描述

DISABLED

建立未加密的连接(默认)。

REQUIRED

如果服务器支持安全连接,则建立安全连接。

VERIFY_CA

与REQUIRED相似,但另外还要针对配置的证书颁发机构(CA)证书验证服务器TLS证书。

VERIFY_IDENTITY

与VERIFY_CA类似,但还要验证服务器证书是否与尝试连接的主机匹配。


以下示例显示了一个示例my.cnf文件部分,该部分用于在服务器上配置SSL以及如何为组复制激活它。

[mysqld]
ssl_ca = "cacert.pem"
ssl_capath = "/.../ca_directory"
ssl_cert = "server-cert.pem"
ssl_cipher = "DHE-RSA-AEs256-SHA"
ssl_crl = "crl-server-revoked.crl"
ssl_crlpath = "/.../crl_directory"
ssl_key = "server-key.pem"
group_replication_ssl_mode= REQUIRED

通过使用ssl_*提供给服务器的参数配置SSL框架,此选项可激活组成员之间的SSL通信 。

17.5.3组复制和虚拟专用网(VPN)

没有什么可以阻止组复制通过虚拟专用网络进行操作。它的核心只是依靠IPv4套接字在服务器之间建立连接,以在服务器之间传播消息。



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。