你的 Elasticsearch 在裸奔吗?

标签: dev | 发表时间:2019-01-13 00:00 | 作者:
出处:http://itindex.net/relian

题记

安全事件频发,


2018上半年的群友的讨论:

安全隐患划重点
1、印度:没有设置Elasticsearch集群安全权限;
2、婚庆网站:Elasticsearch服务器暴露到公网。
3、群友:9200端口映射到外网。

保障Elasticsearch单节点或者集群网络 安全必须提上日程!!

该如何保障Elasticsearch集群的网络安全呢?

1、不要将Elasticsearch暴露到Internet

必须强调这一点。即使在开发和测试中,也没有理由让您的集群暴露于公共IP。

异地联调,外网访问的场景各大公司都存在,但请千万别 “裸奔”

1.1 防火墙:限制公共端口

限制9200—— 集群对外访问端口

   

1iptables -A INPUT -i eth0 -p tcp --destination-port 9200 -s {PUBLIC-IP-ADDRESS-HERE} -j DROP

限制9300——集群内部通信端口

   

1iptables -A INPUT -i eth0 -p tcp --destination-port 9300 -s {PUBLIC-IP-ADDRESS-HERE} -j DROP

限制5601——kibana访问端口

   

1iptables -A INPUT -i eth0 -p tcp --destination-port 5601 -s {PUBLIC-IP-ADDRESS-HERE} -j DROP

在此之后你可以放松一下! Elasticsearch将无法再从Internet访问。

1.2仅将Elasticsearch端口绑定到内网专有IP地址

将elasticsearch.yml中的配置更改为仅绑定到私有IP地址或将单个节点实例绑定到环回接口:

   

1network.bind_host: 127.0.0.1

1.3在Elasticsearch和客户端服务之间添加专用网络

如果您需要从另一台计算机访问Elasticsearch,请通过VPN或任何其他专用网络连接它们。 

在两台机器之间建立安全隧道的快速方法是通过SSH隧道:

   

1ssh -Nf -L 9200:localhost:9200 user@remote-elasticsearch-server

然后,您可以通过SSH隧道从客户端计算机访问Elasticsearch

   

1curl http://localhost:9200/_search

2、将身份验证和SSL / TLS添加到Elasticsearch

有几个开源和免费解决方案提供Elasticsearch访问身份验证,但如果你想要快速和简单的东西,这里是如何使用Nginx自己做

2.1 Nginx 自己生成

步骤1: 生成密码文件
   

1printf "esuser:$(openssl passwd -crypt MySecret)\n" > /etc/nginx/passwords

步骤2:

如果您没有官方证书,则生成自签名SSL证书…

   

1sudo mkdir /etc/nginx/ssl
2
3sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout
4/etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

步骤3:

使用SSL添加代理配置并激活基本身份验证到/etc/nginx/nginx.conf
(注意我们期望/ etc / nginx / ssl /中的SSL证书和密钥文件)。 例:

   

