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