Linux中國

保護 SSH 的 3 個技巧

SSH(安全 Shell)是一個協議,它使你能夠創建一個經過驗證的私人連接,並使用加密密鑰保護通道,在另一台機器上啟動一個遠程 Shell。使用這種連接,你可以執行遠程命令,啟動安全文件傳輸,轉發套接字、顯示和服務,等等。

在 SSH 出現之前,大多數遠程管理是通過 telnet 完成的,公平地說,一旦你能建立一個遠程會話,你幾乎可以做任何你需要的事情。這個協議的問題是,通訊是以純明文的方式進行的,沒有經過加密。使用 流量嗅探器 不需要太多努力就可以看到一個會話中的所有數據包,包括那些包含用戶名和密碼的數據包。

有了 SSH,由於使用了非對稱密鑰,參與通信的設備之間的會話是加密的。如今,這比以往任何時候都更有意義,因為所有的雲伺服器都是由分布在世界各地的人管理的。

3 個配置 SSH 的技巧

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 22122
#AddressFamily any 
#ListenAddress 0.0.0.0 
#ListenAddress ::

一旦你改變了埠並保存了文件,重新啟動 SSH 伺服器:

$ sudo systemctl restart sshd

2、不要使用密碼

現在有一個普遍的潮流是停止使用密碼作為認證手段,雙因素認證等方法越來越受歡迎。OpenSSH 可以使用非對稱密鑰進行認證,因此不需要記住複雜的密碼,更不需要每隔幾個月輪換一次密碼,也不需要擔心有人在你建立遠程會話時進行「肩後偷窺」。使用 SSH 密鑰可以讓你快速、安全地登錄到你的遠程設備上。這往往意味著花費在錯誤的用戶名和密碼上的時間更少。登錄令人愉快的簡單。當沒有密鑰時,就沒有入口,甚至沒有提示符。

要使用這個功能,你必須同時配置客戶機(在你面前的計算機)和伺服器(遠程機器)。

在客戶端機器上,你必須生成一個 SSH 密鑰對。這包括一個公鑰和一個私鑰。正如它們的名字所暗示的,一個公開的密鑰是供你分發給你想登錄的伺服器的,另一個是私人的密鑰,必須不與任何人分享。使用 ssh-keygen 命令可以創建一個新的密鑰對,並使用 -t 選項來指定一個好的、最新的密碼學庫,如 ed25519

$ ssh-keygen -t ed25519    
 Generating public/private ed25519 key pair. 
 Enter file in which to save the key (~/.ssh/id_ed25519):

在密鑰創建過程中,你會被提示為文件命名。你可以按回車鍵來接受默認值。如果你將來創建了更多的密鑰,你可以給每個密鑰起一個自定義的名字,但有多個密鑰意味著你要為每次交互指定使用哪個密鑰,所以現在只要接受默認即可。

你還可以給你的密鑰一個口令。這可以確保即使別人設法獲得你的私鑰(這本身就不應該發生),沒有你的口令,他們也無法將其投入使用。這對某些密鑰來說是一種有用的保護措施,而對其他密鑰來說則不合適(特別是那些用於腳本的密鑰)。按回車鍵讓你的密鑰沒有口令,或者你選擇創建一個口令。

要把你的密鑰複製到伺服器上,使用 ssh-copy-id 命令。例如,如果我擁有一台名為 example.com 的伺服器,那麼我可以用這個命令把我的公鑰複製到它上面:

$ ssh-copy-id jgarrido@example.com

這將在伺服器的 .ssh 目錄下創建或修改 authorized_keys 文件,其中包含你的公鑰。

一旦確認 ssh-copy-id 命令完成了它所做的事情,嘗試從你的電腦上登錄,以驗證你可以在沒有密碼的情況下登錄(或者如果你選擇使用你的密鑰的口令,就輸入密鑰口令)。

在沒有使用你的伺服器帳戶的密碼登錄到你的伺服器上後,編輯伺服器的 sshd_config 並將 PasswordAuthentication 設置為 no

PasswordAuthentication no

重新啟動 SSH 服務以載入新的配置:

$ sudo systemctl restart sshd

3、決定誰可以登錄

大多數發行版不允許 root 用戶通過 SSH 登錄,這確保只有非特權賬戶是活躍的,根據需要使用 sudo 命令來提升許可權。這就防止了一個明顯的、令人痛苦的目標(root)受到簡單而常見的腳本攻擊。

同樣,OpenSSH 的一個簡單而強大的功能是能夠決定哪些用戶可以登錄到一台機器。要設置哪些用戶被授予 SSH 訪問權,在你最喜歡的文本編輯器中打開 sshd_config 文件,並添加這樣一行:

AllowUsers jgarrido jane tux

重新啟動 SSH 服務以載入新的配置選項。

這只允許三個用戶(jgarridojanetux)登錄或在遠程機器上執行任何操作。

總結

你可以使用 OpenSSH 來實現一個強大而穩健的 SSH 伺服器。這些只是加固你的系統的三個有用的選項。儘管如此,在 sshd_config 文件中仍有大量的功能和選項可以打開或關閉,而且有許多很棒的應用程序,如 Fail2ban,你可以用來進一步保護你的 SSH 服務。

via: https://opensource.com/article/22/2/configure-ssh-privacy

作者:Jonathan Garrido 選題:lujun9972 譯者:wxy 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國