点图有惊喜哦~
前言
本文主题是介绍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倍。
领取专属 10元无门槛券
私享最新 技术干货