簡介
在處理雲端基礎架構時,您首要關心的是確保您的應用程式完全正常運作。在您的設定和部署流程中,一個重要的環節是在將應用程式或系統提供給公眾之前,為其建立有效、周密且強大的安全措施。與其在部署後才事後補救實施安全措施,不如確保您的基礎架構中內建了安全的基礎配置,這點至關重要。
本教學將在這方面為您提供協助。它將重點介紹在設定和配置伺服器基礎架構時可以實施的某些實用安全措施。雖然這不是一份詳盡的伺服器安全協定清單,但它是一個有用的起點。隨著您對環境和應用程式的特定需求有更深入的了解和操作,您可以開發額外的安全措施,以在您的基礎上進一步加強。
SSH (Secure Shell) 金鑰
在操作伺服器時,您的大部分時間都將花費在 SSH 終端機工作階段中與伺服器的連線。安全外殼 (SSH) 金鑰提供了比依賴密碼登入更安全的伺服器登入方法。為了進行身分驗證,使用 SSH 金鑰時會準備兩個存取金鑰。第一個是秘密(私鑰)金鑰,另一個是可分享的公鑰。
必須先配置 SSH 金鑰驗證。這是透過將 SSH 公鑰放置在伺服器上的適當目錄中來完成的。當您的用戶端最初連線到伺服器時,系統會要求您提供擁有私鑰的證明。這是透過產生一個隨機值並將其發送到您的 SSH 用戶端來實現的。接著,SSH 用戶端將使用私鑰對回應進行加密。此回應將發送到伺服器。接下來,伺服器將使用您的公鑰解密來自用戶端的訊息。如果伺服器成功解密該隨機值,則表示用戶端擁有私鑰。在這種情況下,身分驗證即獲確認,並可建立無需密碼的伺服器連線。
使用 SSH 金鑰增強安全性
雖然密碼授權或任何使用 SSH 的驗證都是完全加密的,但惡意使用者仍可能嘗試存取伺服器。特別是如果他們獲取了伺服器對外的 IP 位址。透過嘗試所有可能的金鑰組合,現代運算確實允許基於密碼的登入,且惡意使用者經常進行此類嘗試。如果有人將這些存取嘗試自動化,就有可能透過系統地嘗試不同的組合,最終獲取正確的密碼。
透過利用 SSH 加密驗證,無需啟用密碼即可登入。SSH 金鑰通常包含攻擊者需要嘗試的極大量組合可能性。增加的位元數使破解加密所需的各種組合潛力倍增。因此,要跑完 SSH 金鑰演算法的所有可能組合將會非常耗時。因此,這對惡意攻擊者來說成了一件不值得花費時間的嘗試。這就是為什麼 SSH 加密通常被認為是「無法破解」的原因。
實作 SSH 金鑰
登入任何遠端 Linux 伺服器都應該使用 SSH 金鑰。可以在本機端產生金鑰,並在幾分鐘內將公鑰傳輸回伺服器。透過本教學,您將對 如何在 Ubuntu 中使用 SSH 連線到遠端伺服器 有了基本概念。您也可以參考我們深入的 關於如何配置 Linux 伺服器以使用基於 SSH 金鑰驗證的教學.
總體而言,不允許 root 使用者直接透過 SSH 登入是一種常用的最佳實踐,而是以非特權使用者登入,並在需要時使用 sudo 等工具來提升權限。這被稱為最小權限原則:一種限制存取權限的方法。一旦透過 SSH 驗證了以非特權帳戶登入,就可以透過在伺服器上設定 PermitRootLogin no 指令 /etc/ssh/sshd_config 來停用 root 登入。然後,可以使用 SSH 程序命令 sudo systemctl restart sshd 重新啟動伺服器。
防火牆
調節服務向網路暴露程度的軟體(或硬體裝置)被稱為防火牆。配置最佳的防火牆可確保只有允許的服務才能公開提供,並允許進出特定的伺服器。

