写点什么

Etcd API 未授权访问漏洞修复

  • 2022-11-04
    北京
  • 本文字数:2006 字

    阅读完需:约 7 分钟

作者: 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. 检查集群状态无误后,需要设置防火墙开机启动。


发布于: 刚刚阅读数: 4
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
Etcd API 未授权访问漏洞修复_监控_TiDB 社区干货传送门_InfoQ写作社区