強化 SSH 讓你更加安心

大雄45發表於2023-11-28
導讀 為了讓我們的SSH服務更加安全,我們有必要對此做一些強化措施,使得我們在之後的工作過程中更加放心。當你檢視你的 SSH 服務日誌,可能你會發現充斥著一些不懷好意的嘗試性登入。這裡有 5 條常規建議(和一些個別特殊策略)可以讓你的 OpenSSH 會話更加安全。
1. 強化密碼登入

密碼登入很方便,因為你可以從任何地方的任何機器上登入。但是它們在暴力攻擊面前也是脆弱的。嘗試以下策略來強化你的密碼登入:

  • (1)使用一個密碼生成工具,例如 pwgen。pwgen 有幾個選項,最有用的就是密碼長度的選項(例如:產生一個12位字元的密碼pwgen 12)
  • (2)不要重複使用密碼。忽略所有那些不要寫下你的密碼的建議,然後將你的所有登入資訊都記在一個本子上,如果你不相信我的建議,那總可以相信安全權威 Bruce Schneier 吧。如果你足夠細心,沒有人能夠發現你的筆記本,那麼這樣能夠不受到網路上的那些攻擊。
  • (3)你可以為你的登入記事本增加一些額外的保護措施,例如用字元替換或者增加新的字元來掩蓋筆記本上的登入密碼。使用一個簡單而且好記的規則,比如說給你的密碼增加兩個額外的隨機字元,或者使用單個簡單的字元替換,例如 # 替換成 * 。
  • (4)為你的 SSH 服務開啟一個非預設的監聽埠。雖然是很老套的建議,但是它確實很有效。檢查你的登入,很有可能 22 埠是被普遍攻擊的埠,其他埠則很少被攻擊。
  • (5)使用 Fail2ban來動態保護你的伺服器,是伺服器免於被暴力攻擊。
  • (6)使用不常用的使用者名稱。絕不能讓 root 可以遠端登入,並避免使用者名稱為“admin”。
2. 解決 Too Many Authentication Failures 報錯

當我的 ssh 登入失敗,並顯示“Too many authentication failures for carla”的報錯資訊時,我們不應該氣餒,傷痛之感並不能解決問題。解決辦法就是在你的(客戶端的) ~/.ssh/config 檔案設定強制密碼登入。如果這個檔案不存在,首先創個 ~/.ssh/目錄。

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh

然後在一個文字編輯器建立 ~/.ssh/confg 檔案,輸入以下行,使用你自己的遠端域名替換 HostName。

HostName remote.site.com
PubkeyAuthentication=no

(LCTT 譯註:這種錯誤發生在你使用一臺   機器使用 ssh 登入另外一臺伺服器時,你的 .ssh 目錄中儲存了過多的私鑰檔案,而 ssh 客戶端在你沒有指定 -i 選項時,會預設逐一嘗試使用這些私鑰來登入遠端伺服器後才會提示密碼登入,如果這些私鑰並不能匹配遠端主機,顯然會觸發這樣的報錯,甚至拒絕連線。因此本條是透過禁用本地私鑰的方式來強制使用密碼登入——顯然這並不可取,如果你確實要避免用私鑰登入,那你應該用 -o PubkeyAuthentication=no 選項登入。顯然這條和下兩條是互相矛盾的,所以請無視本條即可。)

3. 使用公鑰認證

公鑰認證比密碼登入安全多了,因為它不受暴力密碼攻擊的影響,但是並不方便因為它依賴於 RSA 金鑰對。首先,你要建立一個公鑰/私鑰對;下一步,私鑰放於你的客戶端電腦,並且複製公鑰到你想登入的遠端伺服器。你只能從擁有私鑰的電腦登入才能登入到遠端伺服器,你的私鑰就和你的家門鑰匙一樣敏感;任何人獲取到了私鑰就可以獲取你的賬號。你可以給你的私鑰加上密碼來增加一些強化保護規則。使用 RSA 金鑰對管理多個使用者是一種好的方法:當一個使用者離開了,只要從伺服器刪了他的公鑰就能取消他的登入。

以下例子建立一個新的 3072 位長度的金鑰對,它比預設的 2048 位更安全,而且為它起一個獨一無二的名字,這樣你就可以知道它屬於哪個伺服器。

$ ssh-keygen -t rsa -b 3072 -f id_mailserver

以下建立兩個新的金鑰, id_mailserver 和 id_mailserver.pub ,id_mailserver 是你的私鑰--不要傳播它!現在用 ssh-copy-id  安全地複製你的公鑰到你的遠端伺服器。你必須確保在遠端伺服器上有可用的 SSH 登入方式。

$ ssh-copy-id -i  id_rsa.pub user@remoteserver
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
user@remoteserver's password:
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh 'user@remoteserver'"
and check to make sure that only the key(s) you wanted were added.

ssh-copy-id 會確保你不會無意間複製了你的私鑰;從上述輸出中複製登入 ,記得帶上其中的單引號,以測試你的新的金鑰登入。

$ ssh 'user@remoteserver'

它將用你的新金鑰登入,如果你為你的私鑰設定了密碼,它會提示你輸入。

4. 取消密碼登入

一旦你已經測試並且驗證了你的公鑰可以登入,就可以取消密碼登入,這樣你的遠端伺服器就不會被暴力密碼攻擊。如下設定你的遠端伺服器的 /etc/sshd_config 檔案。

PasswordAuthentication no

然後重啟伺服器上的 SSH 守護程式。

5. 設定別名 -- 這很快捷而且很有 B 格

你可以為你的遠端登入設定常用的別名,來替代登入時輸入的命令,例如:

ssh -u username -p 2222 remote.site.with.long-name

你可以使用 ssh remote1。你的客戶端機器上的 ~/.ssh/config 檔案可以參照如下設定

Host remote1
HostName remote.site.with.long-name
Port 2222
User username
PubkeyAuthentication no

如果你正在使用公鑰登入,可以參照這個:

Host remote1
HostName remote.site.with.long-name
Port 2222
User username
IdentityFile  ~/.ssh/id_remoteserver

原文來自:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2980416/,如需轉載,請註明出處,否則將追究法律責任。

相關文章