伺服器上預設可能會運行多個服務,這些服務可以分為以下幾組:
- 內部服務: 這些服務應該只能從伺服器本身內部存取。這可以防止服務暴露於公開的網際網路存取(例如:只能透過本機連線存取的資料庫)。
- 公開服務: 網際網路上任何人都可以存取的服務,通常是匿名的。這包括允許訪客存取您網站的網頁伺服器。
- 私有服務: 只有來自特定一組位置的授權帳戶才能存取這些服務(例如:phpMyAdmin 資料庫控制面板)。
雖然公開服務可以保持開放以供從網際網路存取,但私有服務可以根據存取參數(例如連線類型)進行限制,而內部服務則完全關閉任何基於網際網路的存取。對這些服務的存取,以及允許存取的細粒度,全部由防火牆控制。未使用的連接埠通常會配置為完全阻止對其進行存取。
使用防火牆增強安全性
防火牆是伺服器防護的基準。它的作用是在應用程式處理流量之前,限制與服務之間的連線。當然,您可以為您的服務實施額外的安全功能,並將其限制在所需的介面上。
只有您選擇保持開放的服務才不會受到正確配置的防火牆的限制。這限制了易受攻擊的元素,因為可用的軟體要少得多,因此遭受攻擊的可能性也較小。
實施防火牆
Linux 系統有許多可用的防火牆。其中一些相當複雜。然而,通常只需在伺服器初始設定時,或在實施伺服器服務變更時設定防火牆。這應該只會花費您幾分鐘的時間。以下是設定和啟用防火牆時可以考慮的一些選項:
- 對於 CentOS,您可以參考我們的在 CentOS 7 上使用 FirewallD 設定防火牆指南.
- 我們的Iptables 指南可以引導您列出和刪除 Iptables 防火牆規則.
最重要的是,無論參考哪篇教學,您都必須確保所選的防火牆能阻擋來自您伺服器的未知流量,以防止任何新啟用的服務在無意中暴露於網際網路上。透過要求明確授權存取,系統將提示您全面評估服務的存取方式、運行方式以及允許誰存取。
虛擬私有雲 (VPC) 網路
您的基礎架構’資源需要在一個被稱為 VPC 的私有網路中運作。這些網路更安全,因為它們能防止來自其他雲端 VPC 網路的存取。因此,它們使網路介面無法從公開的網際網路存取。
使用 VPC 網路增強安全性
對於內部通訊,私有網路比對應的公開網路更具優勢。VPC 允許將資源群組隔離到特定的私有網路中。由於 VPC 網路僅透過私有連線進行介面連接,因此該網路的流量可以免於暴露到公開網際網路中,避免資訊面臨被攔截或洩露的風險。VPC 網路也可用於隔離執行環境以及租戶。網際網路閘道也可以設定為公開網際網路與 VPC 網路資源之間的單一存取點。
此外,安全性的很大一部分涉及分析我們的系統,並盡最大努力確保所有元件的安全。服務稽核使我們能夠了解系統可接受的協定、正在執行的服務以及用於通訊的連接埠。了解這些資訊有助於針對設定做出最佳決策。這些決策可能包括防火牆設定、系統監控和警報,以及哪些服務應該公開存取。

利用稽核增強安全性
每個服務都可以用於處理外部用戶端或用於內部目的。不論意圖為何,這些服務對於惡意使用者來說都是漏洞點。隨著執行服務數量的增加,漏洞被利用的可能性也會隨之增加。
一旦您牢牢掌握了機器正在執行哪些服務,就可以開始分析服務。在進行服務稽核時,提出以下問題會很有幫助:
- 該特定服務是否應該主動執行?
- 它是否在最佳的網路介面上執行?
- 該服務最適合公開還是私有網路介面?
- 防火牆規則是否已正確設定,以允許合法流量進入此服務?
- 我的防火牆規則是否封鎖了非法流量?
- 是否啟用了關於安全性漏洞的警報系統?
在將新伺服器新增至基礎架構時,上述內容應作為其設定程序中的標準做法。服務稽核的另一個好處是,它將允許識別任何被無意中變更的設定。
執行服務稽核
為了稽核執行中的服務,請使用 ss 指令來列出所有UDP 和 TCP 連接埠在伺服器上主動使用的情況。以下是使用 ss 指令搭配程式名稱 PID,檢查監聽中的 TCP 和 UDP 連接埠的範例:
|
1 |
sudo ss -plunt |
系統將會傳回類似以下的內容:

