ポート y で「確立」状態にある IP アドレスに対して、ポート x での接続を許可したいと考えています。
これは iptables を使用するだけで実行できますか?
答え1
ポートノッキングを使用できるでしょうか? TCP 接続が確立されたときにポートを開くことは可能です: http://en.wikipedia.org/wiki/ポートノッキング
答え2
答えは「ある程度」です。ipset
パッケージをインストールし、カーネルがipset
サポートしていることを確認する必要があります。
まず、タイムアウト付きの「IP セット」を作成する必要があります。
ipset create MySet hash:ip timeout 60
次に、確立されたパケットごとにタイムアウトをリセットするルールを追加します。
iptables -A INPUT -p tcp --dport $port1 -m state --state ESTABLISHED -j SET --add-set MySet src
最後に、ソースが記録されている場合にのみ2番目のポートへのアクセスを許可するルールセットを追加し、他のものを削除します。
iptables -A INPUT -p tcp --dport $port2 -j Port2_Test
iptables -A Port2_Test -m state --state ESTABLISHED -j ACCEPT
iptables -A Port2_Test -m state --state NEW -m set --match-set MySet src -j ACCEPT
iptables -A Port2_Test -p tcp -j REJECT
編集
マッチ拡張機能も使用できることに気付きましたrecent
。次のようにします。
-A INPUT -p tcp --dport $portY -m state --state ESTABLISHED -m recent --name YThenX --set -j ACCEPT
...
-A INPUT -p tcp --dport $portX -j Port2_Test
...
-A Port2_Test -m state --state ESTABLISHED -j ACCEPT
-A Port2_Test -m state --state NEW -m recent --name YThenX --rcheck --seconds $timeout --reap $timeout -j ACCEPT
-A Port2_Test -p tcp -j REJECT