iptables - 別のポートで確立された状態にある IP アドレスのみポートへの接続を許可します

iptables - 別のポートで確立された状態にある IP アドレスのみポートへの接続を許可します

ポート 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

関連情報