您應該主要關注 Netid、Local Address:Port 和 Process 欄位:
- 如果 Local Address:Port 的值為 0.0.0.0,表示該服務正在主動接受所有 IPv4 網路介面上的所有連線。如果位址是 [::],則表示所有 IPv6 連線都在接受流量。
- 在上述範例中,Nginx 和 SSH 都在兩個網路協定堆疊(IPv4 和 IPv6)的所有公開介面上進行監聽。
透過上述範例,您可以選擇是否需要允許 SSH 和 Nginx 在這兩個介面上進行監聽,或者僅在其中一個介面上監聽。通常,您會希望停用任何未使用的服務以防止其執行。例如,如果您的網站應該只能透過 IPv4 存取,那麼關閉 IPv6 介面將有助於限制暴露。
透過自動更新保持最新狀態
自動更新降低了維護伺服器安全所需的工作量,並有助於縮短伺服器暴露於已知錯誤中的時間。您在伺服器上執行更新所需的時間越長,它暴露於已知漏洞中的時間就越長。自動更新將確保一旦有修復套件可用,即可自動安裝在伺服器上,以限制漏洞暴露的時間。
除了伺服器稽核之外,自動更新還可以大幅減少遭受攻擊的風險。它們還將大大減少花在伺服器維護上的時間。
如何啟用無人值守更新
無人值守更新現在是大多數伺服器發行版中的選用功能。例如,在 Ubuntu 上,管理員可以執行以下指令:
|
1 |
sudo apt install unattended-upgrades |
如需有關實作無人值守更新的更多資訊,請參閱此處的「自動更新」章節。對於 Fedora,說明可以在這裡找到。請注意,自動更新只會安裝最初透過系統套件管理系統安裝的軟體。任何補充應用程式(例如網頁型應用程式)都需要手動單獨檢查更新,或單獨設定自動更新。
目錄索引
當目錄缺少索引檔案時,大多數伺服器預設會設定為顯示目錄索引。換句話說,如果在您的網頁伺服器上建立了一個名為「downloads」的目錄,任何瀏覽該目錄的人都能看到其中的所有檔案。雖然這並不總是安全風險,但它確實會讓機密資訊暴露在不應看到的人眼前。例如,考慮到您的網頁伺服器可能有一個包含網站首頁存取憑證的檔案,以及一個包含網站資料庫後端所有設定的檔案。如果未停用目錄索引,任何瀏覽該目錄的人都會看到這些檔案。
透過停用目錄索引提高安全性
雖然目錄索引很有用,但它們可能會使檔案在無意中暴露。為了減輕這種無意的暴露及任何相關風險,伺服器上的目錄索引預設應予以停用。雖然訪客仍然可以存取這些檔案,但無意中檢視資料的風險已顯著降低。
停用目錄索引
在大多數情況下,只需在網頁伺服器的設定中增加一行,就足以停用目錄索引。
- 請遵循這些在 Apache Wiki 上停用這些目錄列表的步驟。確保 Apache Directory 設定區塊中列出了 Options -Indexes。
- Nginx 預設已停用索引,在此方面無需採取進一步行動。
頻繁備份
雖然備份不是一種安全措施,但對於在系統遭受入侵時保護資料和整個系統至關重要。它也有助於分析系統是如何遭受攻擊的。想像一個不幸的情況:您的系統受到勒索軟體(一種會加密您系統上的檔案,只有在您向駭客付錢時才會解密的病毒或惡意軟體工具)的攻擊。如果沒有資料備份,您唯一的選擇就是付錢以重新取得資料的存取權。如果資料已安全備份,您仍然可以存取它,並且能夠復原資料,而無需存取已被入侵的系統。
透過頻繁備份強化安全性
頻繁備份有助於在遭受攻擊、損壞甚至無意遺失(刪除)時挽回資訊。無論是哪種負面事件導致資料遺失,保留伺服器資料的複本都能降低風險。
除了勒索軟體攻擊之外,頻繁備份還有助於對長期系統攻擊進行可衡量的調查。如果您沒有將資料安全地儲存在外部備份中,要確定攻擊來源以及哪些資料遭到入侵可能會非常困難,甚至是不可能的。
實施頻繁備份
在備份系統時,將「可驗證地復原損壞、遭入侵或刪除的資料」視為復原工作的目標是至關重要的。最簡單的思考方式是:如果您的伺服器明天消失了,需要採取哪些行動才能以最少的工作量讓您重新恢復運作。
以下是在思考災難復原計劃時需要考慮的其他一些要點:
- 如果您正在處理動態變化的資料,您的備份可能需要更頻繁。在資料遺失的情況下,如果您的上一次備份時間太久,您可能會被迫恢復到過時的資料。
- 思考一下實際的備份還原過程。是否需要為此新增一台伺服器,還是可以還原現有的伺服器?
- 您的伺服器最長可以承受多長時間無法運作?
- 異地備份是必要的解決方案嗎?
要了解更多關於 CloudSigma 的災難復原解決方案,請查看我們的部落格文章,其中詳細介紹了 為什麼我們的災難復原即服務(Disaster-Recovery-as-a-Service)是雲端的完美伴侶。在這裡您可以了解更多關於 CloudSigma 的安全性 & 業務連續性功能。我們還有一份詳細的指南,介紹 如何輕鬆設定 CloudSigma 的備份功能.
私有網路與 VPN
私有網路是僅供特定使用者或伺服器存取和使用的網路。遠端裝置之間的安全連線,使該連線能夠像在私有網路中一樣運作,這就是 VPN(虛擬私有網路)。它為您提供了在私有網路中保護連線安全以及連接遠端伺服器的能力。

