給elasticsearch 5.X 安裝sql插件 並修復

給elasticsearch 5.X 安裝sql插件 並修復

1 人贊了文章

本文主題是介紹elasticsearch-sql插件的安裝方法 順便說一個該插件安裝過程中我發現存在安全隱患的地方,並分析其原因與解決辦法。

安裝正文開始

先簡單介紹一下elasticsearch(百度百科 其實就是著名的elk中的e)

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(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倍。

作者: 7kbstorm

歡迎來安全脈搏查看更多的乾貨文章和我們一起交流互動哦!

脈搏地址:secpulse.com/archives/7

微博地址:weibo.com/311057789/hom


推薦閱讀:

《中醫典海》、超星期刊、海研等資料庫伴你寒假好心情
Spring整合SequoiaDB SQL
八字資料庫---丁火日元
mysql查詢最近三個月的記錄

TAG:Elasticsearch | 資料庫 | SQL |