一部の制限付きiptablesポート転送

一部の制限付きiptablesポート転送

一連のサービスがあり、そのうちの 1 つには IP ベースの ACL (ホワイトリスト) を設定したいのですが、もう 1 つには設定しません。サービスは内部的には同じポート (ポート 80) で実行されていますが、ゲートウェイでは異なるポートを使用してアクセスしているため、問題が発生しているようです。

ゲートウェイのポート 8088 -> 10.0.0.A のポート 80 (IP ホワイトリストあり)
ゲートウェイのポート 80 -> 10.0.0.B のポート 80

そして、次のルールに従って、すべてを開いた状態でこれを機能させることができます。

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A:80
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 10.0.0.B
iptables -A FORWARD -p tcp -i eth0 --dport 80 -j ACCEPT

問題は、FORWARD ACCEPT ルールがこれらの NAT ルールの両方をカバーしていることです。これらのルールは、ゲートウェイの着信ポート (80 対 8088) ではなく、宛先ポート (--dport 80) に基づいているようです。

ゲートウェイに 80 と 8088 で着信する接続に対して異なる動作を行えるように、FORWARD ルールを 2 つの別々のルールに書き換える方法がわかりません。

追加情報:

lsb_release -d
説明: Debian GNU/Linux 7.5 (wheezy)
iptables --バージョン
iptables v1.4.14

1回目の解決の試み チェーンをスピンオフしてそこでルーティングを実行することはできましたが、次のエラー メッセージのため ACL (拒否) 行を追加できません。

x_tables: ip_tables: REJECT ターゲット: フィルタ テーブルでのみ有効、NAT では無効

私が入れたものは次のとおりです:

iptables -t nat -N ホワイトリスト
iptables -t nat -A ホワイトリスト -p tcp -j DNAT --to 10.0.0.A:80
iptables -t nat -A ホワイトリスト -s <whatsmyip.org> -j 戻る
iptables -t nat -A ホワイトリスト -j 拒否
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j ホワイトリスト

4 行目まではすべて正常に動作しますが、ここで nat 内の REJECT が失敗します。REJECT 行をコメントアウトすると、ロジックの残りの部分が動作し、何も拒否されないためポートがオープンになることを確認できます。

次の解決の試み 適切に設定された別のチェーンで作業中に、元の問題に遭遇しているようです。ポートを最初から変更する PREROUTING ルールは、非 NAT ACL 試行で依然として問題を引き起こしているようです。ACL ルールは効果がなく、ポートは自由に開かれています。

iptables -N ホワイトリスト
iptables -A ホワイトリスト -s <whatsmyip.org> -j 戻る
iptables -A ホワイトリスト -j 拒否
iptables -A 入力 -i eth0 -p tcp --dport 8088 -j ホワイトリスト
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A:80

解決の試み #3 まずホワイトリストを設定し、ホワイトリストの解決後にポート リダイレクトを試みました。ルールがロードされている間、トラフィックはホワイトリストの IP から目的の宛先に到達しないため、意図した効果はありません。ただし、実際の動作がどのようなものかは 100% 確信していません。トラフィックが iptables で拒否されているのか、それとも接続が受け入れられ、ポート変更なしでポート 8088 の宛先にプッシュされているのかはわかりません。ポート リダイレクトが実際に行われているかどうかを確認する方法がわかりません。この試行のルールは次のとおりです。

iptables -N ホワイトリスト
iptables -A ホワイトリスト -s <whatsmyip.org> -j 戻る
iptables -A ホワイトリスト -j 拒否
iptables -A 入力 -i eth0 -p tcp --dport 8088 -j ホワイトリスト
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A
iptables -t nat -A 出力 -p tcp --dport 8088 -j リダイレクト --to-ports 80

現在のステータス 未解決。ホワイトリストの後にポートをリダイレクトする別の方法を見つける必要があるかどうか、または現在のソリューションが失敗している場所を特定する簡単な方法があるかどうかは不明です (80 リダイレクトなしで 8088 を介して転送されているか、または単にブロックされているか)。

答え1

変化

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A:80

ACL を実装するユーザー定義チェーンにジャンプします。例:

iptables -t nat -N foo
iptables -t nat -A foo --source 192.168.0.0/24 -j RETURN
iptables -t nat -A foo -j REJECT

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j foo

編集:

iptables -N foo
iptables -A foo --source 192.168.0.0/24 -j RETURN
iptables -A foo -j REJECT
iptables -A INPUT -i eth0 -p tcp --dport 8088 -j foo

実行している NAT を完全に無視してパケット フィルタリングを設計します。

関連情報