私有網路如何增強安全性?
當內部通訊可以選擇使用公用網路或私有網路時,後者總是首選。然而,請記住,資料中心內的其他使用者仍然能夠存取同一個網路。這意味著仍必須採取補充安全措施,以確保伺服器之間的通訊安全。
從本質上講,使用 VPN 是一種界定組織員工可以看到什麼內容的方法。通訊將是完全安全且私密的。應用程式設定將允許虛擬介面流量通過 VPN。這樣一來,只有那些旨在透過網際網路與用戶端進行互動的服務才會被允許暴露在公用網路上。
實作 VPN 有多困難?
對於您的資料中心而言,利用私有網路非常簡單,只需將您的應用程式和防火牆設定為使用私有網路,並在建立伺服器期間啟用 VPN 即可。重要的是要記住,其他伺服器與整個資料中心的私有網路共享相同的網路空間。
VPN 的初始設定稍微複雜一些。然而,對於大多數使用案例來說,這所增加的安全性是值得的。設定資料和共享安全性需要安裝並設定在網路上的每台伺服器上。欲了解更多關於 VPN 如何運作以及在 Ubuntu 上設定 OpenVPN 的概述,請遵循此指南。 您也可以參考本教學,它將引導您完成 將 VPN 網路連接到 CloudSigma 基礎設施的步驟.
SSL/TLS 加密與公開金鑰基礎建設

用於識別個人身分和通訊加密的憑證產生、管理和驗證被稱為公開金鑰基礎建設(PKI)。不同的實體可以透過使用 SSL 或 TLS 憑證進行相互驗證。之後,它們也可用於建立加密通訊。
憑證如何增強安全性
為了在伺服器上加密流量並驗證成員身分,建立憑證授權單位(CA)並能夠查看您網路的所有憑證至關重要。這有助於防止「中間人」攻擊,即駭客模仿伺服器並將流量重新導向。
每台伺服器的設定都可以設為信任集中式 CA。隨後的任何憑證簽章都可以被隱式信任。如果您的伺服器所使用的協定和應用程式支援 SSL/TLS 加密,您就可以在沒有 VPN 隧道額外負擔的情況下保護您的系統安全。欲了解更多資訊,請參考我們的 關於如何為 Nginx 自動化 LetsEncrypt SSL 憑證更新的教學.
實作難度
在設定憑證授權機構(CA)以及隨後建置其餘 PKI 時,初期可能需要投入大量精力。此外,當需要建立、撤銷或簽署新憑證時,還需要額外的管理工作。
由於大多數基礎設施都需要擴展,因此實施完整的 PKO 是最明智的方法。在達到 PKI 值得投入額外管理成本的階段之前,利用 VPN 來保護系統組件的安全可以作為一種足夠的權宜之計。
偵測系統入侵與利用檔案稽核
檔案稽核是一種用於將系統在完全安全、良好狀態下的檔案及其屬性,與系統當前狀態進行比較的過程。這是尋找並隔離未授權系統變更的好方法。

