使用 nftables 記錄 SSH 公鑰連線嘗試

使用 nftables 記錄 SSH 公鑰連線嘗試

問題

使用 SSH 公鑰身份驗證和 nftables 設定記錄 SSH 嘗試的最佳方法是什麼?另外,測試這個的最佳方法是什麼?

我想在不安裝“只處理它”的包的情況下執行此操作,因為這對我來說是一個學習練習。

描述

我已經建立了一個相當空白的新系統來測試和學習網路概念。系統運行Arch Linux。 nftables 已啟動並正在運行,我可以使用 SSH 公鑰身份驗證登入該系統。測試系統也使用 sshd.socket,因為它是有價值的。

但是,我注意到 nftable 規則之一似乎沒有按預期註銷:

log prefix "REJECTED" reject with icmpx type port-unreachable

該規則位於我的 nftables.conf 中輸入鏈的底部,因此所有被拒絕的輸入流量都應命中此規則(我認為)。

也許我的測試是錯誤的,但是當我運行時,journalctl -k | grep "REJECTED"嘗試透過另一台機器登入後我沒有看到任何條目。但是,當具有正確密鑰的另一台計算機在一分鐘內嘗試登入兩次以上時,我確實會看到一個條目。

另外,我會注意到我可以使用此 nftable 規則看到成功的 SSH 登入(位於上面的拒絕規則之上):

tcp dport ssh limit rate 2/minute log prefix "SSH connection" accept

運行journalctl -k | grep "SSH"會如預期顯示這些連線。

答案1

您無法在網路層上確定(也無法記錄)哪個 TCP 連線登入失敗,也無法透過什麼方法登入。 SSH 守護程式決定登入何時失敗並記錄下來,之後它要麼允許重試,要麼關閉連線(通常在一定數量的失敗嘗試之後)。

失敗的登入嘗試儲存在 auth log in 中/var/log/auth.log。在那裡您可以找到失敗和成功登入的日誌條目。

在網路層,您可以記錄與 SSH 守護程式的新連線。下面的例子直接來自nftables維基文檔

tcp dport 22 ct state new log prefix \"New SSH connection: \" accept

相關內容