Security

防火牆 + 負載均衡器作為集群入口點 - 怎麼辦?

  • May 23, 2017

我必須為我的公司設置一個生產環境,但我在新架構的一個組件上遇到了問題。

我做了一個快速畫圖,向您展示今天是如何完成的,以及我如何理解明天應該完成的。

一切都使用 Debian。

編輯:一切都儲存在雲中,實際上是在一個小型主機中,但我計劃遷移到 DO

  1. 今天

伺服器可以訪問 Internet,並且位於 NAT 之後。

伺服器安裝了安全堆棧,如該文章末尾所述。

伺服器直接在虛擬機中安裝了軟體。

imgur 上的架構

  1. 明天

伺服器位於專用網路中。

Apache 和 MySQL 在 docker 容器中執行。

伺服器位於負載平衡器/代理/防火牆後面。

如果需要,我可以執行 PHP 容器集群。

編輯 -根據答案,imgur 上的新模式

  1. 我在哪裡

老問題

*切入點是我的問題,不知道用什麼軟體做代理/負載均衡。

我真的不明白是否應該在 swarm 模式下使用 docker,因為我有兩個不同的容器。

我不知道我是否應該使用 nginx,因為我已經讓 Apache 處理 HTTP 請求。

我不明白容器如何能夠訪問 Internet 以下載配置文件(例如儲存在外部 git 儲存庫中的 puppet 文件)。

我實際上正在閱讀很多關於這方面的內容並嘗試學習良好的做法(如將數據儲存在容器之外),但它仍然有點不清楚。

我有另一個使用節點執行的應用程序,我想應用相同的模式,只需用 PM2/Node 容器替換 Apache/PHP 容器,這就是我詢問負載平衡的原因。我可能還需要 PHP 應用程序的負載平衡。

也許我對架構更新完全錯了,我應該堅持今天的工作方式?但我覺得管理 2 台伺服器的安全性更危險,因為我的攻擊面更大。

我還聽說 CSF 預設會阻止 docker,所以我必須編寫額外的規則,我想避免它,但它會在 swarm 模式下使用 docker 開箱即用嗎?*

編輯:答案幫助我走到了這一點,如果我錯了,請糾正我

安全

如果我理解您的消息,我應該在 2 中按照架構進行設置。

首先,我使用防火牆過濾所有傳入的 TCP/UDP 連接,阻止嘗試掃描埠的 IP,等等……

然後我有了我的代理,它將路由根據我點擊的埠,SSH/HTTP/SFTP 到正確的容器。

由於 traefik 可以監控一個群體,我想它足以關注正在發生的事情。

我想僅通過 SSH 隧道對我的數據庫 VM 進行 SSH 訪問,以避免暴露從代理到數據庫 VM 的路由。(我知道怎麼做)

縮放

通過使用 traefik,我現在可以添加一個協調器伺服器並添加我需要擴展的盡可能多的 Apache + PHP 容器。

監控

Traefik 提供了很好的方法來監控管理下的服務。

日誌被發送到 ELK 堆棧以進行視覺化。我還考慮將安全日誌發送到 ELK 堆棧。

聽起來不錯 ?

  1. 附錄 - 安全堆棧

原諒我對安全知識的貧乏,我盡力做到最好。

  • CSF + LFD

  • 無人值守升級

  • clamav

  • rkhunter

  • logwatch

  • fail2ban

  • psad

  • 無 ssh root 登錄 + 埠敲門

你的主要目標是什麼?

表現

如果您的目標是性能並且您可以節省一些離線時間,那麼您目前的設置很好,並且 Quintiliano 關於在容器中使用您的數據庫的評論可能會成立。雖然使用 Apache 作為反向代理很容易管理,但為了獲得更好的性能,您可以檢查 HAProxy(這並不難,但需要時間來適應它)。為了提高性能,您可能需要 2 個或更多伺服器和一個負載均衡器(負載均衡器對單個伺服器沒有意義)。如果您有良好的連接,您可以使用網路介面綁定來使您的連接速度加倍。

安全

您可以在代理之前添加路由器來提高安全性(專業-昂貴-或經濟但功能齊全,例如 ubiquiti、mikrotik 等)。您需要知道如何設置它並保護您的專用網路。在安全性方面,最好在容器中執行數據庫並降低一些性能。您還可以在容器中設置代理。我建議檢查traefik,它是一個易於使用的代理/負載均衡器。沒錯,單台伺服器比兩台伺服器更容易維護。

冗餘(故障安全)