一個 IDS,入侵偵測系統,是指監控系統上任何未授權活動的監控軟體。通常,它會使用檔案稽核方法來尋找任何非預期的系統變更。
IDS/檔案稽核對安全性的提升
除了僅進行服務層級的稽核外,執行檔案層級的稽核對於確保系統安全也至關重要。這可以透過自動化的 IDS 流程來完成,或者由系統管理員定期執行。
檔案稽核和 IDS 是確保系統沒有發生任何非預期變更的唯一真正流程。大多數入侵者都希望長期利用他們入侵的伺服器,為了做到這一點,他們必須保持其行為的隱蔽性。他們可能會用含有漏洞或被篡改的版本來替換二進位檔案。系統中任何被修改過的檔案都會被檔案系統稽核偵測到。這能讓您非常快速地得知系統的完整性是否已遭到破壞,從而感到安心。
實施難度等級
實施 IDS 和檔案稽核可能是一個非常繁重的過程。在開始時,必須設定系統以定義要排除的路徑,並確立對系統所做的非標準變更,以便建立系統的基準讀數。
日常營運也會變得更加繁瑣,因為在執行任何更新之前,程序都需要重新檢查系統。系統測量的基準也需要重新建立或重新確立,以將軟體版本變更納入系統的新基準中。稽核報告還需要轉移到另一個位置。那’是因為您需要防止系統入侵者透過掩蓋痕跡來修改稽核記錄以保持隱蔽。
雖然這無疑增加了系統的管理負擔,但這是確保沒有任何檔案在您不知情的情況下被修改的唯一萬無一失的方法之一。一些最受歡迎的入侵偵測和檔案稽核系統是 Aide 和 Tripwire.
隔離環境
任何將個別組件運行在各自專用空間中的方法,都被稱為隔離執行環境。

這可能意味著特定的應用程式組件將託管在各自專用的伺服器上,或者您的服務可能被設定為在 chroot 環境(或容器)中運行。環境的隔離程度主要取決於您基礎設施的實際情況以及應用程式的需求。
透過隔離環境提升安全性
透過將您的程序隔離到個別的環境中,您也隔離了哪些程序可能會受到安全性漏洞的影響。就像船上的隔艙和艙壁有助於控制船體破裂一樣,當您將系統的各個部分和組件分開時,即使入侵者獲取了其中一個的存取權限,他們也無法進入整個互連的網路系統。
實施難度
隔離應用程式的複雜度因您決定使用的容器類型而異。Docker 並不將隔離視為一項安全功能。然而,當您的組件被拆分到不同的容器中時,隔離會更容易實現。您可以參考這篇 在我們的基礎架構上安裝 Docker 的教學.
當設置 chroot 環境時,也會提供一定程度的隔離。然而,這並不是一個完全無法攻破的方法,因為有方法可以脫離這種環境。為不同的組件使用專用機器通常是實現隔離最好且最簡單的方法。然而,由於需要額外的機器,這項做法的成本較高。
結語
提供的策略只是您可以採取以提高系統安全性的一些步驟。值得注意的是,您越晚實施安全功能,其效果就越低。考慮到這一點,確保安全工作不應拖延是非常重要的。相反地,它應該作為構建基礎架構的首要準備工作之一來實施。一旦您的系統在基準保護下足夠安全,您就可以開始啟用服務並附加應用程式,同時確信它們預設是在安全的環境中運行。
然而,安全並非一個靜止不變的過程,而是一個流動的過程。它需要不斷維護和迭代。應以保持警惕和持續關注的心態來對待它。務必經常思考任何系統變更所涉及的安全影響。 確保運行環境和預設配置始終在優化安全性,並與具有足夠防禦力的軟體協同工作。
祝您運算愉快!
留言
目前尚無留言。成為第一個留言的人吧。