在 sshd“收到斷開/斷開連接... [preauth]”日誌上應用fail2ban是否安全?

在 sshd“收到斷開/斷開連接... [preauth]”日誌上應用fail2ban是否安全?

/var/log/auth.log我在(Debian Buster)中看到了很多這樣的日誌:

Jan  2 17:10:17 mybox sshd[16304]: Received disconnect from 1.2.3.4 port 37792:11: Bye Bye [preauth]
Jan  2 17:10:17 mybox sshd[16304]: Disconnected from authenticating user root 1.2.3.4 port 37792 [preauth]
Jan  2 17:10:20 mybox sshd[16306]: Received disconnect from 5.6.7.8 port 63061:11: Bye Bye [preauth]
Jan  2 17:10:20 mybox sshd[16306]: Disconnected from authenticating user root 5.6.7.8 port 63061 [preauth]
Jan  2 17:12:38 mybox sshd[16380]: Received disconnect from 9.10.11.12 port 55224:11: Normal Shutdown, Thank you for playing [preauth]
Jan  2 17:12:38 mybox sshd[16380]: Disconnected from authenticating user root 9.10.11.12 port 55224 [preauth]

我知道這些都是企圖闖入的行為,因為沒有人應該嘗試登入機器(除了我之外)。

中沒有相應的規則/etc/fail2ban/filter.d/sshd.conf,因此這些嘗試不會導致fail2ban 禁止違規IP 位址。

我已經禁用了密碼登錄,所以我猜這裡發生的情況是這些嘗試在嘗試進行身份驗證之前就被丟棄了,因此,fail2ban 不會拾取它們。

然而,由於我知道這些都是嘗試中的破壞,我仍然想禁止該IP,以阻止他們嘗試其他事情並填充我的日誌。

添加與其中一些行匹配的正則表達式是否安全,或者我會冒匹配合法(基於密鑰)登入嘗試的風險?哪些部件可以構成安全的組合?匹配單字「Disconnected」和標籤「[preauth]」是否一定表示基於密碼的暴力破解失敗?

答案1

/etc/fail2ban/filter.d/sshd.conf 中沒有對應的規則,因此這些嘗試不會導致 failed2ban 禁止違規 IP 位址。

您使用什麼版本? Fail2Ban 附帶了一個關於此的預定義規則,包含在所有模式使用的通用失敗正規表示式中。

我的一個系統中的 Fail2Ban v0.10.2 包含此規則:

^<F-NOFAIL>Received <F-MLFFORGET>disconnect</F-MLFFORGET></F-NOFAIL> from <HOST>: 11:

Fail2Ban v0.11.2 包括這個(更好):

^<F-NOFAIL>Received <F-MLFFORGET>disconnect</F-MLFFORGET></F-NOFAIL> from <HOST>%(__on_port_opt)s:\s*11:

顯然開發人員認為以下任何一行

Received disconnect from <HOST>: 11:
Received disconnect from <HOST> port XXXXX:11:

就足夠了。相關關鍵字是Received disconnect from: 11:部分(而不是後綴[preauth])。

<F-NOFAIL>意味著該行不是失敗,並且會在不<F-NOFAIL>禁止 IP 的情況下進行另一次匹配,因此您必須刪除周圍的標籤。

答案2

添加與其中一些行匹配的正則表達式是否安全,或者我會冒匹配合法(基於密鑰)登入嘗試的風險?哪些部件可以構成安全的組合?匹配單字「Disconnected」和標籤「[preauth]」是否一定表示基於密碼的暴力破解失敗?

合法的成功連線和身份驗證不會觸發此類日誌行。這些條目可能來自掃描儀,不會造成損害,但也可以被阻止。 preauth 意味著這些客戶端尚未開始身份驗證。

即使您自己導致登入失敗,無論是使用錯誤的密鑰還是輸入錯誤的密碼,使用fail2ban仍然可以。 fail2ban 僅在可設定數量的匹配日誌行之後阻塞,並且僅在特定時間範圍內阻塞。

您可以在 Debian buster 中使用此程式碼片段(例如 cmdfailre):

^Received disconnect from <HOST>%(__on_port_opt)s:11: \s* %(__suff)s$
^Disconnected from authenticating user <F-USER>.*?</F-USER> <HOST>%(__on_port_opt)s %(__suff)s$

答案3

我透過在ijil.local檔案中的[sshd]下設定mode=aggressive來啟用此功能

相關內容