SSH是 Linux 服務器的常用系統管理實用程序。無論您是在運行 CentOS、Debian、Ubuntu 還是介于兩者之間的任何東西;如果您以前登錄過 Linux 服務器,那么您可能至少聽說過它。
首字母縮略詞 SSH 代表“安全套接字外殼”,顧名思義,該協議的構建考慮了安全性。許多服務器管理員認為 SSH 開箱即用是非常安全的,而且在大多數情況下,他們是正確的。默認情況下,SSH 具有開箱即用的出色安全功能,例如對通信進行加密以防止中間人攻擊,以及主機密鑰驗證以提醒用戶自上次登錄后服務器的身份是否發生變化。
盡管如此,互聯網上仍有大量服務器運行 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 文件的 Port 行:
Port 2222
順便說一句,端口 2222 是一個非常常見的“備用”端口,因此一些蠻力機器人可能仍會嘗試此端口。最好選擇更隨機的東西,比如 2452。它甚至不必包含 2,如果你想要的話,你的 SSH 端口可以是 6543。任何不被服務器上其他程序使用的端口號高達 65535 都是公平的游戲。
更改 SSH 端口號的優缺點
優點
- 這種技術通常在減少自動機器人攻擊方面非常有效。其中大部分是非智能腳本,只會尋找在端口 22 上運行的服務器。
缺點
- 這種技術相當于“默默無聞的安全”。正在嘗試備用端口的機器人或任何配備了諸如 nmap 之類的端口掃描工具的人將在幾分鐘內輕松找到服務器的新端口。
- 這種技術會使 SSH 服務器的訪問更加不便,因為您現在需要在連接時指定端口號,而不僅僅是 IP。
通過 SSH 禁用 Root 登錄
另一種常見的技術是完全禁用 root 用戶帳戶通過 SSH 登錄,或者沒有授權的 SSH 密鑰。您仍然可以通過 SSH 獲得 root 訪問權限,方法是向您的受限用戶之一授予“sudo”權限,或者使用“su”命令使用密碼切換到 root 帳戶。
這可以通過調整 sshd_config 文件中的“PermitRootLogin”設置來配置。
要僅允許使用 SSH 密鑰進行 root 登錄,您可以將這一行更改為:
PermitRootLogin without-password
要完全禁止通過 SSH 進行 root 登錄,您可以將該行更改為:
PermitRootLogin no
通過 SSH 禁用 Root 登錄的優缺點
優點
- 這種技術有點幫助,因為用戶名“root”對于大多數 LInux 服務器(如 Windows 服務器上的“Administrator”)是通用的,所以很容易猜到。現在禁用此帳戶登錄意味著攻擊者還必須正確猜測用戶名才能獲得訪問權限。
- 如果您不使用 sudo,此技術會將 root 訪問權限置于第二個密碼之后,要求攻擊者在完全訪問服務器之前正確知道或猜測兩個密碼。(Sudo 可以在一定程度上減少這種好處,因為它通常被配置為允許使用與用戶登錄相同的密碼進行 root 訪問。)
缺點
- 如果您的 sudo 配置出現問題,這種方法可能會增加您被鎖定在服務器之外的風險。在這種方法中,如果您被鎖定在 root 之外,使用另一種訪問服務器的方法(例如遠程控制臺)仍然是一個好主意。
禁用密碼驗證,支持密鑰驗證。
每個人告訴你的關于密碼的第一件事就是讓它們變長,難以猜測,而不是基于字典單詞。SSH 密鑰可以將密碼驗證替換為通過密鑰文件進行的驗證。
與密碼相比,SSH 密鑰非常安全,因為它們包含大量隨機數據。如果您曾經看過 SSL 證書或密鑰文件,那么 SSH 密鑰看起來與此類似。這是一個非常大的隨機字符串。
您無需輸入密碼即可登錄 SSH 服務器,而是使用此密鑰文件進行身份驗證,這與網站上 SSL 證書的工作方式非常相似。
如果您想禁用密碼驗證,您可以通過修改 sshd_config 文件中的“PasswordAuthentication”設置來實現,如下所示:
密碼驗證無
禁用密碼身份驗證的優點和缺點,有利于密鑰身份驗證。
優點
- 此方法大大降低了對您的 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 的密鑰。
如果您想花點心思,可以實施許多“混合”方法,它們結合了這些安全技術中的一種或多種。我曾經在與我們的一位客戶遇到過這樣一種情況,他們希望為員工提供密碼訪問權限,以便他們可以將密碼留給我們存檔,但他們只想自己使用密鑰身份驗證而不打開密碼身份驗證到互聯網。
這實際上實現起來非常簡單,它提供了禁用密碼驗證的大部分安全性,同時在大多數情況下仍然允許密碼驗證的便利性。
為此,您需要將以下行添加到 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 對任何想要嘗試登錄的人都開放。