Kate Li (Taiwan)的部落格

首頁

elasticsearch安全加固101

作者 morcillo 時間 2020-02-24
all

 最近MongoDB的安全事件鬧得沸沸揚揚,應該不少人都聽說了吧,事情大概是,因為MongoDB默認的安全設置造成了數據外泄並且被駭客勒索才能找回數據,想瞭解的,這裡有幾個連結:http://www.jianshu.com/p/48d17a69e190http://mt.sohu.com/20170107/n478047698.shtml​ http://bbs.tianya.cn/ post-itinfo-503786-1.shtml​ 

 安全從來不是等到出事才要注意的事情,可以說安全是第一重要的事情,不管你是公司的CTO、技術總監、運維總監、架構師還是一線工程師,都應該有安全意識,好了,廢話不多說了,Elasticsearch的用戶現在越來越多了,有些已經成為公司的基礎服務,所以數據的安全非常重要,今天主要給大家介紹Elasticsearch圍繞安全方面的的幾點使用事項:

 下載安裝

    請使用正規管道下載Elasticsearch,首選官方網站,下載完成,記得要驗證下載檔案的sha1值和官網下載的提供的sha1值進行對比,避免下載過程中被人攔截破壞檔案,甚至注入惡意程式碼。不要隨便安裝協力廠商的挿件,挿件有可能引入安全性漏洞甚至本身自帶後門,需謹慎使用。  連結君:https://www.elastic.co/downloads

  使用最新的Elasticsearch

   請關注Elastic網站,及時更新陞級 Elasticsearch的最新版本,Elasticsearch每次版本發佈都會優化和改進一部分功能,尤其是安全性漏洞的補丁,仔細閱讀Elasticsearch的更新記錄,Elasticsearch的版本遵照 語義化版本 ,所以小版本間應該是能够無縫陞級的,建議及時本地測試和線上更新,陞級前,記得snapshot做好備份。  連結君:https://www.elastic.co/downloads

  修改默認的Elasticsearch集羣名稱

    Elasticsearch默認的集羣名稱是elasticsearch,請在生成環境上一定要修改成其他的名稱,並且不同的環境和不同的集羣要保證不相同,監控集羣節點情况,如果有未知節點加入,一定要及時預警。  檔案君:https://www.elastic.co/guide/e….name

  不要暴露 Elasticsearch在公網上

    Elasticsearch 默認埠是9200,綁定的是本機127.0.0.1的這個ip,這個默認參數其實很安全,但是有很多人想要綁定其他的lan口或者公網的ip,可以修改相應參數,記住,修改有風險,如果確實需要將Elasticsearch暴露在公網環境,請修改特定的埠綁定IP,不要直接修改參數: network.host,而是要分別修改:http.port來綁定HTTP協議9200 埠的IP(RESTful介面調用),修改:transport.tcp.port對應的TCP 9300埠的IP(集羣內通信),如果你不需要http埠,你乾脆禁用掉,另外還需要在Elasticsearch之上加上成熟的安全防護措施(注意是成熟的!),在這裡提供幾種方案:

    檔案君:https://www.elastic.co/guide/e…tings

 禁用批量删除索引

 Elasticsearch支持通過_all(全部)和萬用字元(*)來批量删除索引,在生產環境,這個有點危險,你可以通過設定:action.destructive_requires_name: true來禁用它。

安全使用動態腳本

   Elasticsearch的腳本很方便的可以對數據進行操作,不過如果你暫時沒有用上,還請禁用它(Elasticsearch在1.2.x以後已經默認禁用了),如果你已經在使用動態腳本,比如Groovy,它不是沙箱機制的腳本引擎,啟用inline或store類型的groovy有安全風險,請限制腳本的接觸方,比如通過範本的管道來限制腳本的調用,只需要執行特定預先定義好的腳本,對調用參數進行過濾和參數值的檢測,做好驗證,同時各種日誌都必須要保留好,方便進行日誌分析,异常的調用和請求一定要有發現和預警機制。   Elasticsearch默認啟用了  Java Security Manager,但還請正確配寘其白名單。   使用Groovy或者JavaScript等腳本的用戶,儘快遷移到Painless腳本,Painless更快更安全。   檔案君:https://www.elastic.co/guide/e….html

 給Elasticsearch服務器加固

    服務器加固是一個必備流程,不管上面運行的是什麼服務;   首先,請開啟防火牆,請設定防火牆規則,只開啟必備的埠,完成之後,使用掃描工具掃描服務器,檢查埠開發情况;   如果可能,不要用密碼的方法來遠端存取服務器,使用公私鑰的管道來ssh登入服務器,如果只能使用密碼,請妥善保管好你的用戶名和密碼,禁用root用戶,不用使用弱密碼。   關注Java最新的漏洞,使用安全的JVM運行時。   服務器及時更新最新的軟件,使用安全的repo軟件源,綁定軟件源的host和ip,避免dns污染造成的攻擊,關注服務器軟件漏洞,及時打上補丁。   收集系統日誌和安裝相應的入侵偵測軟件,及時發現服務器是否有异常行為。

 不要以root身份運行Elasticsearch

  如果你的運維人員打算以root身份來運行某個服務,這個運維人員一定是一個不合格的運維人員,記住一定不要以root身份來運行Elasticsearch,另外,要不和其他的服務公用相同的用戶,然後還要保證該用戶的許可權要最小化。   範例君:

sudo -u es-user ES_JAVA_OPTS="-Xms1024m -Xmx1024m" /opt/elasticsearch/bin/elasticsearc

 正確設定Elasticsearch的數據目錄

    請確保Elasticsearch的目錄分配了合理的讀寫許可權,避免使用共亯檔案系統,確保只有elasticsearch的啟動用戶才能訪問,同理,日誌目錄也一樣需要正確配寘,避免洩露敏感資訊。   檔案君:https://www.elastic.co/guide/e…tings

 定期對Elasticsearch進行備份

    使用Elasticsearch提供的備份還原機制,定期對Elasticsearch的數據進行快照備份,以備不時之需。   檔案君:https://www.elastic.co/guide/e….html

 加上監控和預警

    Elasticsearch提供了很好的默認參數,對參數方面還做了正確性檢測,bootstrap啟動檢查,不準確的參數,直接不允許Elasticsearch啟動,以至於有很多人抱怨,怎麼現在部署到線上默認就需要做這麼多設定才能使用呢,是的,以前啟動就默認綁定了所有的網卡,集羣見自動發現和相連,現在需要手動綁定局域網網卡,默認只是綁定的本機127.0.0.1的ip,對上線來說麻煩了一點,做了這些檢查也就是為了保證資料安全,以前很多的公網都能直接訪問的Elasticsearch實例,都是因為默認設置就綁定了公網ip,但是這些還不够,作為用戶,你還需要收集各種日誌和系統監控資訊,及時主動掌握服務健康和資源使用情况,發現异常情况要及時處理,這裡提供一些方案:

是的,把安全這個事情考慮進去之後,很多事情都要比沒考慮要變得更加複雜和麻煩,千里之堤毀於蟻穴,一個不起眼的忽視就有可能造成全部數據的遺失和洩露,出來混遲早是要還的,安全問題千萬不能忽視。

 以上幾點建議舉例針對linux平臺,其他平臺思路基本上一樣,僅供參考,安全是一個包含很多方方面面的學科,抛磚引玉,希望大家有用。 

最後,Elastic非常關心我們的產品安全,如果您發現有任何安全方面的問題,還請在這裡上報:https://www.elastic.co/community/security企業用戶需要X-Pack及Elastic官方技術支援,請訪問下麵的連結:https:// www.elastic.co/cn/contact