SSH是 Linux 服務(wù)器的常用系統(tǒng)管理實(shí)用程序。無論您是在運(yùn)行 CentOS、Debian、Ubuntu 還是介于兩者之間的任何東西;如果您以前登錄過 Linux 服務(wù)器,那么您可能至少聽說過它。
首字母縮略詞 SSH 代表“安全套接字外殼”,顧名思義,該協(xié)議的構(gòu)建考慮了安全性。許多服務(wù)器管理員認(rèn)為 SSH 開箱即用是非常安全的,而且在大多數(shù)情況下,他們是正確的。默認(rèn)情況下,SSH 具有開箱即用的出色安全功能,例如對(duì)通信進(jìn)行加密以防止中間人攻擊,以及主機(jī)密鑰驗(yàn)證以提醒用戶自上次登錄后服務(wù)器的身份是否發(fā)生變化。
盡管如此,互聯(lián)網(wǎng)上仍有大量服務(wù)器運(yùn)行 SSH,攻擊者喜歡尋找可能影響大量服務(wù)器的攻擊媒介。在安全性方面,往往會(huì)犧牲便利性,因此許多服務(wù)器管理員有意或不加思索地讓他們的服務(wù)器運(yùn)行默認(rèn)的 SSH 安裝。在大多數(shù)情況下,這對(duì)他們中的大多數(shù)人來說不是問題,但是您可以采取一些步驟來領(lǐng)先一步。畢竟,我相信稍微領(lǐng)先一點(diǎn)是可以達(dá)到的最佳安全實(shí)踐之一,這樣您的服務(wù)器就可以避免成為可能吸引攻擊者的低垂果實(shí)之一。
考慮到這一點(diǎn),這里有一些你可能想要為你的 Linux 服務(wù)器考慮的技術(shù),以幫助提高你的 SSH 安全性。
蠻力保護(hù)
提高 SSH 安全性的最常用技術(shù)之一是蠻力保護(hù)。這是因?yàn)檫\(yùn)行 SSH 服務(wù)的服務(wù)器管理員面臨的最常見的安全問題之一是來自自動(dòng)機(jī)器人的暴力攻擊。機(jī)器人會(huì)嘗試猜測(cè)服務(wù)器上的用戶名和密碼,但暴力保護(hù)可以在一定數(shù)量的失敗后自動(dòng)禁止他們的 IP 地址。
一些常見的開源蠻力保護(hù)解決方案是ConfigServer Firewall (CSF)和Fail2Ban。CSF 在 cPanel 服務(wù)器上最常見,因?yàn)樗幸粋€(gè) WHM 插件。
蠻力保護(hù)的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 通過自動(dòng)禁止它們來幫助減少來自機(jī)器人的登錄失敗,從而使機(jī)器人有機(jī)會(huì)猜測(cè)您的一個(gè) SSH 帳戶的登錄詳細(xì)信息的可能性大大降低。
- 非常容易實(shí)現(xiàn),無需更改 SSH 配置。
缺點(diǎn)
- 這些蠻力程序無法將機(jī)器人與您和您的用戶區(qū)分開來。如果您意外登錄失敗太多次,您可能會(huì)將自己鎖定在外。如果發(fā)生這種情況,請(qǐng)確保您有可靠的方法來連接服務(wù)器,例如將您自己的 IP 地址列入白名單,并使用 KVM 或 IPMI 控制臺(tái)作為最后的手段。
更改 SSH 端口號(hào)
我看到的最常見的技術(shù)之一是將 SSH 端口號(hào)更改為默認(rèn)端口 22/tcp 以外的其他值。 ?
此更改相對(duì)簡(jiǎn)單,例如,如果您想將 SSH 端口從 22 更改為 2222,您只需像這樣更新 sshd_config 文件的 Port 行:
Port 2222
順便說一句,端口 2222 是一個(gè)非常常見的“備用”端口,因此一些蠻力機(jī)器人可能仍會(huì)嘗試此端口。最好選擇更隨機(jī)的東西,比如 2452。它甚至不必包含 2,如果你想要的話,你的 SSH 端口可以是 6543。任何不被服務(wù)器上其他程序使用的端口號(hào)高達(dá) 65535 都是公平的游戲。
更改 SSH 端口號(hào)的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 這種技術(shù)通常在減少自動(dòng)機(jī)器人攻擊方面非常有效。其中大部分是非智能腳本,只會(huì)尋找在端口 22 上運(yùn)行的服務(wù)器。
缺點(diǎn)
- 這種技術(shù)相當(dāng)于“默默無聞的安全”。正在嘗試備用端口的機(jī)器人或任何配備了諸如 nmap 之類的端口掃描工具的人將在幾分鐘內(nèi)輕松找到服務(wù)器的新端口。
- 這種技術(shù)會(huì)使 SSH 服務(wù)器的訪問更加不便,因?yàn)槟F(xiàn)在需要在連接時(shí)指定端口號(hào),而不僅僅是 IP。
通過 SSH 禁用 Root 登錄
另一種常見的技術(shù)是完全禁用 root 用戶帳戶通過 SSH 登錄,或者沒有授權(quán)的 SSH 密鑰。您仍然可以通過 SSH 獲得 root 訪問權(quán)限,方法是向您的受限用戶之一授予“sudo”權(quán)限,或者使用“su”命令使用密碼切換到 root 帳戶。
這可以通過調(diào)整 sshd_config 文件中的“PermitRootLogin”設(shè)置來配置。
要僅允許使用 SSH 密鑰進(jìn)行 root 登錄,您可以將這一行更改為:
PermitRootLogin without-password
要完全禁止通過 SSH 進(jìn)行 root 登錄,您可以將該行更改為:
PermitRootLogin no
通過 SSH 禁用 Root 登錄的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 這種技術(shù)有點(diǎn)幫助,因?yàn)橛脩裘皉oot”對(duì)于大多數(shù) LInux 服務(wù)器(如 Windows 服務(wù)器上的“Administrator”)是通用的,所以很容易猜到?,F(xiàn)在禁用此帳戶登錄意味著攻擊者還必須正確猜測(cè)用戶名才能獲得訪問權(quán)限。
- 如果您不使用 sudo,此技術(shù)會(huì)將 root 訪問權(quán)限置于第二個(gè)密碼之后,要求攻擊者在完全訪問服務(wù)器之前正確知道或猜測(cè)兩個(gè)密碼。(Sudo 可以在一定程度上減少這種好處,因?yàn)樗ǔ1慌渲脼樵试S使用與用戶登錄相同的密碼進(jìn)行 root 訪問。)
缺點(diǎn)
- 如果您的 sudo 配置出現(xiàn)問題,這種方法可能會(huì)增加您被鎖定在服務(wù)器之外的風(fēng)險(xiǎn)。在這種方法中,如果您被鎖定在 root 之外,使用另一種訪問服務(wù)器的方法(例如遠(yuǎn)程控制臺(tái))仍然是一個(gè)好主意。
禁用密碼驗(yàn)證,支持密鑰驗(yàn)證。
每個(gè)人告訴你的關(guān)于密碼的第一件事就是讓它們變長(zhǎng),難以猜測(cè),而不是基于字典單詞。SSH 密鑰可以將密碼驗(yàn)證替換為通過密鑰文件進(jìn)行的驗(yàn)證。
與密碼相比,SSH 密鑰非常安全,因?yàn)樗鼈儼罅侩S機(jī)數(shù)據(jù)。如果您曾經(jīng)看過 SSL 證書或密鑰文件,那么 SSH 密鑰看起來與此類似。這是一個(gè)非常大的隨機(jī)字符串。
您無需輸入密碼即可登錄 SSH 服務(wù)器,而是使用此密鑰文件進(jìn)行身份驗(yàn)證,這與網(wǎng)站上 SSL 證書的工作方式非常相似。
如果您想禁用密碼驗(yàn)證,您可以通過修改 sshd_config 文件中的“PasswordAuthentication”設(shè)置來實(shí)現(xiàn),如下所示:
密碼驗(yàn)證無
禁用密碼身份驗(yàn)證的優(yōu)點(diǎn)和缺點(diǎn),有利于密鑰身份驗(yàn)證。
優(yōu)點(diǎn)
- 此方法大大降低了對(duì)您的 SSH 服務(wù)器的暴力嘗試成功的可能性。
- 大多數(shù)蠻力機(jī)器人一開始只是嘗試輸入密碼,他們將使用完全錯(cuò)誤的身份驗(yàn)證方法嘗試闖入,因此這些機(jī)器人永遠(yuǎn)不會(huì)成功。
- 即使有人在進(jìn)行有針對(duì)性的攻擊,SSH 密鑰也比密碼長(zhǎng)得多,以至于正確猜測(cè)一個(gè)數(shù)量級(jí)要困難幾個(gè)數(shù)量級(jí),這僅僅是因?yàn)榇嬖谌绱硕嗟撵睾蜐撛诘慕M合。
缺點(diǎn)
- 這種技術(shù)會(huì)使訪問服務(wù)器變得不那么方便。如果您手邊沒有密鑰文件,您將無法通過 SSH 登錄。
- 由于上述原因,您也增加了被鎖定在 SSH 之外的風(fēng)險(xiǎn),例如,如果您丟失了密鑰文件。因此,如果您需要讓自己重新進(jìn)入服務(wù)器,最好有另一種訪問服務(wù)器的方法,例如遠(yuǎn)程控制臺(tái)。
如果有人掌握了您的密鑰文件,就像密碼一樣,他們現(xiàn)在將能夠以您的身份登錄。但是,與密碼不同,密鑰很容易過期并創(chuàng)建新密鑰,并且新密鑰將以相同的方式運(yùn)行。
關(guān)于 SSH 密鑰方法的另一個(gè)有趣的怪癖是您可以在一個(gè)帳戶上授權(quán)多個(gè) SSH 密鑰,而一個(gè)帳戶通常只能有一個(gè)密碼。
值得注意的是,即使打開了密碼驗(yàn)證,您也可以使用 SSH 密鑰訪問帳戶。默認(rèn)情況下,如果您授權(quán)密鑰,SSH 密鑰將用作身份驗(yàn)證方法。
僅允許列入白名單的 IP
一種非常有效的安全技術(shù)是只允許列入白名單的 IP 地址連接到 SSH 服務(wù)器。這可以通過防火墻規(guī)則來完成,只向授權(quán)的 IP 地址開放 SSH 端口。
這對(duì)于家庭用戶或共享網(wǎng)絡(luò)托管服務(wù)提供商來說可能是不切實(shí)際的,因?yàn)楹茈y知道哪些 IP 地址需要訪問,而且家庭 IP 地址往往是動(dòng)態(tài)的,因此您的 IP 地址可能會(huì)改變。但是,對(duì)于您使用 VPN 或主要從靜態(tài) IP 地址訪問的情況,它可能是一種低維護(hù)且極其安全的解決方案。
僅允許列入白名單的 IP 的利弊
優(yōu)點(diǎn)
- 這種方法提供了非常強(qiáng)大的安全性,因?yàn)楣粽咝枰呀?jīng)訪問您的白名單 IP 之一才能嘗試通過 SSH 登錄。
- 可以說,這種方法可以取代對(duì)其他安全方法的需求,例如暴力保護(hù)或禁用密碼身份驗(yàn)證,因?yàn)楝F(xiàn)在暴力攻擊的威脅已經(jīng)基本消除。
缺點(diǎn)
- 這種方法會(huì)增加您被鎖定在服務(wù)器之外的機(jī)會(huì),尤其是如果您位于 IP 地址可能會(huì)更改的位置,例如住宅 Internet 連接。
- 訪問的便利性也降低了,因?yàn)槟鷮o法從未提前列入白名單的位置訪問服務(wù)器。
- 這需要付出一些努力,因?yàn)槟F(xiàn)在必須根據(jù)需要更改添加和刪除 IP,從而維護(hù)您的 IP 地址白名單。
在我自己的個(gè)人服務(wù)器上,這通常是我使用的技術(shù)。這樣我仍然可以方便地使用密碼進(jìn)行身份驗(yàn)證和使用普通的 SSH 端口,同時(shí)具有很強(qiáng)的安全性。我還經(jīng)常更換我的服務(wù)器,在需要時(shí)創(chuàng)建新的服務(wù)器,我發(fā)現(xiàn)實(shí)施這個(gè)白名單是讓我的新服務(wù)器安全而又不影響其他配置的最快方法,我可以簡(jiǎn)單地從另一臺(tái)服務(wù)器復(fù)制我的白名單。
混合方法:允許來自 IP 列表的密碼,但允許來自所有 IP 的密鑰。
如果您想花點(diǎn)心思,可以實(shí)施許多“混合”方法,它們結(jié)合了這些安全技術(shù)中的一種或多種。我曾經(jīng)在與我們的一位客戶遇到過這樣一種情況,他們希望為員工提供密碼訪問權(quán)限,以便他們可以將密碼留給我們存檔,但他們只想自己使用密鑰身份驗(yàn)證而不打開密碼身份驗(yàn)證到互聯(lián)網(wǎng)。
這實(shí)際上實(shí)現(xiàn)起來非常簡(jiǎn)單,它提供了禁用密碼驗(yàn)證的大部分安全性,同時(shí)在大多數(shù)情況下仍然允許密碼驗(yàn)證的便利性。
為此,您需要將以下行添加到 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
對(duì)于上述情況,1.2.3.4 是列入白名單的 IP 地址。您可以重復(fù)配置的該部分以將多個(gè) IP 列入白名單,并且可以將 /32 更改為另一個(gè) IPv4 CIDR,例如 /28、/27 等,以便將一系列 IP 列入白名單。
請(qǐng)記住,匹配地址塊應(yīng)該放在 sshd_config 文件的最后。
混合方法的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 這種技術(shù)可以通過防止密碼在大多數(shù) Internet 上工作來提供密鑰驗(yàn)證的安全性,但允許從頻繁訪問位置進(jìn)行密碼驗(yàn)證的便利性。因此,它可以讓您在保持大部分安全性的同時(shí)減少一些缺點(diǎn)。
- 如果您的 IP 地址發(fā)生更改并且您不再被列入白名單,您仍然可以使用密鑰文件通過 SSH 登錄,只要您將其保存在本地即可。
缺點(diǎn)
- 與 IP 白名單防火墻方法一樣,此方法需要一些維護(hù),因?yàn)槿绻?IP 地址更改或您需要將其他位置列入白名單,您必須更新您的 SSH 配置,但與其他方法不同,此處更??新白名單不太重要,因?yàn)槟匀豢梢栽L問即使您沒有被列入白名單,也可以通過 key 方法。
最終,您將不得不選擇最適合您的用例的方案。 ?
希望這份技術(shù)和示例列表為您在保護(hù)服務(wù)器安全時(shí)可以使用提供一些思考的食物:風(fēng)險(xiǎn)是什么以及存在哪些可能的技術(shù)來減輕風(fēng)險(xiǎn)。根據(jù)您認(rèn)為服務(wù)器安全性的重要性,以及實(shí)施各種安全解決方案以減輕您擔(dān)心的風(fēng)險(xiǎn)的實(shí)用性,您可以選擇一種或多種技術(shù)來推進(jìn)。
歸根結(jié)底,我總是提醒大家,安全是相對(duì)的。你永遠(yuǎn)不會(huì)有任何完全無法穿透的東西,最重要的是讓自己至少領(lǐng)先其他人一步。即使您只實(shí)施這些安全實(shí)踐中的一種,您也比使用默認(rèn)設(shè)置運(yùn)行的大量 Linux 服務(wù)器更安全,并且 SSH 對(duì)任何想要嘗試登錄的人都開放。