Ssh

如何禁用 opensshd 的自我介紹橫幅

  • January 1, 2020

我在 2222 的非標準 tcp 埠上監聽了 opensshd。在sshd_config我有…

Banner none
VersionAddendum none

如果我從客戶端主機執行telnet ip.of.server 2222,那麼我會看到服務顯示一條消息,像這樣介紹自己……

SSH-2.0-OpenSSH_7.8

有沒有辦法防止這種情況發生並指示 openssh 守護程序不要暴露自己?*如果“漫遊”*連接無法了解這裡正在聽什麼,我更願意。

ssh 協議的最小標識字元串是:

SSH-2.0-

但是 OpenSSH 將始終至少發送OpenSSH_*.*. 如果你想要更隱蔽的行為,你有幾個選擇:

  1. 您可以修補並重新編譯openssh,以便伺服器在發送自己的標識字元串之前等待客戶端的標識字元串(參見sshd_exchange_identification函式)。如果客戶端的標識字元串不以 開頭SSH,則為假客戶端,您可以關閉連接。它可能會破壞一些客戶端(如果它們等待伺服器的辨識),但它不應該破壞 OpenSSH 客戶端。埠掃描器將無法推斷伺服器的協議,除非他發送有效的客戶端身份驗證字元串。
  2. 安裝和配置nginx。通常它是一個HTTP/HTTPS(代理)伺服器)並且它有一個ssl 預讀模組,用於將不同的配置應用於不同的TLS客戶端(基於它們的版本和其他參數)。但是,如果您使用它不理解的協議連接到nginx,它將設置$ssl_preread_protocol為空字元串,您可以將連接重定向到 SSH 伺服器。如果 portscanner 嘗試使用TLSnginx將為他提供一個網頁。如果他嘗試任何其他協議,他將收到OpenSSH的標識字元串。
  3. 有一個小型協議多路復用器(sslh),它猜測客戶端的協議並將其重定向到正確的伺服器。

這些選項應該回答您的問題,但它不相信通過默默無聞的安全性是要走的路(除了埠2222不是很原始)。你會更好:

  1. 禁用密碼登錄,
  2. 使用類似fail2ban的東西來限制暴力攻擊的數量。

引用自:https://serverfault.com/questions/997300