コンテンツへ移動
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

恒久的なアクセスは分けて管理する

一部のアドレスを恒久的に許可する場合は、タイムアウトなしの別のセットに保持してください。すでにタイムアウト付きセットにあるアドレスを追加してもタイムアウトはリセットされないため、両方の種類のエントリを1つのセットに混在させると、タイマーの終了時にアクセスできなくなる可能性があります。

またはfwknopを使う

fwknop SPAはシーケンスよりも強力です。暗号化および認証された1つのパケットであり、リプレイできません。fwknopガイドをご覧ください。

iPhoneからSSHへ

  1. 1真鍮のドアノッカーを長押しします。Secret Knockがポート22に応答があるか確認し、開いている残り時間を表示します。
  2. 2SSHを開くをタップすると、サーバー用のssh://リンクでSSHアプリを開きます。
  3. 3「画面表示中はドアを開いたままにする」は、ドアが画面に表示されている間、開放時間が終わる少し前に自動でもう一度ノックします。

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

よくある質問

SSHキーの代わりになりますか?

いいえ。ポートノッキングはサービスを隠すものです。強力なSSHキーを使用し、パスワードログインも無効にしてください。

セットアップのガイド