將 SSH 隱藏在連接埠敲門機制之後
開放的 SSH 連接埠會收到來自網際網路各處的登入嘗試。連接埠敲門會讓連接埠保持關閉,直到您證明自己知道祕密為止,之後只會為您的位址開啟幾秒鐘。
使用 knockd 與 nftables
預設丟棄 SSH,僅接受來自具有逾時設定之集合中位址的連線。knockd 會將敲門位址加入該集合;逾時後 nftables 會將其移除,而已建立的 SSH 連線仍可繼續運作。
table inet filter {
set knocked4 {
type ipv4_addr
flags timeout
}
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
iif "lo" accept
tcp dport 22 ip saddr @knocked4 accept
}
} 用來填入集合的 knockd 區段:
[openSSH]
sequence = 7311:tcp,8822:tcp,9133:udp
seq_timeout = 10
tcpflags = syn
start_command = /usr/sbin/nft add element inet filter knocked4 { %IP% timeout 30s } 將永久存取權分開管理
如果您也要永久允許某些位址,請將它們放在另一個沒有逾時設定的集合中。將已在限時集合中的位址再次加入,並不會重設其逾時時間,因此在同一個集合中混用這兩種項目,可能會在計時器結束時讓您無法存取。
或使用 fwknop
fwknop SPA 比序列更強大:它是單一加密、經驗證且無法重放的封包。請參閱 fwknop 指南。
從您的 iPhone 連線至 SSH
- 1按住黃銅門環。Secret Knock 會檢查連接埠 22 是否回應,並顯示其維持開啟的時間。
- 2開啟 SSH 會使用伺服器的 ssh:// 連結開啟您的 SSH app。
- 3「顯示此門畫面時保持門開啟」會在門顯示於螢幕上時,於開放時限結束前不久自動再次敲門。
GitHub 上的所有範例 → 本頁的每項設定皆可直接複製:github.com/mobilcomm/secretknock-examples(公眾領域)。
問題
這能取代 SSH 金鑰嗎?
不能。連接埠敲門會隱藏服務;也請保留高強度 SSH 金鑰,並停用密碼登入。