如何優(yōu)化 SSH 體驗(yàn)并保護(hù)服務(wù)器免受未經(jīng)授權(quán)的訪問
SSH(Secure Shell)是一種協(xié)議,使您能夠創(chuàng)建經(jīng)過驗(yàn)證的私有連接,使用加密密鑰保護(hù)通道,以便在另一臺(tái)機(jī)器上啟動(dòng)遠(yuǎn)程Shell。使用此連接,您可以執(zhí)行遠(yuǎn)程命令、啟動(dòng)安全文件傳輸、轉(zhuǎn)發(fā)套接字、顯示和服務(wù)等等。
在 SSH 出現(xiàn)之前,大多數(shù)遠(yuǎn)程管理都是通過 telnet 完成的,公平地說,一旦您可以建立遠(yuǎn)程會(huì)話,您幾乎可以做任何您需要的事情。該協(xié)議的問題在于流量以純明文形式未經(jīng)加密傳輸。使用流量嗅探器 查看會(huì)話中的所有數(shù)據(jù)包(包括包含用戶名和密碼的數(shù)據(jù)包)并不費(fèi)力 。
使用 SSH,由于使用了非對(duì)稱密鑰,參與通信的設(shè)備之間的會(huì)話被加密。如今,這比以往任何時(shí)候都更加重要,所有的云服務(wù)器都受到來自世界各地的管理。
SSH 配置的 3 個(gè)技巧
SSH 協(xié)議最常見的實(shí)現(xiàn)是 OpenSSH,它由 OpenBSD 項(xiàng)目開發(fā),可用于大多數(shù) Linux 和類 Unix 操作系統(tǒng)。安裝此軟件包后,您將擁有一個(gè)名為的文件,該文件sshd_config控制服務(wù)的大部分行為。默認(rèn)設(shè)置通常非常保守,但我傾向于進(jìn)行一些調(diào)整以優(yōu)化我的 SSH 體驗(yàn)并保護(hù)我的服務(wù)器免受未經(jīng)授權(quán)的訪問。
1.更改默認(rèn)端口
并不是所有管理員都記得這個(gè)。即使你改變位置,任何使用端口掃描程序的任何人都可以發(fā)現(xiàn)一個(gè) SSH 端口,因此您幾乎不會(huì)將自己從危險(xiǎn)中解脫出來,但是您可以方便地避免針對(duì)服務(wù)器啟動(dòng)數(shù)百個(gè)簡(jiǎn)單的腳本。你可以幫自己從日志中刪掉大量的干擾。
在本文中,我在一個(gè)云提供商上使用 SSH 服務(wù)器默認(rèn)端口 TCP 22,每分鐘的平均攻擊次數(shù)為 24。在將端口更改為更高的數(shù)字 TCP 45678 后,連接和猜測(cè)任何用戶名或密碼是每天兩個(gè)。
要更改 SSH 的默認(rèn)端口,/etc/ssh/sshd_config請(qǐng)?jiān)谀矚g的文本編輯器中打開并將值 Port 從 22 更改為大于 1024 的某個(gè)數(shù)字。該行可能會(huì)被注釋,因?yàn)?22 是默認(rèn)值(因此不需要顯式聲明在配置中),所以在保存之前取消注釋該行。
Port 2112
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
更改端口并保存文件后,重新啟動(dòng) SSH 服務(wù)器:
linuxmi@linuxmi /home/linuxmi/www.linuxmi.com
? sudo systemctl restart sshd
2.沒有了密碼
隨著雙因素身份驗(yàn)證等方法越來越流行,人們普遍開始停止使用密碼作為身份驗(yàn)證手段。OpenSSH 可以使用非對(duì)稱密鑰進(jìn)行身份驗(yàn)證,因此無需記住復(fù)雜的密碼,更不用說每隔幾個(gè)月更換密碼,或者擔(dān)心有人在您建立遠(yuǎn)程會(huì)話時(shí)“偷偷觀看”。SSH 密鑰的使用允許您快速、安全地登錄到遠(yuǎn)程設(shè)備。這通常意味著處理服務(wù)器本身的錯(cuò)誤用戶名和密碼的時(shí)間更少。登錄非常簡(jiǎn)單。沒有鑰匙,就沒有入口——甚至沒有提示符。
要使用此功能,您必須同時(shí)配置客戶端(就是您面前的計(jì)算機(jī))和服務(wù)器(遠(yuǎn)程計(jì)算機(jī))。
在客戶端計(jì)算機(jī)上,您必須生成一個(gè) SSH 密鑰對(duì)。這由一個(gè)公鑰和一個(gè)私鑰組成。正如他們的名字所暗示的那樣,一個(gè)密鑰供您分發(fā)到您要登錄的服務(wù)器,另一個(gè)是私有的,必須與任何人共享。使用命令創(chuàng)建一個(gè)新密鑰ssh-keygen,并使用該 -t 選項(xiàng)指定一個(gè)好的、最近的加密庫,如ed25519:
linuxmi@linuxmi /home/linuxmi/www.linuxmi.com
? ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/linuxmi/.ssh/id_ed25519):
在創(chuàng)建密鑰期間,系統(tǒng)會(huì)提示您命名文件。您可以按 回車 接受默認(rèn)值。如果您將來創(chuàng)建更多鍵,您可以為每個(gè)鍵指定一個(gè)自定義名稱,但擁有多個(gè)鍵意味著您要指定每次交互使用哪個(gè)鍵,所以現(xiàn)在,只需接受默認(rèn)值即可。
您還可以為您的密鑰提供密碼。這樣可以確保即使其他人設(shè)法獲得了您的私鑰(這本身不應(yīng)該發(fā)生),他們也無法在沒有您的密碼的情況下使用它。對(duì)于某些密鑰,它是一種有用的保護(hù)措施,而對(duì)于其他密鑰(尤其是在腳本中使用的那些)則不適用。按 回車 使您的密鑰不帶密碼或創(chuàng)建密碼(如果您選擇)。
要將您的密鑰復(fù)制到服務(wù)器上,請(qǐng)使用該 ssh-copy-id 命令。例如,如果我擁有一個(gè)名為 的服務(wù)器example.com,那么我可以使用以下命令將我的公鑰復(fù)制到它:
ssh-copy-id linuxmi@linuxmi.com
這將使用您的公鑰 創(chuàng)建或修改服務(wù)器目錄中.ssh的 authorized_keys文件。
一旦ssh-copy-id命令確認(rèn)了它所做的事情,嘗試從您的計(jì)算機(jī)登錄以驗(yàn)證您可以在沒有密碼的情況下登錄(或者如果您選擇使用密碼,則可以使用您的密鑰密碼)。
在不使用服務(wù)器帳戶密碼的情況下進(jìn)入服務(wù)器后,編輯服務(wù)器sshd_config并設(shè)置PasswordAuthentication為 no.
PasswordAuthentication no
linuxmi@linuxmi /home/linuxmi/www.linuxmi.com
? sudo systemctl restart sshd
重新啟動(dòng)ssh服務(wù)以加載新配置:
linuxmi@linuxmi /home/linuxmi/www.linuxmi.com
? sudo systemctl restart sshd
相關(guān)閱讀:如何使用無密碼 SSH 密鑰登錄遠(yuǎn)程 Ubuntu 20.04 服務(wù)器 https://www.linuxmi.com/no-password-ssh-ubuntu-20-04.html
3. 決定誰可以登錄
大多數(shù)發(fā)行版不允許 root 用戶通過 SSH 登錄,這確保只有非特權(quán)帳戶處于活動(dòng)狀態(tài),使用sudo命令根據(jù)需要提升權(quán)限。這可以防止一個(gè)值得注意且非常明顯的目標(biāo)(root)免受簡(jiǎn)單但非常常見的腳本攻擊。
同樣,OpenSSH 的一個(gè)簡(jiǎn)單而強(qiáng)大的特性是能夠決定哪些用戶可以登錄到機(jī)器。要設(shè)置授予哪些用戶 SSH 訪問權(quán)限,請(qǐng)sshd_config在您喜歡的文本編輯器中打開該文件,然后添加如下一行:
AllowUsers linuxmi kotlin xxvi
重新啟動(dòng) SSH 服務(wù)以加載新的配置選項(xiàng)。
這僅允許三個(gè)用戶(linuxmi、kotlin 和 xxvi)登錄或在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行任何操作。
最后的想法
您可以使用 OpenSSH 來實(shí)現(xiàn)強(qiáng)大而健壯的 SSH 服務(wù)器。這些只是加強(qiáng)安裝的三個(gè)有用選項(xiàng)。不過,您可以在文件中打開或關(guān)閉大量功能和選項(xiàng),sshd_config還有許多很棒的應(yīng)用程序,例如 Fail2ban ,您可以使用它們來進(jìn)一步保護(hù)您的 SSH 服務(wù)。