背景
經常跟 ES 打交道的朋友都知道,現在主流的 ES 集羣安全方案是:RBAC + TLS for Internal + HTTPS 。
作為終端用户一般只需要關心用户名和密碼就行了。作為管理和運維 ES 的人員來説,可能希望 ES 能提供密碼策略來強制密碼強度和密碼使用週期。遺憾的是 ES 對密碼強度和密碼使用週期沒有任何強制要求。如果不注意,可能我們天天都在使用“弱密碼”或從不修改的密碼(直到無法登錄)。而且 ES 對連續的認證失敗,不會做任何處理,這讓 ES 很容易遭受暴力破解的入侵。
那還有沒有別的辦法,進一步提高安全呢?
其實,網關可以來幫忙。
雖然網關無法強制提高密碼複雜度,但可以提高 ES 集羣被暴力破解的難度。
大家都知道,暴力破解--本質就是不停的“猜”你的密碼。以現在的 CPU 算力,一秒鐘“猜”個幾千上萬次不過是灑灑水,而且 CPU 監控都不帶波動的,很難發現異常。從這裏入手,一方面,網關可以延長認證失敗的過程--延遲返回結果,讓破解不再暴力。另一方面,網關可以記錄認證失敗的情況,做到實時監控,有條件的告警。一旦出現苗頭,可以使用網關阻斷該 IP 或用户發來的任何請求。
場景模擬
首先,用網關代理 ES 集羣,並在 default_flow 中增加一段 response_status_filter 過濾器配置,對返回碼是 401 的請求,跳轉到 rate_limit_flow 進行降速,延遲 5 秒返回。
- name: default_flow
filter:
- elasticsearch:
elasticsearch: prod
max_connection_per_node: 1000
- response_status_filter:
exclude:
- 401
action: redirect_flow
flow: rate_limit_flow
- name: rate_limit_flow
filter:
- sleep:
sleep_in_million_seconds: 5000
其次,對於失敗的認證,我們可以通過 Console 來做個看板實時分析,展示。
折線圖、餅圖圖、柱狀圖等,多種展示方式,大家可充分發揮。
最後,可在 Console 的告警中心,配置對應的告警規則,實時監控該類事件,方便及時跟進處置。
效果測試
先帶上正確的用户名密碼測試,看看返回速度。
0.011 秒返回。再使用錯誤的密碼測試。
整整 5 秒多後,才回返結果。如果要暴力破解,每 5 秒鐘甚至更久才嘗試一個密碼,這還叫暴力嗎?
看板示例
此處僅僅是拋磚引玉,歡迎大家發揮想象。
告警示例
建立告警規則,用户 1 分鐘內超過 3 次登錄失敗,就產生告警。
可在告警中心查看詳情,也可將告警推送至微信、釘釘、飛書、郵件等。
查看告警詳情,是 es 用户觸發了告警。
最後,剩下的工作就是對該賬號的處置了。如果有需要可以考慮阻止該用户或 IP 的請求,對應的過濾器文檔在這裏,老規矩加到 default_flow 裏就行了。如果小夥伴有其他辦法提升 ES 集羣安全,歡迎和我們一起討論、交流。我們的宗旨是:讓搜索更簡單!