安全检查发现etcd API 未授权访问漏洞,进行修复。
etcd是一个采用HTTP协议的健/值对存储系统,它是一个分布式和功能层次配置系统,可用于构建服务发现系统。用于共享配置和服务发现的分布式,一致性的KV存储系统.其很容易部署、安装和使用,提供了可靠的数据持久化特性。etcd提供了 API 访问的方式,但由于未配置认证,导致etcd API 存在未授权访问漏洞。
一、方案建议
方案一:配置身份验证, 防止止未经授权用用户访问
Tidb集群配置tls安全访问,需要先把pd节点由3节点缩容到1节点,这种方法对pd集群有一定风险,不太建议此方法。
方案二:访问控制策略略, 限制IP访问
开启操作系统iptabes,配置白名单,内部节点可访问pd节点。
此方案对集群的影响相对较小
二、方案二实施
TiDB集群中PD主机通过防火墙iptables设置白名单,PD之间互信,拒绝外来访问
yum install iptables-services
cat /etc/sysconfig/iptables
iptables -L -n
systemctl list-unit-files --type service | grep ‘enabled’
systemctl list-unit-files --type service | grep ‘enabled’ |grep pd
systemctl list-unit-files --type service | grep ‘enabled’ |grep tidb
1)检查tidb组件(...61、...63、..**.65)机器上的端口情况
tiup cluster display test-cluster
2)确认pd leader节点
tiup ctl:v4.0.12 pd -u ...61 member
tiup ctl:v4.0.12 pd -u ...61 member leader show
3)先开启非pd leader两个节点的防火墙,再把pd leader进行切换
tiup ctl:v4.0.12 pd -u ..**.61 member leader transfer {$pd-name}
4)确认防火墙状态
systemctl status iptables
5)打开iptables防火墙
systemctl start iptables
可能造成的风险:
在切换pd leader可能短暂出现tikv找不到pd节点,导致事务被 block,会对业务造成一定风险,影响时间在一个小时内,建议确认停止业务后进行操作
systemctl stop iptables
systemctl start iptables
iptables -I INPUT -p tcp --dport 4000 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
service iptables save
6)加入以下规则
iptables -I INPUT -s ...51 -p tcp -m tcp --dport 2379 -j ACCEPT
iptables -I INPUT -s ...53 -p tcp -m tcp --dport 2379 -j ACCEPT
iptables -I INPUT -s ...55 -p tcp -m tcp --dport 2379 -j ACCEPT
iptables -I INPUT -s ...61 -p tcp -m tcp --dport 2379 -j ACCEPT
iptables -I INPUT -s ...63 -p tcp -m tcp --dport 2379 -j ACCEPT
iptables -I INPUT -s ...65 -p tcp -m tcp --dport 2379 -j ACCEPT
iptables -I INPUT -s ...70 -p tcp -m tcp --dport 2379 -j ACCEPT
iptables -I INPUT -s ...75 -p tcp -m tcp --dport 2379 -j ACCEPT
iptables -I INPUT -s ...51 -p tcp -m tcp --dport 2380 -j ACCEPT
iptables -I INPUT -s ...53 -p tcp -m tcp --dport 2380 -j ACCEPT
iptables -I INPUT -s ...55 -p tcp -m tcp --dport 2380 -j ACCEPT
iptables -I INPUT -s ...61 -p tcp -m tcp --dport 2380 -j ACCEPT
iptables -I INPUT -s ...63 -p tcp -m tcp --dport 2380 -j ACCEPT
iptables -I INPUT -s ...65 -p tcp -m tcp --dport 2380 -j ACCEPT
iptables -I INPUT -s ...70 -p tcp -m tcp --dport 2380 -j ACCEPT
iptables -I INPUT -s ...75 -p tcp -m tcp --dport 2380 -j ACCEPT
iptables -I INPUT -s ...51 -p tcp -m tcp --dport 8250 -j ACCEPT
iptables -I INPUT -s ...53 -p tcp -m tcp --dport 8250 -j ACCEPT
iptables -I INPUT -s ...55 -p tcp -m tcp --dport 8250 -j ACCEPT
iptables -I INPUT -s ...61 -p tcp -m tcp --dport 8250 -j ACCEPT
iptables -I INPUT -s ...63 -p tcp -m tcp --dport 8250 -j ACCEPT
iptables -I INPUT -s ...65 -p tcp -m tcp --dport 8250 -j ACCEPT
iptables -I INPUT -s ...70 -p tcp -m tcp --dport 8250 -j ACCEPT
iptables -I INPUT -s ...75 -p tcp -m tcp --dport 8250 -j ACCEPT
iptables -I INPUT -s ...51 -p tcp -m tcp --dport 10080 -j ACCEPT
iptables -I INPUT -s ...53 -p tcp -m tcp --dport 10080 -j ACCEPT
iptables -I INPUT -s ...55 -p tcp -m tcp --dport 10080 -j ACCEPT
iptables -I INPUT -s ...61 -p tcp -m tcp --dport 10080 -j ACCEPT
iptables -I INPUT -s ...63 -p tcp -m tcp --dport 10080 -j ACCEPT
iptables -I INPUT -s ...65 -p tcp -m tcp --dport 10080 -j ACCEPT
iptables -I INPUT -s ...70 -p tcp -m tcp --dport 10080 -j ACCEPT
iptables -I INPUT -s ...75 -p tcp -m tcp --dport 10080 -j ACCEPT
3)保存当前规则
service iptables save
4)检查PD iptables情况(...61、...63、..**.65) :
iptables -L -n
5)集群验证:
[tidb@monitor ~]$ tiup cluster display test-cluster