ELK开启安全策略
背景
近期,我们的开发系统在一次客户漏洞扫描中被检测出存在高危漏洞,其中一项便是Elasticsearch(ES)未配置用户名密码访问。尽管此前我们的ES集群主要作为基础设施在内网运行,并未直接对外暴露,但此次扫描结果明确指出了潜在的安全风险。为了消除这些隐患,并进一步提升系统的整体安全性,我们决定对ELK Stack进行全面的安全加固。
注意,本篇不会介绍elk相关的部署操作,而是基于已经部署好的elk服务,进行安全配置,关于elk的部署,可以参考官方文档或者其他博客,笔者也曾出过一篇相关的博客,地址:https://xie.infoq.cn/article/809dd91a0ec9d6e23c3db67dc
ElasticSearch相关
配置证书
生成证书
使用es自带的cert工具生成证书
# 创建ca
./bin/elasticsearch-certutil ca
执行此命令后,系统会提示您输入一个密码,请按需输入并牢记。如果忘记密码,将无法使用该CA证书。
如果按默认保存,您将获得一个p12格式的CA证书文件(elastic-stack-ca.p12)。您可以通过openssl查看其包含的信息:
可以通过openssl查看其包含的信息,此命令将显示p12证书文件的详细信息,包括证书链和私钥。请注意,输出内容可能较多。
openssl pkcs12 -info -nodes -in elastic-stack-ca.p12
您还可以查看CA证书的过期时间:
openssl pkcs12 -in elastic-stack-ca.p12 -nodes -nokeys -clcerts | openssl x509 -enddate -noout
接下来,利用已创建的CA证书生成ES服务所需的加密证书:
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
执行此命令后,同样会提示您输入密码。完成后,您将获得ES服务所需的证书文件(elastic-certificates.p12)。
同样的,可以使用刚才查看证书内容和过期时间的方法查看一下这个证书的信息,该文件就是我们下面需要放到es的配置文件里,进行传输层加密的证书。
提取CA证书
p12证书是一个类似加密文件的文件类型,不能直接再kibana,logstash等客户端使用,需要需要将其提取成crt文件
openssl pkcs12 -in config/certs/elastic-certificates.p12 -cacerts -nokeys -out config/certs/elastic-ca.crt
注意,关于证书的格式大家可以自行了解一下,p12格式在多数场景下是不能直接用的,需要解压转换成crt或者pem格式。
生成提取证书的操作只执行一次就行,然后将生成的证书复制到集群内的各个节点
授权
完成证书的生成和提取操作后,需要将证书文件复制到集群各个节点,然后进行授权操作,一般是对证书所在路径和文件进行授权就可以,基本就是下面这几个语句
注意,我这里的路径写的是相对路径,操作时要确保你在证书所在目录的主路径里,比如/usr/elasticsearch等。
sudo chown -R elsearch:elsearch /config/certs/*
chmod 600 /home/elastic/elasticsearch-7.14.1/config/certs/*
sudo chown -R elsearch:elsearch /config
chmod 750 /config
同步证书
将准备好的证书文件同步到其他服务器,注意,要尽量确保每个节点的es服务存储路径规则一致,这主要是为了运维方便,如果不一致,配置证书的时候要小心一点,别弄错了。
# 注意生产环境如果有安全要求,可以使用更安全可靠的方式进行同步
scp -r ./config/certs 192.168.0.188:/opt/elastic/config/certs
scp -r ./config/certs 192.168.0.189:/opt/elastic/config/certs
至此,准备工作完成
修改配置
修改每个节点的配置文件,在elasticsearch.yml文件中添加以下安全配置: