首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

给elasticsearch 5.X 安装sql插件 并修复安全隐患

点图有惊喜哦~

前言

本文主题是介绍elasticsearch-sql插件的安装方法 顺便说一个该插件安装过程中我发现存在安全隐患的地方,并分析其原因与解决办法。

安装正文开始

先简单介绍一下elasticsearch

elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

再简单介绍一下sql插件

项目git的地址

https://github.com/NLPchina/elasticsearch-sql

ElasticSearch的强大程度不用我多讲了,但是查询语法真是要命,各种匹配方式与查询语法,今天正好有个特殊需求,这时我想起了之前有人介绍过一款叫做sql的插件,它的功能就是能让我们用熟悉的sql语句查询Elasticsearch。

在GITHUB的介绍上,作者详细的介绍了插件的每个版本与es的版本对应,以及功能是否齐全。

同时作者在GITHUB也给出了在线安装方法

进入elasticsearch的目录 进入bin目录 执行安装语句 (windows同理)

以下为 在线与离线的安装方法以及卸载插件方法(第一句为在线安装 第二句为删除 第三句为本地离线安装)

如图所示 回显Installed便是安装成功了。

重点来了,那么在5.x和6.x 需要一项额外配置

需要下载 es-sql-site-standalone.zip

下载后将其解压至任意目录 进入site-server目录

执行npm install express –save 安装所需依赖文件

执行后可以看见存在以下几个文件

site_configuration.json文件为配置文件

内容为:

{

"port":8080

}

node-server.js文件为程序文件

内容为:

var express = require('express');

var app = express();

app.use(express.static('../_site'));

app.get('/', function (req, res) {

res.sendFile("../_site/" + "index.html" );

})

var fs = require('fs');

var siteConfiguration = JSON.parse(fs.readFileSync('site_configuration.json', 'utf8'));

var server = app.listen(siteConfiguration.port)

可以修改为任意端口

此时执行 node node-server.js 后访问你设置的端口已经可以正常使用了。

安装过程中发现的安全隐患

按照github提供的方法进行安装、配置、使用到此应该结束了,但因为我的主业是信息安全,我心中突然闪出几个问题:

1、如此监听那不是绑定了0.0.0.0?

2、是什么原因形成的?

3、这样是否会直接将sql插件暴露给内网?

4、如有公网ip那不是直接暴露给公网了?

正常来说,一个程序默认的安全设置应是存在的,如不存在就会酿成mongodb那样的血案,那一定会造成信息泄露甚至数据全部丢失。

想到这里 我验证了一下我的想法,因我司elasticsearch为确保安全不接入公网,所以我在测试环境重新搭建了一个,果然证实了我的想法:

1、确实绑定了 0.0.0.0

2、形成原因:插件为什么默认没有认证,是因为使用了expressjs(https://expressjs.com) 这个库建的一个简单的web server导致的.

3、如没有其他waf限制,确实会将操作数据的权限暴露给内网与公网.

结论:如直接按照默认给出的方法操作那将会造成极大的安全隐患(不知道有多少人按这种默认方法安装了 希望你家数据没丢)。

解决方案

将node-server.js的最后一句

var server = app.listen(siteConfiguration.port)

修改为

var server = app.listen(siteConfiguration.port, '127.0.0.1')

将监听地址绑定为127.0.0.1 如此便将应用限制为本机访问了

最后思考

其实因为elasticsearch安全模块收费,而默认使用时无默认安全设置(类似mongodb),所以多数elasticsearch都对外封闭了他的默认端口9200(或做了验证 常见的401 或ip验证) 但这个插件会为我们带来惊喜。

到底有多少数据服务器存在这个问题呢?附图一张,可见数据服务器拥有外网地址的并不多,但我相信在内网存在该隐患的情况会比外网多N倍。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180714G0YMEG00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券