任意のソース IP からのポートノッキング後に SSH アクセスを許可する

任意のソース IP からのポートノッキング後に SSH アクセスを許可する

私は、次のチュートリアルに従って、iptables ルールと「recent」モジュールのみを使用して、Linux 上の SSH 用のポート ノッキング設定を動作させています。https://wiki.archlinux.org/index.php/Port_knocking#Port_knocking_with_iptables_only

現在、私の問題は、職場のネットワークなどのいくつかのネットワークが 22、80、443 などの非標準ポートへのトラフィックをブロックしているため、ノック パケットを送信できないことです。一方、モバイル インターネットでは、ノック パケットは許可されます。

回避策として、正しいノックシーケンスが送信されるたびにSSHポートを開きたいと思います。どれでも同じホストだけではなく、別のホストも対象となります。

iptables でこれを実現する方法はありますか? たとえば、あるルールでオンに切り替えて別のルールでチェックできる「状態スイッチ」またはグローバル変数を想像できます。タイムアウト後に「オフ」に戻ります。

答え1

knockdルートをお勧めします。この方法の方が簡単です。ただし、このデフォルト設定を使用する代わりに

[openSSH]
        sequence    = 7000,8000,9000
        seq_timeout = 10
        tcpflags    = syn
        command     = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

  [closeSSH]
        sequence    = 9000,8000,7000
        seq_timeout = 10
        tcpflags    = syn
        command     = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

これを使用します(注 -s %IP% は削除されています)

[openSSH]
        sequence    = 7000,8000,9000
        seq_timeout = 10
        tcpflags    = syn
        command     = /usr/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT

  [closeSSH]
        sequence    = 9000,8000,7000
        seq_timeout = 10
        tcpflags    = syn
        command     = /usr/sbin/iptables -D INPUT -p tcp --dport 22 -j ACCEPT

関連情報