為您的Linux服務器考慮哪些技術以幫助提高SSH安全性

      SSH是 Linux 服務器的通用系統管理實用程序。無論您運行的是 CentOS、Debian、Ubuntu 還是介于兩者之間的任何系統;如果您以前登錄過 Linux 服務器,您可能至少聽說過它。

      為您的Linux服務器考慮哪些技術以幫助提高SSH安全性-南華中天

      SSH 的縮寫代表“Secure Socket Shell”,顧名思義,該協議在構建時就考慮到了安全性。許多服務器管理員認為 SSH 開箱即用就非常安全,而且在大多數情況下,他們是正確的。默認情況下,SSH 具有出色的開箱即用安全功能,例如通信加密以防止中間人攻擊,以及主機密鑰驗證以在用戶上次登錄后服務器身份發生更改時提醒用戶。

      盡管如此,Internet 上仍有大量運行 SSH 的服務器,攻擊者喜歡尋找可能影響大量服務器的攻擊媒介。為了安全,往往會犧牲便利性,因此許多服務器管理員有意或不假思索地讓他們的服務器運行默認的 SSH 安裝。在大多數情況下,這對他們中的大多數人來說都不是問題,但是您可以采取一些步驟來領先一步。畢竟,我相信稍微領先一點是可以達到的最佳安全實踐之一,這樣您的服務器就可以避免成為容易吸引攻擊者的懸而未決的成果之一。

      考慮到這一點,您可能希望為您的 Linux 服務器考慮一些技術,以幫助提高 SSH 安全性。

      蠻力保護

      提高 SSH 安全性的最常用技術之一是暴力破解保護。這是因為運行 SSH 服務的服務器管理員面臨的最常見的安全問題之一是來自自動機器人的暴力攻擊。機器人會嘗試猜測服務器上的用戶名和密碼,但暴力保護可以在一定次數的失敗后自動禁止其 IP 地址。

      一些常見的開源暴力破解保護解決方案是ConfigServer Firewall (CSF)和Fail2Ban。CSF 在 cPanel 服務器上最常見,因為它有一個 WHM 插件。

      蠻力保護的優缺點

      優點

      將通過自動禁止機器人來幫助減少機器人登錄失敗,從而大大降低機器人有機會猜測您的 SSH 帳戶之一的登錄詳細信息的可能性。

      非常容易實施,無需更改所需的 SSH 配置。

      缺點

      這些蠻力程序無法將機器人與您和您的用戶區分開來。如果您不小心多次登錄失敗,您可能會將自己鎖在門外。如果發生這種情況,請確保您有可靠的方法來訪問服務器,例如將您自己的 IP 地址列入白名單,并使用 KVM 或 IPMI 控制臺作為最后的手段。

      更改 SSH 端口號

      我看到的最常見的技術之一是將 SSH 端口號更改為默認端口 22/tcp 以外的其他端口號。

      此更改相對簡單,例如,如果您想將 SSH 端口從 22 更改為 2222,您只需要像這樣更新 sshd_config 文件的端口行: 順便說一下,端口 2222 是一個很常見的

      Port 2222

      端口“備用”端口,因此一些暴力機器人可能仍會嘗試此端口。最好選擇更隨機的東西,例如 2452。它甚至不必包含 2,如果您愿意,您的 SSH 端口可以是 6543。任何未被服務器上的其他程序使用的最大 65535 的端口號都是公平的。

      更改 SSH 端口號的優缺點

      優點

      • 這種技術在減少自動機器人攻擊方面通常非常有效。其中大部分是非智能腳本,只會尋找在端口 22 上運行的服務器。

      缺點

      • 這種技術相當于“默默無聞的安全”。正在嘗試備用端口的機器人或任何配備了 nmap 等端口掃描工具的人都可以在幾分鐘內輕松找到服務器的新端口。
      • 這種技術會使 SSH 服務器的訪問更加不便,因為您現在需要在連接時指定端口號,而不僅僅是 IP。

      通過 SSH 禁用根登錄

      另一種常見技術是完全禁止 root 用戶帳戶通過 SSH 登錄,或者在沒有授權 SSH 密鑰的情況下登錄。您仍然可以通過 SSH 獲得 root 訪問權限,方法是向您的一個受限用戶授予“sudo”權限,或者使用“su”命令使用密碼切換到 root 帳戶。

      這可以通過調整 sshd_config 文件中的“PermitRootLogin”設置來配置。

      要僅允許使用 SSH 密鑰進行 root 登錄,您可以將行更改為:PermitRootLogin without-password

      要完全禁止通過 SSH 進行 root 登錄,您可以將行更改為:PermitRootLogin no

      通過 SSH 禁用根登錄的優缺點

      優點

      這種技術有點用處,因為用戶名“root”對于大多數 LInux 服務器來說很常見(比如 Windows 服務器上的“Administrator”),所以很容易猜到。現在禁止此帳戶登錄意味著攻擊者還必須正確猜測用戶名才能獲得訪問權限。

      如果您不使用 sudo,此技術會將 root 訪問置于第二個密碼之后,要求攻擊者在獲得對服務器的完全訪問權限之前正確知道或猜測兩個密碼。(Sudo 會在一定程度上減少這種好處,因為通常它被配置為允許使用與用戶登錄時相同的密碼進行 root 訪問。)

      缺點

      如果您的 sudo 配置出現問題,此方法可能會增加您被鎖定在服務器之外的風險。如果您被鎖定在 root 之外,使用此方法訪問服務器仍然是一個好主意,例如遠程控制臺。

      禁用密碼驗證,支持密鑰驗證

      關于密碼,每個人告訴您的第一件事就是密碼要長,難以猜測,并且不要基于字典單詞。SSH 密鑰可以用密鑰文件的身份驗證代替密碼身份驗證。

      與密碼相比,SSH 密鑰非常安全,因為它們包含大量隨機數據。如果您見過 SSL 證書或密鑰文件,SSH 密鑰看起來與此類似。這是一串非常大的隨機字符。

      您無需輸入密碼即可登錄 SSH 服務器,而是使用此密鑰文件進行身份驗證,這與網站上 SSL 證書的工作方式大致相同。

      如果您想禁用密碼身份驗證,可以通過修改 sshd_config 文件中的“PasswordAuthentication”設置來實現,如下所示:PasswordAuthentication no

      禁用密碼身份驗證的優點和缺點,有利于密鑰身份驗證。

      優點

      • 此方法大大降低了針對 SSH 服務器的暴力破解嘗試成功的可能性。
      • 大多數暴力機器人只是嘗試密碼開始,他們將使用完全錯誤的身份驗證方法來嘗試闖入,因此這些機器人永遠不會成功。
      • 即使有人在進行有針對性的攻擊,SSH 密鑰也比密碼長得多,以至于正確猜測一個密碼要困難幾個數量級,這僅僅是因為有太多的熵和潛在的組合。

      缺點

      • 這種技術會使訪問服務器變得不那么方便。如果您手邊沒有密鑰文件,您將無法通過 SSH 登錄。
      • 由于上述原因,您也增加了被 SSH 鎖定的風險,例如,如果您丟失了密鑰文件。因此,如果您需要讓自己重新進入,最好有一種替代方法來訪問服務器,例如遠程控制臺。

      如果有人得到了您的密鑰文件,就像密碼一樣,他們現在將能夠以您的身份登錄。但是,與密碼不同,密鑰可以很容易地過期并創建新密鑰,并且新密鑰將以相同的方式運行。

      關于 SSH 密鑰方法的另一個有趣的怪癖是您可以在一個帳戶上授權多個 SSH 密鑰,而一個帳戶通常只能有一個密碼。

      值得注意的是,即使打開了密碼驗證,您也可以使用 SSH 密鑰訪問帳戶。默認情況下,如果您授權密鑰,SSH 密鑰將用作身份驗證方法。

      僅允許列入白名單的 IP

      一種非常有效的安全技術是只允許列入白名單的 IP 地址連接到 SSH 服務器。這可以通過防火墻規則來完成,只打開授權 IP 地址的 SSH 端口。

      這對于家庭用戶或共享網絡托管服務提供商來說可能不切實際,因為很難知道哪些 IP 地址需要訪問,而且家庭 IP 地址往往是動態的,因此您的 IP 地址可能會發生變化。但是,對于您使用 VPN 或主要從靜態 IP 地址訪問的情況,它可能是一種維護成本低且極其安全的解決方案。

      僅允許列入白名單的 IP 的優點和缺點

      優點

      • 這種方法提供了非常強大的安全性,因為攻擊者需要已經訪問您列入白名單的 IP 之一才能嘗試通過 SSH 登錄。
      • 可以說,這種方法可以取代對暴力保護或禁用密碼驗證等其他安全方法的需求,因為現在基本上消除了暴力攻擊的威脅。

      缺點

      • 這種方法會增加您被鎖定在服務器之外的機會,尤其是當您位于 IP 地址可能會更改的位置時,例如住宅 Internet 連接。
      • 訪問的便利性也會降低,因為您將無法從未提前列入白名單的位置訪問服務器。
      • 這需要付出一些努力,因為您現在必須根據需要更改通過添加和刪除 IP 來維護您的 IP 地址白名單。

      在我自己的個人服務器上,這通常是我使用的技術。這樣我仍然可以方便地使用密碼進行身份驗證并使用普通的 SSH 端口,同時具有很強的安全性。我也經常更換我的服務器,在需要時創建新的,我發現實現這個白名單是讓我的新服務器安全而不干擾其他配置的最快方法,我可以簡單地從另一臺服務器復制我的白名單。

      混合方法:允許來自 IP 列表的密碼,但允許來自所有 IP 的密鑰。

      如果您喜歡,可以實施多種“混合”方法,這些方法結合了這些安全技術中的一種或多種。

      我曾經遇到過GigeNET的一位客戶的情況,他們想為員工提供密碼訪問權限,以便他們可以在我們的檔案中留下密碼,但他們只想自己使用密鑰身份驗證,而不想打開密碼身份驗證到互聯網。

      這實際上實現起來非常簡單,它提供了禁用密碼驗證的大部分安全性,同時在大多數情況下仍然允許密碼驗證的便利性。

      為此,您需要將以下行添加到您的 sshd_config:

      # Global Setting to disable password authentication

      PasswordAuthentication no

      [...]

      # Override the Global Settings for IP Whitelist

      # Place this section at the -end- of your sshd_config file.

      Match address 1.2.3.4/32

      PasswordAuthentication yes

      對于上述,1.2.3.4 是列入白名單的 IP 地址。您可以重復該配置部分以將多個 IP 列入白名單,并且可以將 /32 更改為另一個 IPv4 CIDR,例如 /28、/27 等,以便將一系列 IP 列入白名單。

      請記住,匹配地址塊應該放在 sshd_config 文件的最后。

      混合方法的優點和缺點

      優點

      這種技術可以通過防止密碼在大多數 Internet 上工作來提供密鑰身份驗證的安全性,但允許從頻繁訪問的位置進行密碼身份驗證的便利性。因此,它允許您在保持大部分安全性的同時減少一些缺點。如果您的 IP 地址發生變化并且您不再被列入白名單,只要您將密鑰文件保存在本地,您仍然可以使用 SSH 登錄。

      缺點

      與 IP 白名單防火墻方法一樣,此方法需要一些維護,因為如果您的 IP 地址更改或您需要將其他位置列入白名單,您必須更新 SSH 配置,但與其他方法不同,在這里更新白名單不太重要,因為您仍然可以訪問通過 key 方法,即使你沒有被列入白名單。

      最終,您必須選擇最適合您的用例的內容

      希望這個技術和示例列表提供了一些思考,供您在保護服務器安全時使用:風險是什么以及存在哪些可能的技術來減輕這些風險。根據您認為服務器安全性的重要性,以及實施各種安全解決方案以減輕您關注的風險的實用性,您可以選擇一種或多種技術來推進。

      歸根結底,我總是提醒大家,安全是相對的。你永遠不會有任何完全無法理解的東西,最主要的是讓自己至少比其他人領先一步。即使您只實施了這些安全實踐中的一種,您也比大量使用默認設置運行的 Linux 服務器更安全,并且 SSH 對任何想要嘗試登錄的人都開放。