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 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 3. fwknopd の待受先を指定する
fwknopd はインターフェイス上のパケットをキャプチャします。ポートを開放する必要はありません。サーバが使用するインターフェイスを設定してください。
# /etc/fwknop/fwknopd.conf
PCAP_INTF eth0;
PCAP_FILTER udp port 62201;
MAX_SPA_PACKET_AGE 120; 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 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] - 1Secret Knock で、「新しいドア」›「テンプレートから開始」›「fwknop」の順に選択し、ホストを入力して、fwknop --key-gen の出力を「fwknop --key-genのキーをペースト」でペーストします。
- 2ノックします。ポート22から応答があると、ドアには「ドアが少し開いています」と表示されます。
- 3表示されない場合は、サーバで fwknopd -f -v を実行してください。トラブルシューティングガイドに一般的な原因を掲載しています。
GitHubですべての例を見る → このページのすべての設定をコピーしてすぐに使えます:github.com/mobilcomm/secretknock-examples(パブリックドメイン)。
よくある質問
fwknopd に開放されたポートは必要ですか?
いいえ。ネットワークインターフェイスからパケットを読み取るため、SPA ポートはファイアウォールで閉じたままにできます。パケットがサーバに到達するだけで十分です。