背景
在阿里云部署了一台 ElasticSearch 节点,9200 端口直接暴露在了公网下,结果三天两头受到攻击,访问 kibana 老出现 redirect 重定向问题不能访问,查看日志索引都被人删除了,所以怀疑可能是因为被人恶意删除了,由此决定使用 xpack安全组件来保护 ElasticSearch。
- ElasticSearch 默认安装后,本身不提供任何安全保障,这也是被人攻击的原因之一
- 我们为了公网可以访问,配置了 server.host 为 0.0.0.0 这也是被人攻击的原因之一
xpack
X-Pack 已经作为 Elastic 公司单独的产品线,集成了 Shield, Watcher, Marvel, Graph, 和 reporting 等安全组件,有着非常强大的功能。目前 xpack 已经默认被安装在了 7.0 以上的版本中,并且支持一些功能的免费使用,比如 用户登录权限校验等基础功能。
- 7.0 之上的版本默认安装了 xpack 组件,无需再次安装。
xpack内置的用户
用户 | 角色 |
---|---|
elastic | 超级管理员 |
apm_system | 为 apm 创建的用户 |
kibana | 为kinana创建的用户 |
logstash_system | 为logstash创建的用户 |
beats_system | 为 beats 创建的用户 |
kiremote_monitoring_userana | 为 monitoring 创建的用户 |
xpack默认内置了这些用户,在设置xpack的时候,需要为这些用户设置一个默认值。
启动参数
Setting | Description |
---|---|
xpack.security.enabled | 设置为 false 可以关闭 X-Pack security 功能。需要在 elasticsearch.yml 。 |
xpack.monitoring.enabled | 设置为 false 可以关闭 X-Pack monitoring 功能。 需要在elasticsearch.yml 。 |
xpack.graph.enabled | 设置为 false 可以关闭 X-Pack graph 功能。 需要在elasticsearch.yml。 |
xpack.watcher.enabled | 设置为 false 可以关闭 Watcher 功能。 只需要在 elasticsearch.yml 配置。 |
xpack.reporting.enabled | 设置为 false 可以关闭 reporting 功能。 只需要在 kibana.yml 配置。 |
ElasticSearch 启用 XPACK
ElasticSearch 启用 xpack 还是很简单的,只需要一行命令就可以。
bin/elasticsearch -E node.name=node-1 -E cluster.name=cluster -E path.data=node1_data -E xpack.security.enabled=true
只需要在启动命令中添加 -E 参数 xpack.security.enabled=true,就会启动XPACK
启动完成之后,我们还需要初始化一下密码
[elasticsearch-7.3.2]$ bin/elasticsearch-setup-passwords interactive
future versions of Elasticsearch will require Java 11; your Java version from [/home/process/jdk/jdk1.8.0_161/jre] does not meet this requirement
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
出现如上结果证明设置密码成功。
当我们再次登录的时候就需要输入密码了。
kibana 配置 xpack
kibana 只需要修改配置文件,将密码打开便可以,这里的设置是当初xpack设置的密码。
vim config/kibana.yml
# 修改 kibana.yml
elasticsearch.username: "kibana"
elasticsearch.password: "xxxx"
然后重启kibana,可以看到需要访问去登录kibana了。