跳至內容
Secret Knock

將 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
    }
}
/etc/nftables.conf(摘錄)

用來填入集合的 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 }
/etc/knockd.conf

將永久存取權分開管理

如果您也要永久允許某些位址,請將它們放在另一個沒有逾時設定的集合中。將已在限時集合中的位址再次加入,並不會重設其逾時時間,因此在同一個集合中混用這兩種項目,可能會在計時器結束時讓您無法存取。

或使用 fwknop

fwknop SPA 比序列更強大:它是單一加密、經驗證且無法重放的封包。請參閱 fwknop 指南。

從您的 iPhone 連線至 SSH

  1. 1按住黃銅門環。Secret Knock 會檢查連接埠 22 是否回應,並顯示其維持開啟的時間。
  2. 2開啟 SSH 會使用伺服器的 ssh:// 連結開啟您的 SSH app。
  3. 3「顯示此門畫面時保持門開啟」會在門顯示於螢幕上時,於開放時限結束前不久自動再次敲門。

GitHub 上的所有範例 → 本頁的每項設定皆可直接複製:github.com/mobilcomm/secretknock-examples(公眾領域)。

問題

這能取代 SSH 金鑰嗎?

不能。連接埠敲門會隱藏服務;也請保留高強度 SSH 金鑰,並停用密碼登入。

適用於您設定的指南