コンテンツへ移動
Secret Knock

fwknop サーバを設定する

fwknop Single Packet Authorization は、暗号化され認証された UDP パケットが1つ届くまで SSH を閉じたままにします。以下の手順で Debian または Ubuntu サーバに設定します。まずコンピュータからテストしてから、同じキーを Secret Knock に追加してください。

1. インストールしてキーを生成する

サーバとクライアントをインストールしてから、キーペアを生成します。出力は保管してください。同じ2つのキーを access.conf と Secret Knock に入力します。

sudo apt install fwknop-server fwknop-client
fwknop --key-gen          # prints KEY_BASE64 and HMAC_KEY_BASE64
Debian / Ubuntu

2. SPA パケットに SSH を許可する

access.conf では、有効なパケットで開けられる内容と、その有効時間を指定します。

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

3. fwknopd の待受先を指定する

fwknopd はインターフェイス上のパケットをキャプチャします。ポートを開放する必要はありません。サーバが使用するインターフェイスを設定してください。

# /etc/fwknop/fwknopd.conf
PCAP_INTF               eth0;
PCAP_FILTER             udp port 62201;
MAX_SPA_PACKET_AGE      120;
/etc/fwknop/fwknopd.conf

4. デフォルトで SSH を閉じる

この操作中は SSH セッションを開いたままにし、ログアウトする前に2つ目の接続からテストしてください。fwknopd は独自のチェーンを INPUT の先頭に挿入し、有効な各パケットに対して時間制限付きの ACCEPT をそこに追加します。

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
iptables

5. テストしてからドアを追加する

fwknop-server を再起動し、別のマシンからパケットを送信して接続します。

# from another machine: request SSH for the address the server sees (-R)
fwknop -A tcp/22 -R -D server.example.com \
    --key-base64-rijndael "<KEY_BASE64>" --key-base64-hmac "<HMAC_KEY_BASE64>"
ssh [email protected]
fwknop-client を搭載したコンピュータから
  1. 1Secret Knock で、「新しいドア」›「テンプレートから開始」›「fwknop」の順に選択し、ホストを入力して、fwknop --key-gen の出力を「fwknop --key-genのキーをペースト」でペーストします。
  2. 2ノックします。ポート22から応答があると、ドアには「ドアが少し開いています」と表示されます。
  3. 3表示されない場合は、サーバで fwknopd -f -v を実行してください。トラブルシューティングガイドに一般的な原因を掲載しています。

GitHubですべての例を見る → このページのすべての設定をコピーしてすぐに使えます:github.com/mobilcomm/secretknock-examples(パブリックドメイン)。

よくある質問

fwknopd に開放されたポートは必要ですか?

いいえ。ネットワークインターフェイスからパケットを読み取るため、SPA ポートはファイアウォールで閉じたままにできます。パケットがサーバに到達するだけで十分です。

セットアップのガイド