web-dev-qa-db-ja.com

特定のインターフェース/ネットワーク間のIP転送の制限

現在ipv4.ip_forward複数のインターフェース間でパケットをルーティングできるようになりました。

現在、システムを8つのインターフェースにスケールアップしていますが、インターフェース/アドレス間のルーティングを制限したいと思います。

1つのオプションはfirewalldを使用することですが、私はこれを古いバージョンのRHにデプロイするため、iptablesを介して行われます。

5
user2066671

実際、iptablesはこれを制限するのに非常に適しています。パケットが許可またはブロックされるfilterテーブルには3つのチェーンがあります。各チェーンでは、パケットを照合し、パケットが一致した場合にアクションをトリガーするようにルールを定義できます。パケットが一致するルールのチェーンに対して、iptablesが実行されているホストに対するパケットの方向によって異なります。

  • INPUT:ローカルホスト宛ての着信パケット
  • OUTPUT:ローカルホストから発信された発信パケット
  • FORWARD:別のホスト宛てで転送が必要なパケット

次に、たとえばパケットが転送され、FORWARDチェーン内でそれと一致するルールがない場合、これに設定されたpolicyに従って処理されますチェーン。デフォルトはACCEPTです。パケットは通過を許可されます。このコマンドは、ポリシーとルールが定義されている場合にそれらを表示します。

iptables -t filter -vnL

テーブルは-t <table>を使用して指定されます。何も指定されていない場合、filterがデフォルトのテーブルなので、次のコマンドは同等です。

iptables -vnL

転送のためにすべてのパケットをブロックするには、このチェーンのポリシーを次のようにREJECTまたはDROPに設定できます。

iptables -P FORWARD REJECT

転送されるすべてのパケットは、FORWARDチェーン内のルールが明示的にそれらを受け入れない場合、拒否されます。

内部トラフィックの場合、REJECTポリシーが必要になる可能性があります。これにより、パスが閉じていることがすぐにクライアントに通知されます。外部ネットワークからのトラフィックにはDROPルールが必要になる場合があります。

特定のパケットの通過を明示的に許可するために、ルールはそれらのチェーンに追加されます。これらのチェーンは、それらのルールが定義された順序でパケットに一致します。たとえば、eth0に着信し、ルーティングに基づいてeth1に転送されるすべてのトラフィックを許可するには:

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

また、たとえば、10.0.0.0/24サブネットからのパケットのみを反対方向に通過させるには、次のようにします。

iptables -A FORWARD -i eth1 -o eth0 -s 10.0.0.0/24 -j ACCEPT

すべてのパラメータの詳細については、 iptables-manpage および iptables-extensions manpage を参照してください。

5
rda