目录
6. 配置ElasticSearch 的search-guard插件
6.6 将Search Guard语言配置在ElasticSearch中
众所周知,ElasticSearch设计之初就定位在纯私网环境而不做权限和安全控制呢。ElasticSearch如果设置不当,则存在较为严重的安全风险!有两种访问ElasticSearch的方式:使用默认端口为9300的TCP模式和使用默认端口为9200的HTTP模式。然而在同ElasticSearch服务器进行通信的过程中,通信流量是明文形式的,没有加密;更为严重的是,如果不做任何防护措施地将ElasticSearch暴露在公网上,那么对它的访问将没有任何安全认证,任何连接到服务器端口上的人,都可以调用相关API对服务器上的数据进行任意的增删改查。
安全策略网络层除却“内鬼”的因素,攻击基本都是通过外部网络,所以这里是保障ElasticSearch安全的第一道屏障。相信大家都有自己的网络安全策略,硬件防火墙也好,软件防火墙也罢,按照自己的需求做好设置和维护即可。
所以要避免黑客入侵的最有力的手段,也是最后一层屏障,那就是用户及权限认证。ElasticSearch本身没有用户及权限认证体系,虽然官方提供了自己的权限管理系统—— Shield, 但是它——收费!本篇文章就是介绍如何使用Search Guard对ElasticSearch集权做权限认证。
1. 背景
ElasticSearch集群在暴露了一个节点的IP和端口就可以对整个集群进行各种操作,删索引、改数据等。在重要的项目应用中,需要防范这一点。
目前常见的安全防范方式有:
- X-Pack ElasticSearch Security,收费License
- Search Guard,免费开源
2. 软件介绍
2.1 ElasticSearch
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
ElasticSearch使用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。
2.2 Search Guard
Search Guard是ElasticSearch的安全插件,它支持ES客户端认证、后端系统授权,并增加审计日志,提供文档/字段级别的安全保障。
Search Guard中,所有的基础安全特性都是免费的,但如果想在商业项目中使用一些企业级安全特性,需要付费得到Search Guard的官方授权。
- 基础特性:
- 节点-节点间的加密(SSL/TSL)
- 安全的REST访问(HTTPS)
- 灵活的REST访问控制(User/Role; aliases&indices&types)
- HTTP基础认证
- HTTP代理认证
- HTTP SSL/CLIENT-CERT认证
- XFF支持
- 内部认证/授权
- 匿名登录/未经验证的访问
- 用户模仿
- 企业级特性:
3. 架构规划
- 操作系统:CentOS 6.8
- ElasticSearch 6.5.4
- Search Guard 25.1
- 主机地址:*.*.*.1(node-1)、*.*.*.2(node-2)、*.*.*.3(node-3)
4. 软件下载地址
- Elasticsearch:https://www.elastic.co/downloads
- Search Guard:https://github.com/floragunncom/search-guard/tree/es-6.5.4
5. 搭建ElasticSearch集群
5.1 上传软件包并解压缩
使用FTP工具上传elasticsearch-6.5.4.zip至~目录。使用以下命令解压缩:
[node-1@localhost ~]$ tar -zxvf elasticsearch-6.5.4.zip |
5.2 同步时间
三个节点都需要执行:
[node-1@localhost ~]$ ntpdate time.windows.com |
5.3 开放ElasticSearch端口
三个节点都需要执行:
-
(1)检查防火墙是否打开:
firewall-cmd –state |
如果防火墙是关闭的,跳过该步骤。
(2)开放Elasticsearch必要的端口:
开放9200端口:
firewall-cmd --zone=public --permanent --add-port=9200/tcp |
开放9300端口
firewall-cmd --zone=public --permanent --add-port=9300/tcp |
(3)重启防火墙:
firewall-cmd –reload |
5.4 修改系统参数
(1)修改/etc/sysctl.conf文件:
vim /etc/sysctl.conf编辑文件,加入以下内容:
# 开启对于TCP时间戳的支持,若该项设置为0,则下面一项设置不起作用 net.ipv4.tcp_timestamps = 1 # 表示开启TCP连接中TIME-WAIT sockets的快速回收 net.ipv4.tcp_tw_recycle = 1 # 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭 net.ipv4.tcp_syncookies = 1 |