Debian

VNC 身份驗證失敗過多錯誤 - Fail2ban

  • October 18, 2021

在帶有 Xtightvnc 的 Debian 11 伺服器上,我收到很多“身份驗證失敗太多”的消息。我想使用fail2ban 來阻止未經授權的使用者嘗試通過VNC 登錄我的伺服器。但我找不到有效的規則。我發現的規則很舊,不適用於日誌。

14/10/21 20:37:43 Got connection from client 209.141.49.123
14/10/21 20:37:43 Using protocol version 3.3
14/10/21 20:37:43 Too many authentication failures - client rejected
14/10/21 20:37:43 Client 209.141.49.123 gone
14/10/21 20:37:43 Statistics:
14/10/21 20:37:43   framebuffer updates 0, rectangles 0, bytes 0

我正在使用 iptables 僅發布我的訪問 ip,但我不想要這個解決方案。

不幸的是,這個 VNC 日誌記錄的日誌格式並不適合 fail2ban - 失敗的消息不包含 IP 地址,並且帶有 IP 的條目和失敗的嘗試不包含一些標識符,以便能夠按此 ID 對它們進行分組。

基本上fail2ban可以處理這樣的多行日誌(一行包含IP,另一行包含失敗)有兩種處理方法:

  • 監獄/過濾器maxlines>= 2 滾動日誌,消息視窗包含超過 1 條消息;
  • 新的多行處理使用<F-MLFID>...</F-MLFID>標籤在每一行中擷取與會話相關的 ID,以便考慮 2 條消息來自同一個客戶端。

這兩種方法在這裡都不太合適。

很快,如果它們同時發生,您將無法區分合法嘗試和失敗嘗試,例如:

Got connection from client 192.0.2.111
Got connection from client 192.0.2.222
Too many authentication failures - client rejected
Client successfully connected ~artificial log-entry (I don't know ~

在這裡,我們看到 2 個客戶端已連接,但一個失敗,另一個成功。哪個成功,哪個不成功?

在被拒絕的消息之後仍然有一個日誌條目(帶有 IP 和gone),所以如果您說客戶端在成功連接後不太可能直接離開,您可以說我們將考慮附近的消息client rejectedgone作為來自的消息同一個客戶端(這有點“危險”,特別是如果在某個時間點成功和稍後消失之間沒有進一步的消息,但是……)。

然後可以使用以下配置:

# increasing the value of `maxlines` would make that the filter works more precise (can consider failures also in case of some flood in log between `client rejected` and `gone`),
# but it would make it more unsafe at the same time (because it can cause false positives on `gone` messages from legitimate clients occurring after `client rejected` logged from evildoers):

maxlines = 2

failregex = ^\s*Too many authentication failures - client rejected<SKIPLINES>\s*Client <ADDR> gone

(如果您的 fail2ban 版本早於 0.10 ,請替換<ADDR>為)<HOST>

但無論如何,最好在 VNC 站點上修復它 - 例如直接在client rejected消息中添加 IP 地址或引入一些與會話相關的 ID 明確辨識客戶端。

引用自:https://unix.stackexchange.com/questions/673356