Etcd API 未授权访问漏洞修复
作者: gary 原文来源:https://tidb.net/blog/2b186d9d
概述
针对 etcd API 未授权访问漏洞
etcd 是一个采用 HTTP 协议的健 / 值对存储系统,它是一个分布式和功能层次配置系统,可用于构建服务发现系统。用于共享配置和服务发现的分布式, 一致性的 KV 存储系统. 其很容易部署、安装和使用,提供了可靠的数据持久化特性。etcd 提供了 API 访问的方式,但由于未配置认证,导致 etcd API 存在未授权访问漏洞。
集群环境
此系统共使用物理机 8 个节点。
tidb 版本:v4.0.12
方案建议
etcd 的漏洞整改建议
方案一:配置身份验证, 防止止未经授权用用户访问
Tidb 集群配置 tls 安全访问,需要先把 pd 节点由 3 节点缩容到 1 节点,这种方法对 pd 集群有一定风险,不太建议此方法。
方案二:访问控制策略略, 限制 IP 访问
开启操作系统 iptabes,配置白名单,内部节点可访问 pd 节点。
此方案对集群的影响相对较小
方案二实施
TiDB 集群中 PD 主机通过防火墙 iptables 设置白名单,PD 之间互信,拒绝外来访问
1) 检查 (xx.xx.xx.61、xx.xx.xx.63、xx.xx.xx.65) 机器上的端口情况,因为这 3 台机器上混部了 pd、tidb、pump 节点
tiup cluster display tidb-xxxx
2) 确认 pd leader 节点
tiup ctl:v4.0.12 pd -u http://xx.xx.xx.61:2379 member
tiup ctl:v4.0.12 pd -u http://xx.xx.xx.61:2379 member leader show
3) 先开启非 pd leader 两个节点的防火墙,再把 pd leader 进行切换
tiup ctl:v4.0.12 pd -u http://xx.xx.xx.61:2379 member leader transfer pd_pd2
可能造成的风险:
在切换 pd leader 可能短暂出现 tikv 找不到 pd 节点,导致事务被 block,会对业务造成一定风险,建议确认停止业务后进行操作
6) 入以下规则
vi /etc/sysconfig/iptables
-A INPUT -s xx.xx.xx.51 -p tcp -m tcp –dport 2379 -j ACCEPT
-A INPUT -s xx.xx.xx.53 -p tcp -m tcp –dport 2379 -j ACCEPT
-A INPUT -s xx.xx.xx.55 -p tcp -m tcp –dport 2379 -j ACCEPT
-A INPUT -s xx.xx.xx.61 -p tcp -m tcp –dport 2379 -j ACCEPT
-A INPUT -s xx.xx.xx.63 -p tcp -m tcp –dport 2379 -j ACCEPT
-A INPUT -s xx.xx.xx.65 -p tcp -m tcp –dport 2379 -j ACCEPT
-A INPUT -s xx.xx.xx.70 -p tcp -m tcp –dport 2379 -j ACCEPT
-A INPUT -s xx.xx.xx.75 -p tcp -m tcp –dport 2379 -j ACCEPT
-A INPUT -s xx.xx.xx.51 -p tcp -m tcp –dport 2380 -j ACCEPT
-A INPUT -s xx.xx.xx.53 -p tcp -m tcp –dport 2380 -j ACCEPT
-A INPUT -s xx.xx.xx.55 -p tcp -m tcp –dport 2380 -j ACCEPT
-A INPUT -s xx.xx.xx.61 -p tcp -m tcp –dport 2380 -j ACCEPT
-A INPUT -s xx.xx.xx.63 -p tcp -m tcp –dport 2380 -j ACCEPT
-A INPUT -s xx.xx.xx.65 -p tcp -m tcp –dport 2380 -j ACCEPT
-A INPUT -s xx.xx.xx.70 -p tcp -m tcp –dport 2380 -j ACCEPT
-A INPUT -s xx.xx.xx.75 -p tcp -m tcp –dport 2380 -j ACCEPT
-A INPUT -s xx.xx.xx.51 -p tcp -m tcp –dport 8250 -j ACCEPT
-A INPUT -s xx.xx.xx.53 -p tcp -m tcp –dport 8250 -j ACCEPT
-A INPUT -s xx.xx.xx.55 -p tcp -m tcp –dport 8250 -j ACCEPT
-A INPUT -s xx.xx.xx.61 -p tcp -m tcp –dport 8250 -j ACCEPT
-A INPUT -s xx.xx.xx.63 -p tcp -m tcp –dport 8250 -j ACCEPT
-A INPUT -s xx.xx.xx.65 -p tcp -m tcp –dport 8250 -j ACCEPT
-A INPUT -s xx.xx.xx.70 -p tcp -m tcp –dport 8250 -j ACCEPT
-A INPUT -s xx.xx.xx.75 -p tcp -m tcp –dport 8250 -j ACCEPT
-A INPUT -s xx.xx.xx.51 -p tcp -m tcp –dport 10080 -j ACCEPT
-A INPUT -s xx.xx.xx.53 -p tcp -m tcp –dport 10080 -j ACCEPT
-A INPUT -s xx.xx.xx.55 -p tcp -m tcp –dport 10080 -j ACCEPT
-A INPUT -s xx.xx.xx.61 -p tcp -m tcp –dport 10080 -j ACCEPT
-A INPUT -s xx.xx.xx.63 -p tcp -m tcp –dport 10080 -j ACCEPT
-A INPUT -s xx.xx.xx.65 -p tcp -m tcp –dport 10080 -j ACCEPT
-A INPUT -s xx.xx.xx.70 -p tcp -m tcp –dport 10080 -j ACCEPT
-A INPUT -s xx.xx.xx.75 -p tcp -m tcp –dport 10080 -j ACCEPT
-A INPUT -p tcp –dport 4000 -j ACCEPT
7) 打开 iptables 防火墙
systemctl start iptables
8) 检查防火墙策略 (xx.xx.xx.61、xx.xx.xx.63、xx.xx.xx.65) :
iptables -L -n
9) 集群验证:(节点状态是否正常)
tiup cluster display tidb-xxxx
10)查看集群日志是否有报错
11)测试集群的备份和 binlog 同步是否正常
12) 确认没问题后,iptables 防火墙开机启动
systemctl enable iptables
总结
1.Etcd 漏洞修复方法有几种,需要注意每种方法对集群的影响。
2. 需要提前确认发生 etcd 漏洞机器上的所有端口,防止开启防火墙节点之间访问受阻。
3. 开启防火墙前,需要确认配置文件,避免开启防火墙 ssh 断连。
4. 检查集群状态无误后,需要设置防火墙开机启动。
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/bbeac0cec43aefcb6afaecc45】。文章转载请联系作者。
评论