私は、次のチュートリアルに従って、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