問題
使用 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