Elasticsearch教程,Elasticsearch安全篇,通過Nginx http basic 限制訪問
Elasticsearch教程,Elasticsearch安全篇,通過Nginx http basic 限制訪問
信息發佈:soゝso 發佈日期:2017-02-10 11:24 熱度:370 分享到:
前言:
用 Elasticsearch 的同學都知道,最近一段時間 Elasticsearch 像中毒一樣全國、全世界都發生的 Elasticsearch 被刪庫,有的甚至被加密後敲詐比特幣。
當然我也難逃刪庫的命運,我200GB 的爬蟲數據被刪,我所在的公司只開放了公司IP 才能訪問,也被刪除了整個庫。
那麼問題來了,我們爲什麼要開放外網訪問Elasticsearch?無外乎以下幾點原因。
- 一些插件監聽使用,方便及時瞭解線上數據的情況,比如說 head 插件等。
- 爲了
HTTP
直接訪問,有的同學考慮到通過後臺TCP
查詢,然後返回數據,還不如直接以Elasticsearch
作爲服務直接 HTTP 查詢提升效率。 - 還有一些同學是因爲
Elasticsearch
和被訪問的工程不在一個局域網內。 - 。。。。等
我的解決方案:
我是Centos Linux
系統,我直接用 iptables
限制 IP 訪問,雖然不華麗,但是明顯解決了。有個弊端就是在家裏由於北方的寬帶 IP
老變,經常要去加IP規則,比較痛苦。
但是我收到了阿里發的“【高危漏洞通告】 ElasticSearch 未授權訪問漏洞”以下內容郵件:
尊敬的 ser****@sojson.com:
您好,接上級主管部門通知,您的主機123.**.**.**安裝有elasticsearch,目前elasticsearch有部分漏洞已被公佈,存在信息泄露的隱患,請及時整改。如無法整改,經主管單位覈實後,根據網絡安全法的規定,會有關停主機的風險。
以下整改措施僅供參考:
一、監管部門加固方案
(一)elasticsearch自身安全設置
1、爲elasticsearch增加登錄驗證,可以使用官方推薦的shield插件,該插件爲收費插件,可試用30天,免費的可以使用elasticsearch-http-basic,searchguard插件。插件可以通過運行Biplugin install [github-name]/repo-name。同時需要注意增加驗證後,請勿使用弱口令。
2、架設nginx反向代理服務器,並設置http basic認證來實現elasticsearch的登錄認證。
3、默認開啓的9200端口和使用的端口不對外公佈,或架設內網環境。
4、elasticsearch 早期版本在“CVE中文漏洞信息庫”網站上已有部分漏洞被披露,建議使用1.7.1以上版本或使用最新版本程序。
(二)大數據安全
1、設置HADOOP爲基礎的大數據信息系統,只允許或通過特定的IP進行訪問,同時該IP地址進行安全設置(使用防病毒程序,設置複雜密碼,安裝最新漏洞補丁,使用應用程序防火牆等)
2、爲NOSQL這類大數據數據庫(如mongodb,redis)設置複雜密碼
3、在大數據信息系統建設完畢後及時進行登記保護測評,並定期對該類大數據信息系統進行安全檢查。
(三) 服務器安全設置
1、在服務器端安裝系統防護軟件,實現對操作系統加固和WEB業務系統及網站的防護監測,實現對信息系統的立體化監測和防護
2、對服務器中開啓的服務(如數據庫、FTP、web服務等)設置複雜密碼,並定期更換,增加系統安全性
3、及時更新服務器漏洞補丁,防止漏洞被利用
4、在互聯網出口設置防火牆訪問策略,只允許特定需要對外訪問的端口通過,其他異常訪問全部阻斷
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 方案步驟實施
一、選用一個域名,並且配置轉發。
upstream es.sojson.com{
server 127.0.0.1:9981 weight=1 max_fails=2;
server 127.0.0.1:9982 weight=1 max_fails=2;
server 127.0.0.1:9983 weight=1 max_fails=2;
server 127.0.0.1:9984 weight=1 max_fails=2;
server 127.0.0.1:9985 weight=1 max_fails=2;
}
location ~* / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
if ($host ~* es\.sojson\.com) {
proxy_pass http://es.sojson.com;
}
}
因爲我五個點都加了插件,所以可以做個負載均衡。
二、配置帳號密碼訪問方式。
location ~* / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
#關鍵點,配置帳號密碼
auth_basic "login";#提示信息
auth_basic_user_file /usr/local/nginx/conf/vhosts/password/es; #密碼文件(注意最好別挑事,直接寫絕對路徑,別相對路徑)
autoindex on;
if ($host ~* es\.sojson\.com) {
proxy_pass http://es.sojson.com;
}
}
三、配置密碼帳號文件。
上面第二點配置中有一個auth_basic_user_file
選項,這個選項就是配置的密碼訪問規則。密碼是採用Crypt
(all Unix servers)
方式密的,本站有生成工具:http://www.sojson.com/htpasswd.html。如下圖:
然後把生成的內容複製到上面配置的路徑文件中/usr/local/nginx/conf/vhosts/password/es;
vi /usr/local/nginx/conf/vhosts/password/es
然後把生成的admin:PJdMvp0Utzclm
插入進去,保存之前看前面有沒有丟了字母,我老會丟一個第一個字母,導致坑了一會。保存退出重啓 Nginx
即可。
四、測試訪問
訪問之前配置好的域名es.sojson.com
。出現以下畫面後輸入配置好的帳號密碼(明文)測試通過。
五、關閉外網訪問。
elasticsearch$ vi config/elasticsearch.yml
然後修改部分配置,只需要配置network.host : 127.0.0.1
即可
#network.publish_host: 0.0.0.0
#networt.bind_host: 0.0.0.0
#network.host: 0.0.0.0
#只要配置這個即可
network.host: 127.0.0.1
#network.publish_host: 127.0.0.1
重啓 Elasticsearch ,打完收工。想要更安全一點,可以再加上 iptables ,然後再加上訪問頻率限制,防止暴力破解。
本文主題
Elasticsearch Elasticsearch安全 Elasticsearch教程 Nginx iptables
版權所屬:SO JSON 在線工具
原文地址:http://www.sojson.com/blog/213.html
轉載時必須以鏈接形式註明原始出處及本聲明。