跳至內容
Secret Knock

Port knocking 說明

Port knocking 會讓服務保持不可見,直到有人證明自己知道祕密。本指南介紹其運作方式、兩種常見實作方式 — knockd 和 fwknop — 以及實務上敲門失敗的原因。

Port knocking 的運作方式

防火牆會捨棄所有前往受保護連接埠的連線,因此掃描器看不見任何內容。一個小型常駐程式會監看抵達防火牆的流量。當某個來源位址產生預期模式時,常駐程式會加入一條防火牆規則,允許該位址連線,通常只維持短時間。

這個模式就是敲門。使用 knockd 時,它是在特定時間限制內,依指定順序連往特定連接埠的一系列嘗試。使用 fwknop 時,則是一個加密封包。

knockd:敲門序列

knockd 會在網路介面上監聽,並將連線嘗試與 /etc/knockd.conf 中的序列比對。序列可混合 TCP 和 UDP 連接埠。比對成功後,knockd 會執行指令 — 通常是針對敲門位址(%IP%)的 iptables 或 nftables 規則。

此範例會為敲門位址開啟 SSH,並在 10 秒後再次關閉。如果你的防火牆接受已建立的連線,現有 SSH 工作階段會繼續運作。

[options]
    UseSyslog

[openSSH]
    sequence      = 7311:tcp,8822:tcp,9133:udp
    seq_timeout   = 10
    tcpflags      = syn
    start_command = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    cmd_timeout   = 10
    stop_command  = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
/etc/knockd.conf — 開啟 SSH 10 秒

請選擇自己的連接埠;切勿重複使用公開範例中的連接埠。tcpflags = syn 使 knockd 只計算帶有 SYN 旗標的封包 — 連線嘗試的第一個封包。

fwknop:Single Packet Authorization

fwknop 以一個使用 AES 加密並以 HMAC 驗證的 UDP 封包取代序列。伺服器 fwknopd 會被動擷取封包、驗證封包、確認不是重播,並為封包內的位址開啟所要求的連接埠。

使用 fwknop --key-gen 產生密鑰,並放入伺服器的 access.conf。Secret Knock 會從你的 .fwknoprc 輸入用戶端部分。

SOURCE              ANY
OPEN_PORTS          tcp/22
KEY_BASE64          <output of fwknop --key-gen>
HMAC_KEY_BASE64     <output of fwknop --key-gen>
FW_ACCESS_TIMEOUT   30
/etc/fwknop/access.conf — 使用 SPA 密鑰允許 SSH

由於允許的位址會包含在加密封包內,SPA 可為傳送封包的位址以外的位址開啟連接埠 — 當你以使用流動數據的手機為其他地方的手提電腦敲門時相當實用。

敲門失敗的原因

  • IPv4 與 IPv6:敲門透過一種位址類型送出,但 SSH 透過另一種連線。防火牆為你未使用的位址開啟了門。
  • 不同的公開位址:使用流動數據、電訊商 NAT 或 VPN 時,伺服器看見的 IP 可能與你的預期不同。請檢查你的敲門來源位址。
  • 重傳的 SYN:如果 TCP 敲門未獲回應,用戶端的作業系統會再次傳送相同的 SYN。我們的測試發現,knockd 0.8 會在這類重複 SYN 時重設序列,因此用戶端每次敲門都必須只傳送一次,並快速停止連線嘗試。
  • 時機:在 seq_timeout 之外抵達或順序錯誤的敲門,會重新開始序列。
  • 中間設備:部分網路會封鎖或改寫前往非慣用連接埠的流量,因此在家可運作的敲門,可能在酒店或辦公室網路上失敗。

安全嗎?

knockd 序列未經加密傳送;能監看你流量的人可重播它。請用它讓掃描器無法發現服務,並在 SSH 密鑰之外多加一層保護 — 不要用來取代密鑰。fwknop SPA 以加密、HMAC 和重播保護補足這個缺口,若你的流量可能遭監看,這是更好的選擇。

從 iPhone、Mac 和 Apple Watch 敲門

Secret Knock 可從 iPhone、iPad 和 Mac 傳送 knockd 序列和 fwknop SPA 封包,檢查連接埠是否回應,並開啟你的 SSH app。Apple Watch 會透過已配對的 iPhone 敲門,因為 watchOS 不允許 app 傳送原始 TCP 或 UDP 封包;遠離 iPhone 時,它可透過 HTTP 向已啟用此功能的伺服器傳送 SPA。

適用於您設定的指南

讓門保持關閉。把敲門的祕密帶在身邊。

Secret Knock 即將在 App Store 推出,適用於 iPhone、iPad、Mac 和 Apple Watch。

Secret Knock →