如果您想要的是無停機時間,您將需要更改您的設計。您至少需要 2 台路由器並設置 VRRP。您需要設置網路介面綁定並擁有至少 2 台伺服器(最好是多台)。您在路由器中設置以將奇數 IP 發送到其中一台伺服器,甚至將 IP 發送到另一台伺服器(這樣您就不需要同步會話),並將負載平衡您的連接。您將需要一種將文件從一台伺服器同步到另一台伺服器的方法(在文件上傳等情況下)。我建議使用unison,但是我使用 LXD 而不是 docker,所以我不確定這是否適用於您的情況。對於數據庫,最好將它們放在一個集群中,檢查Galera with maxscale. 您通常需要至少 3 台伺服器,但如果您使用Galera Arbitrator ,則可以使用 2 台伺服器執行它

這只是一種方法,有很多路徑,這是我個人的解決方案。

更新(關於安全)

說真的,如果業務數據洩露,會有多糟糕?你說這將是“致命的”,但事實是這樣嗎?我問你這個的原因是因為如果它那麼重要,那麼你不應該自己做這件事,而應該與專業團隊或安全顧問一起做。無論您多麼堅持這本書,如果您沒有足夠的經驗,總會有錯誤的餘地(如果您在這個網站上提問,是因為您沒有它,對嗎?)。不要誤會我的意思,如果數據洩露,誰會為此負責?就我個人而言,我不管理最高機密,所以只要我嘗試遵循並應用高於標準的安全措施,我認為就足夠了。從我在你的安全列表中看到的,你幾乎涵蓋了我通常做的事情,到目前為止我還沒有

我還有一些可以改進您的設置的建議:

**1) 數據保護:**請查看使用 MariaDB 進行靜態數據加密。這是加密數據的一種非常簡單的方法。它的主要好處是,如果您的數據庫文件遭到破壞,如果沒有密鑰,它們將毫無用處。如果將密鑰儲存在記憶體中會更好,因為它不會儲存在快照或備份中,缺點是每次啟動數據庫時都必須輸入該密鑰。如果有人可以訪問正在執行的實例(這是入侵數據庫的最常見方法),這種加密方法將無濟於事。

**2)應用程序:**我猜你最薄弱的環節是在應用程序層。你必須確保你的程式碼受到很好的保護,並且不會受到 XSS、SQL 注入等的攻擊。如果您不能 100% 做到這一點,最好讓非常重要的數據盡可能遠離您的應用程序。確保添加更多保護層(例如額外的身份驗證、數據庫中的值加密等)。

**3) 加密目錄:**加密目錄通常對於伺服器被盜或有人以非 root 使用者獲得訪問權限的情況很有幫助。

**4) 備份:**查看儲存備份和快照的位置。它們與您的數據庫一樣重要。如果您的伺服器感染了勒索軟體(是的,它也可能發生在 Linux 中),您的備份可以幫助您化險為夷。將它們保存在安全位置(受限制、加密並且如果可能的話是不可變的)是一個好主意。

**5) 本地網路:**確保您的伺服器與本地網路隔離。不要假設您的本地網路是安全的,因此不要為本地客戶端授予特殊權限。將您的伺服器視為隔離在遠端位置並且只能通過 Internet 訪問,這樣您將只保護一個入口點。

**6) SSH:**如果你還在使用 22 埠進行 ssh,請更改它。我建議在 ssh 密碼之外使用客戶端密鑰(以及敲埠)。

**7) 密碼:**確保使用經過良好測試的密碼管理器應用程序來保護所有伺服器密碼的安全。如果您的個人電腦被黑客入侵並且這些密碼被洩露,那麼您在此安全公式中添加多少並不重要。因此,請保護您的個人電腦和伺服器。(您使用的是強密碼,對嗎?)

**8) 後門:**我遇到過好幾次被鎖在門外的事!所以請記住,它也可能發生在你身上。確保如果您打開另一種訪問伺服器的方式,這些方式與主要方式一樣強大。如果您可以物理訪問伺服器,則不必太擔心。

**9)防病毒:**不要太相信clamAV。這不是一個糟糕的軟體,但您不會獲得與商業解決方案相同的保護。我將它用於我的郵件伺服器和一些文件伺服器 (Samba),以阻止眾所周知的 Windows 病毒,但在遇到新威脅時我並不指望它。最好不要假設它會保護你。如您所知,已知 Linux 惡意軟體的列表非常少,因此如果您因 clamAV 而遇到性能問題,沒有它可能不會對您的安全性造成太大影響(如果您已經以許多其他方式保護您的伺服器) . 如果您想要商業解決方案,Sophos 和 ESET 是不錯的選擇。如果您真的想掌握伺服器的所有威脅,

關鍵問題:(如果有人……會發生什麼)

* gains access to the DB through my applications?
* gains access the containers?
* gains access to the servers as user?
* gains access to the servers as root? <-- usually this is gameover
* stole the server?
* has access to the local network?
* gains access to my 'development' computer?

我知道這裡涵蓋的許多要點,你已經在做,但我不想假設任何事情。我希望您發現我的見解很有用,如果您有任何其他我沒有在這裡介紹的建議,我想听聽。

引用自:https://serverfault.com/questions/850277