参考文档:Configure security for the Elastic Stack | Elasticsearch Guide [7.17] | Elastic
ES敏感信息泄露的原因
- Elasticsearch在默认安装后,不提供任何形式的安全防护
- 不合理的配置导致公网可以访问ES集群。比如在elasticsearch.yml文件中,server.host配置为0.0.0.0
免费的方案
- 设置nginx反向代理
- 安装免费的Security插件
- Search Guard : Security and Alerting for Elasticsearch and Kibana | Search Guard
- readonlyrest: ReadonlyREST Security and Multi-tenancy for Elasticsearch and Kibana
- X-Pack的Basic版
- 从ES 6.8开始,Security纳入x-pack的Basic版本中,免费使用一些基本的功能
集群内部安全通信
ElasticSearch集群内部的数据是通过9300进行传输的,如果不对数据加密,可能会造成数据被抓包,敏感信息泄露。
解决方案: 为节点创建证书
TLS 协议要求Trusted Certificate Authority (CA)签发x.509的证书。证书认证的不同级别:
- Certificate ——节点加入需要使用相同CA签发的证书
- Full Verification——节点加入集群需要相同CA签发的证书,还需要验证Host name 或IP地址
- No Verification——任何节点都可以加入,开发环境中用于诊断目的
1)生成节点证书
首先进入到 es 文件夹
执行命令:
# 为集群创建一个证书颁发机构
bin/elasticsearch-certutil ca
中间会出现两个提示,直接回车即可
继续执行:
# 为集群中的每个节点生成证书和私钥
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
期间也会有几个提示,直接回车
然后将生成的文件移动到 config 下
# 移动到config目录下
mv *.p12 config/
然后 config 文件夹中可以看到多了两个文件
将如上命令生成的两个证书文件拷贝到另外两个节点作为通信依据。
注意换成自己对应的用户名和对应的文件夹
# 拷贝到另外两个节点
scp config/*.p12 heyue@192.168.177.202:/home/heyue/es/elasticsearch-7.17.3/config
scp config/*.p12 heyue@192.168.177.203:/home/heyue/es/elasticsearch-7.17.3/config
2)配置节点间通信
三个ES节点增加如下配置:
## elasticsearch.yml 配置
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
xpack.security.enabled: true # 开启xpack认证机制
配置完成后,记得重启 es 如果后台启动,bin/elasticsearch 后面加上 -d
然后再次访问,发现需要用户密码登录了
3)为内置账号添加密码
ES中内置了几个管理其他集成组件的账号即:apm_system, beats_system, elastic, kibana,
logstash_system, remote_monitoring_user,使用之前,首先需要添加一下密码。
bin/elasticsearch-setup-passwords interactive
这里我都设置了 123456,可以根据自己情况 按需修改
- interactive:给用户手动设置密码。
- auto:自动生成密码。
4)测试:
输入密码后可以看到配置完成
5)配置Kibana
开启了安全认证之后,kibana连接es以及访问es都需要认证。
修改kibana.yml
elasticsearch.username: "kibana_system"
elasticsearch.password: "123456"
然后记得重启
# 查找 kibana 进程
netstat -tunlp | grep 5601
#重启,注意进入到 kibana 文件包中
nohup bin/kibana &
6)配置cerebro
修改配置文件
vim conf/application.conf
hosts = [
{
host = "http://192.168.65.174:9200"
name = "es-cluster"
auth = {
username = "elastic"
password = "123456"
}
}
]
配置完成后记得重启
# 查找 kibana 进程
netstat -tunlp | grep 5601
#重启
nohup bin/cerebro > cerebro.log &
每天进步一点点,加油