1# define proxy upstream to Elasticsearch via loopback interface in 
2http {
3  upstream elasticsearch {
4    server 127.0.0.1:9200;
5  }
6}
7
8server {
9  # enable TLS
10  listen 0.0.0.0:443 ssl;
11  ssl_certificate /etc/nginx/ssl/nginx.crt;
12  ssl_certificate_key /etc/nginx/ssl/nginx.key
13  ssl_protocols TLSv1.2;
14  ssl_prefer_server_ciphers on;
15    ssl_session_timeout 5m;
16    ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
17
18    # Proxy for Elasticsearch 
19    location / {
20            auth_basic "Login";
21            auth_basic_user_file passwords;
22            proxy_set_header X-Real-IP $remote_addr;
23            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
24            proxy_set_header Host $http_host;
25            proxy_set_header X-NginX-Proxy true;
26            # use defined upstream with the name "elasticsearch"
27            proxy_pass http://elasticsearch/;
28            proxy_redirect off;
29            if ($request_method = OPTIONS ) {
30                add_header Access-Control-Allow-Origin "*"; 
31            add_header Access-Control-Allow-Methods "GET, POST, , PUT, OPTIONS";
32            add_header Access-Control-Allow-Headers "Content-Type,Accept,Authorization, x-requested-with"; 
33            add_header Access-Control-Allow-Credentials "true"; 
34            add_header Content-Length 0;
35            add_header Content-Type application/json;
36            return 200;
37        } 
38}

重新启动Nginx并尝试通过访问Elasticsearch

   

1https://localhost/_search

2.2 Elasticsearch官方安全工具xpack

6.3版本之后已经集成在一起发布, 无需额外安装
但属于收费功能,免费试用1个月。
如果是土豪用户,不妨一买。

2.3 Elasticsearch的第三方安全插件

您可以安装和配置Elasticsearch的几个免费安全插件之一以启用身份验证:

  1. Github上提供了Elasticsearch的 ReadonlyREST插件。
    它提供不同类型的身份验证,从基本到LDAP,以及索引和操作级访问控制。
    git地址:http://t.cn/RZpF03g

  2. SearchGuard是Elasticsearch的免费安全插件(部分高级功能收费),包括基于角色的访问控制和SSL / TLS加密的节点到节点通信。
    每个Elasticsearch集群都可以使用其他企业功能,如LDAP身份验证或JSON Web令牌身份验证。

3、审计和警报

与保存敏感数据的任何类型的系统一样,您必须非常密切地 监控它。
这意味着不仅要监控其各种 指标(其突然变化可能是问题的早期迹象),还要观察其 日志

许多监控供应商都支持Elasticsearch。应该收集日志并将其实时发送到日志管理服务,其中需要设置 警报以监视任何 异常或可疑活动等。

对指标和日志发出警报意味着您将尽早发现安全漏洞,并采取适当的措施,希望能够防止进一步的损害。

4、备份和恢复数据

Elasticdump是一个非常方便的工具,可以根据Elasticsearch查询备份/恢复或重新索引数据。

要备份完整索引,Elasticsearch快照API`是正确的工具。 快照API提供了创建和恢复整个索引,存储在文件或Amazon S3存储桶中的快照的操作。

我们来看一下Elasticdump和快照备份和恢复的一些示例。

1)安装包含 node package manager的elasticdump包。

   

1 npm i elasticdump -g

2)将查询语句备份为zip文件。

   

1elasticdump --input='http://username:password@localhost:9200/myindex' --searchBody '{"query" : {"range" :{"timestamp" : {"lte": 1483228800000}}}}' --output=$ --limit=1000 | gzip > /backups/myindex.gz

3)从zip文件中恢复。

   

1zcat /backups/myindex.gz | elasticdump --input=$ --output=http://username:password@localhost:9

5、使用最新的Elasticsearch版本

这是一般的最佳实践,因为在旧版本中,版本5.x中存在特定的漏洞。如果您仍在使用1.x或2.x,请务必 禁用动态脚本。 Elasticsearch允许使用脚本来评估自定义表达式,但正如Elastic所记录的那样,使用non-sandboxed 语言可能是一个问题。

当前最新版本6.5.x,新增了space功能,安全+角色划分更增强一步!


参考:

http://t.cn/EqqpjRw

http://t.cn/RDWl15I

http://t.cn/EGp38hU

http://t.cn/EGrHXkV


推荐:

让Elasticsearch飞起来!——性能优化实践干货

重磅|死磕Elasticsearch方法论认知清单(国庆更新版)

加入知识星球,更短时间更快习得更多干货!


相关 [elasticsearch 裸奔] 推荐:

你的 Elasticsearch 在裸奔吗?

- - IT瘾-dev
2018上半年的群友的讨论:. 1、印度:没有设置Elasticsearch集群安全权限;. 2、婚庆网站:Elasticsearch服务器暴露到公网. 3、群友:9200端口映射到外网. 保障Elasticsearch单节点或者集群网络 安全必须提上日程. 该如何保障Elasticsearch集群的网络安全呢.

[译]elasticsearch mapping

- - an74520的专栏
es的mapping设置很关键,mapping设置不到位可能导致索引重建. 请看下面各个类型介绍^_^. 每一个JSON字段可以被映射到一个特定的核心类型. JSON本身已经为我们提供了一些输入,支持 string,  integer/ long,  float/ double,  boolean, and  null..

Elasticsearch as Database - taowen - SegmentFault

- -
【北京上地】滴滴出行基础平台部招聘 Elasticsearch 与 Mysql binlog databus 开发工程师. 内推简历投递给: taowen@didichuxing.com. 推销Elasticsearch. 时间序列数据库的秘密(1)—— 介绍. 时间序列数据库的秘密(2)——索引.

ElasticSearch 2 的节点调优(ElasticSearch性能)

- - 行业应用 - ITeye博客
一个ElasticSearch集群需要多少个节点很难用一种明确的方式回答,但是,我们可以将问题细化成一下几个,以便帮助我们更好的了解,如何去设计ElasticSearch节点的数目:. 打算建立多少索引,支持多少应用. elasticsearch版本: elasticsearch-2.x. 需要回答的问题远不止以上这些,但是第五个问题往往是容易被我们忽视的,因为单个ElasticSearch集群有能力支持多索引,也就能支持多个不同应用的使用.

elasticsearch的javaAPI之query

- - CSDN博客云计算推荐文章
elasticsearch的javaAPI之query API. the Search API允许执行一个搜索查询,返回一个与查询匹配的结果(hits). 它可以在跨一个或多个index上执行, 或者一个或多个types. 查询可以使用提供的 query Java API 或filter Java API.

Elasticsearch基础教程

- - 开源软件 - ITeye博客
转自:http://blog.csdn.net/cnweike/article/details/33736429.     Elasticsearch有几个核心概念. 从一开始理解这些概念会对整个学习过程有莫大的帮助.     接近实时(NRT).         Elasticsearch是一个接近实时的搜索平台.

ElasticSearch索引优化

- - 行业应用 - ITeye博客
ES索引的过程到相对Lucene的索引过程多了分布式数据的扩展,而这ES主要是用tranlog进行各节点之间的数据平衡. 所以从上我可以通过索引的settings进行第一优化:. 这两个参数第一是到tranlog数据达到多少条进行平衡,默认为5000,而这个过程相对而言是比较浪费时间和资源的. 所以我们可以将这个值调大一些还是设为-1关闭,进而手动进行tranlog平衡.

elasticsearch集群搭建

- - zzm
之前对于CDN的日志处理模型是从 . logstash agent==>>redis==>>logstash index==>>elasticsearch==>>kibana3,对于elasticsearch集群搭建,可以把索引进行分片存储,一个索引可以分成若干个片,分别存储到集群里面,而对于集群里面的负载均衡,副本分配,索引动态均衡(根据节点的增加或者减少)都是elasticsearch自己内部完成的,一有情况就会重新进行分配.

Elasticsearch集群入门

- - 编程语言 - ITeye博客
欢迎来到Elasticsearch的奇妙世界,它是优秀的全文检索和分析引擎. 不管你对Elasticsearch和全文检索有没有经验,都不要紧. 我们希望你可以通过这本书,学习并扩展Elasticsearch的知识. 由于这本书也是为初学者准备的,我们决定先简单介绍一般性的全文检索概念,接着再简要概述Elasticsearch.

Elasticsearch 学习笔记

- - 研发管理 - ITeye博客
安装  Elasticsearch. 1:解压下载的安装包 elasticsearch-1.7.2.zip. 修改  node.name: es(集群状态名字一致). 2:在https://github.com/elasticsearch/elasticsearch-servicewrapper下载该插件后,解压缩.