Elasticsearch教程,Elasticsearch安全篇,通過Nginx http basic 限制訪問

Elasticsearch教程,Elasticsearch安全篇,通過Nginx http basic 限制訪問

Elasticsearch教程,Elasticsearch安全篇,通過Nginx http basic 限制訪問

信息發佈:soゝso 發佈日期:2017-02-10 11:24 熱度:370 分享到:

前言:

用  Elasticsearch  的同學都知道,最近一段時間  Elasticsearch  像中毒一樣全國、全世界都發生的  Elasticsearch  被刪庫,有的甚至被加密後敲詐比特幣。

當然我也難逃刪庫的命運,我200GB 的爬蟲數據被刪,我所在的公司只開放了公司IP 才能訪問,也被刪除了整個庫。

那麼問題來了,我們爲什麼要開放外網訪問Elasticsearch?無外乎以下幾點原因。

  1. 一些插件監聽使用,方便及時瞭解線上數據的情況,比如說  head  插件等。
  2. 爲了HTTP 直接訪問,有的同學考慮到通過後臺TCP 查詢,然後返回數據,還不如直接以Elasticsearch 作爲服務直接  HTTP  查詢提升效率。
  3. 還有一些同學是因爲Elasticsearch 和被訪問的工程不在一個局域網內。
  4. 。。。。等

我的解決方案:

我是Centos Linux 系統,我直接用  iptables  限制  IP  訪問,雖然不華麗,但是明顯解決了。有個弊端就是在家裏由於北方的寬帶  IP  老變,經常要去加IP規則,比較痛苦。

但是我收到了阿里發的“【高危漏洞通告】  ElasticSearch  未授權訪問漏洞”以下內容郵件:

  1. 尊敬的 ser****@sojson.com:
  2. 您好,接上級主管部門通知,您的主機123.**.**.**安裝有elasticsearch,目前elasticsearch有部分漏洞已被公佈,存在信息泄露的隱患,請及時整改。如無法整改,經主管單位覈實後,根據網絡安全法的規定,會有關停主機的風險。
  3. 以下整改措施僅供參考:
  4. 一、監管部門加固方案
  5. (一)elasticsearch自身安全設置
  6. 1、爲elasticsearch增加登錄驗證,可以使用官方推薦的shield插件,該插件爲收費插件,可試用30天,免費的可以使用elasticsearch-http-basic,searchguard插件。插件可以通過運行Biplugin install [github-name]/repo-name。同時需要注意增加驗證後,請勿使用弱口令。
  7. 2、架設nginx反向代理服務器,並設置http basic認證來實現elasticsearch的登錄認證。
  8. 3、默認開啓的9200端口和使用的端口不對外公佈,或架設內網環境。
  9. 4、elasticsearch 早期版本在“CVE中文漏洞信息庫”網站上已有部分漏洞被披露,建議使用1.7.1以上版本或使用最新版本程序。
  10. (二)大數據安全
  11. 1、設置HADOOP爲基礎的大數據信息系統,只允許或通過特定的IP進行訪問,同時該IP地址進行安全設置(使用防病毒程序,設置複雜密碼,安裝最新漏洞補丁,使用應用程序防火牆等)
  12. 2、爲NOSQL這類大數據數據庫(如mongodb,redis)設置複雜密碼
  13. 3、在大數據信息系統建設完畢後及時進行登記保護測評,並定期對該類大數據信息系統進行安全檢查。
  14. (三) 服務器安全設置
  15. 1、在服務器端安裝系統防護軟件,實現對操作系統加固和WEB業務系統及網站的防護監測,實現對信息系統的立體化監測和防護
  16. 2、對服務器中開啓的服務(如數據庫、FTP、web服務等)設置複雜密碼,並定期更換,增加系統安全性
  17. 3、及時更新服務器漏洞補丁,防止漏洞被利用
  18. 4、在互聯網出口設置防火牆訪問策略,只允許特定需要對外訪問的端口通過,其他異常訪問全部阻斷
  19. 5、對重要信息系統服務、數據信息、資產等進行黑白名單和權限訪問設置。

所以我就按照Email內容着手去做安全。

