2017-08-13 32 views
4

我正在測試Erlang並且有幾個與分發安全相關的問題。 (這裏有很多混合的信息)這些類型的問題帶有許多與情況有關的意見,並取決於您處理的數據類型的個人舒適度。爲了這個問題,我們假設它是一個簡單的聊天服務器,用戶可以在這裏連接並聊天。如何在私有子網後面保護Erlang羣集

示例圖:enter image description here

羣集將與彈性負載平衡引導所有連接到這些節點(和從)一專用子網VPC後面。彈性負載平衡將是通向這些節點的唯一直接路徑(將無法通過名稱@ privatesubnet連接到節點)。

我的問題是:

在此基礎上自問自答:Distributed erlang security how to?

有兩種不同類型的可發生的內部溝通。要麼使用內置功能直接連接節點,要麼使用自定義協議通過TCP連接執行所有操作。第一個是最簡單的,但我認爲它帶有一些安全問題,我想知道是基於上面的圖表是否足夠好(呃,好的,處理敏感信息時不夠好,但總是可以有更好的方式去做所有事情......)

你如何保護和私人子網後面的Erlang集羣?我想隱藏節點,並手動連接它們,當然在它們上使用cookie。這種方法有缺陷嗎?而且由於使用TCP的自定義協議將是最佳選擇,因此對性能有何種影響?我想知道潛在的安全漏洞(正如我所說的,關於如何做到這一點,有很多混雜的信息)。

我會對以這種方式使用Erlang的人有興趣!

回答

1

在AWS上,您的EC2節點位於私有子網中,您可以安全地避免與節點的不必要連接。您可以通過嘗試連接(以任何方式)連接到運行代碼的計算機來驗證這一點:如果您使用的是私有子網,您將無法這樣做,因爲實例在子網之外甚至都不可尋址。

您的負載均衡器不應該轉發Erlang節點流量。

您可以使用一些安全組規則做比上述更好的一點。配置您的節點以使用some range of ports。然後創建一個「erlang」組,允許從「erlang」組連接到該端口範圍,否則拒絕連接。最後,將該安全組分配給所有Erlang運行的實例。這可以防止不需要與Erlang交談的實例能夠這樣做。

+0

當你說:「你可以使用一些安全組規則做比上述更好的一點。」你的意思是保持羣集公開面向子網?使用ELB(或可能的路由53私有區域),是將這些實例保留在私有子網中,是否有更好的方法?另外,如何在不使用ELB的情況下將流量路由回所連接的客戶端?使用NAT網關?謝謝! – Mike5050

+0

不,請保留私人子網,但_add_ SGs。這樣,如果子網中的非erlang實例受到損害,則無法訪問羣集。這是一個特例,但它是一個很好的紀律IMO。如果您需要連接到羣集以進行調試,請訪問專用子網(VPN或SSH跳轉框)並允許私有IP訪問「erlang」SG。 –

+0

沒關係!你是什​​麼意思:「你的負載均衡器不應該轉發Erlang節點流量。」謝謝!這有很大幫助。 – Mike5050

1

我認爲你在那裏有一個非常「經典」的設置。

你不會從互聯網連接到集羣 - ELB的「外部」。假設「私人」子網共享其他內容,則只能通過EPMD連接某些IP(或範圍)。

在任何情況下,一些機器必須通過EPMD「可信」連接,而其他一些機器只能建立到其他某個端口的連接......否則任何運行你的Erlang羣集的東西都是無用的。

需要思考的是:您可能想要(並且確實必須)連接到羣集,以便從互聯網或其他地方執行一些「管理任務」。我已經通過SSH看到了這一點; Erlang支持即裝即用。

最後一個字做的一切了一個自定義協議一個TCP連接時,請不要,你會最終達到實現你自己的東西,幾乎沒有什麼二郎優惠,以及它在真正真棒。最後,你會有相同的限制。

+0

當你說「你可以只允許某些IP(或範圍)通過EPMD連接」。你的意思是添加一個網關並限制通過防火牆訪問? (白名單)我的其他想法之一還包括管理任務和外部應用程序,這些應用程序連接到集羣並執行一些正常ELB連接無法執行的操作(如檢索/刪除/驗證敏感信息)。所以還需要有一些需要信任的IP。 Erlang的主要擔憂是禁止用戶直接連接到節點。 – Mike5050