首先收費的shield 肯定是排除的,其次Elasticsearch-http-basic 也隨之排除,因爲沒我對應的版本,詳細對應版本請看下面表格:

Version Mapping:

Http Basic Plugin elasticsearch
v1.5.1(master) 1.5.1, 1.5.2, 1.6.0, 1.7.0
v1.5.0 1.5.0
v1.4.0 1.4.0
v1.3.0 1.3.0
v1.2.0 1.2.0
1.1.0 1.0.0
1.0.4 0.90.7

github地址:https://github.com/Asquera/elasticsearch-http-basic

最後選用方案是比較簡單的,採用Nginx http-basic ,我是採用域名的方式訪問,隱蔽了一層。

Nginx Http-basic 方案步驟實施

一、選用一個域名,並且配置轉發。

  1. upstream es.sojson.com{
  2. server 127.0.0.1:9981 weight=1 max_fails=2;
  3. server 127.0.0.1:9982 weight=1 max_fails=2;
  4. server 127.0.0.1:9983 weight=1 max_fails=2;
  5. server 127.0.0.1:9984 weight=1 max_fails=2;
  6. server 127.0.0.1:9985 weight=1 max_fails=2;
  7. }
  8. location ~* / {
  9. proxy_set_header Host $host;
  10. proxy_set_header X-Real-IP $remote_addr;
  11. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  12.  
  13. proxy_set_header Upgrade $http_upgrade;
  14. proxy_set_header Connection "upgrade";
  15.  
  16. if ($host ~* es\.sojson\.com) {
  17. proxy_pass http://es.sojson.com;
  18. }
  19. }

因爲我五個點都加了插件,所以可以做個負載均衡。

二、配置帳號密碼訪問方式。

  1. location ~* / {
  2. proxy_set_header Host $host;
  3. proxy_set_header X-Real-IP $remote_addr;
  4. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  5.  
  6. proxy_set_header Upgrade $http_upgrade;
  7. proxy_set_header Connection "upgrade";
  8.  
  9. #關鍵點,配置帳號密碼
  10. auth_basic "login";#提示信息
  11. auth_basic_user_file /usr/local/nginx/conf/vhosts/password/es; #密碼文件(注意最好別挑事,直接寫絕對路徑,別相對路徑)
  12. autoindex on;
  13.  
  14. if ($host ~* es\.sojson\.com) {
  15. proxy_pass http://es.sojson.com;
  16. }
  17. }

三、配置密碼帳號文件。

上面第二點配置中有一個auth_basic_user_file  選項,這個選項就是配置的密碼訪問規則。密碼是採用Crypt (all Unix servers)  方式密的,本站有生成工具:http://www.sojson.com/htpasswd.html。如下圖:

然後把生成的內容複製到上面配置的路徑文件中/usr/local/nginx/conf/vhosts/password/es;

  1. vi /usr/local/nginx/conf/vhosts/password/es

然後把生成的admin:PJdMvp0Utzclm 插入進去,保存之前看前面有沒有丟了字母,我老會丟一個第一個字母,導致坑了一會。保存退出重啓  Nginx  即可。

四、測試訪問

訪問之前配置好的域名es.sojson.com 。出現以下畫面後輸入配置好的帳號密碼(明文)測試通過。

五、關閉外網訪問。

  1. elasticsearch$ vi config/elasticsearch.yml

然後修改部分配置,只需要配置network.host : 127.0.0.1 即可

  1. #network.publish_host: 0.0.0.0
  2. #networt.bind_host: 0.0.0.0
  3. #network.host: 0.0.0.0
  4. #只要配置這個即可
  5. network.host: 127.0.0.1
  6. #network.publish_host: 127.0.0.1

重啓  Elasticsearch  ,打完收工。想要更安全一點,可以再加上  iptables  ,然後再加上訪問頻率限制,防止暴力破解。

本文主題

Elasticsearch Elasticsearch安全 Elasticsearch教程 Nginx iptables

版權所屬:SO JSON 在線工具

原文地址:http://www.sojson.com/blog/213.html

轉載時必須以鏈接形式註明原始出處及本聲明。

發佈了124 篇原創文章 · 獲贊 53 · 訪問量 87萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章