web-dev-qa-db-ja.com

iptablesのPREROUTINGとFORWARDの違いは何ですか?

このシステムの仕組みを理解しようとしていますが、NAT PREROUTINGの使用とFORWARDのフィルター処理の違いを理解するのに問題があります。私が理解していることから、PREROUTEはフィルターを回避して、パケットを別のサーバーに送信できます。 NATがPREROUTEを介してこれを処理できる場合、フィルターにFORWARDルールを設定する目的は何ですか?

15
GheorGhe

NATテーブル

このテーブルは、異なるパケットのNAT(ネットワークアドレス変換)にのみ使用する必要があります。つまり、パケットのソースフィールドまたは宛先フィールドを変換するためにのみ使用する必要があります。

フィルターテーブル

フィルタテーブルは、主にパケットのフィルタリングに使用されます。パケットを照合し、希望する方法でフィルタリングできます。これは、実際にパケットに対してアクションを実行し、その内容に応じてパケットに含まれているものを調べ、それらをDROPまたは/ ACCEPTする場所です。もちろん、事前のフィルタリングを行うこともできます。ただし、この特定のテーブルは、フィルタリングが設計された場所です。

テーブルとチェーンの探索 フィルターのFORWARDチェーンは、転送されたパケット(ネットワークから来てネットワークに出て行くパケット)のみが通過することがわかります。 PREROUTINGチェーンは、転送されたパケットと、宛先がローカルホストであるパケットの両方によってトラバースされます。

パケットの宛先アドレスを変更するためだけにnatのPREROUTINGを使用し、フィルタリング(パケットのドロップ/受け入れ)のためだけにフィルターのFORWARDを使用する必要があります。

ローカルマシン自体を宛先としない最初のルーティング決定にパケットを取得すると、そのパケットはFORWARDチェーンを介してルーティングされます。一方、パケットがローカルマシンがリッスンしているIPアドレス宛てである場合、INPUTチェーンを介してローカルマシンにパケットを送信します。 enter image description here パケットはローカルマシン宛ての場合がありますが、NATを実行することにより、PREROUTINGチェーン内で宛先アドレスを変更できます。これは最初のルーティングの決定の前に行われるため、パケットはこの変更後に調べられます。このため、ルーティングの決定が行われる前にルーティングが変更される場合があります。すべてのパケットがこのイメージのいずれかのパスを通過することに注意してください。パケットを送信元と同じネットワークにDNATしても、ネットワーク上に戻るまで、残りのチェーンを通過します。

23
Eric Carvalho

PREROUTING:このチェーンは、パケットを送信する前にルーティング関連の決定を行うために使用されます(PRE)。 PREROUTING/POSTROUTINGで、つまりNATテーブルでは、デフォルトのFILTERテーブルのACCEPT/DROP/REJECTなどのターゲットが機能しないことを常に覚えておいてください。 NATテーブルは、ルーティングの決定を行うためにのみ使用されます。ルーティングの決定、つまり、パケットがネットワークを通過し始める前に行う必要がある決定を行うときは、PREROUTINGを使用する必要があります。次に例を示します。ポート80でサーバーに到達したばかりのトラフィックをポート8080にリダイレクトしています。

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

FORWARD:名前が示すように、FORWARDチェーンのFILTERテーブルは、ソースから宛先にパケットを転送するために使用されます。ここでは、ソースと宛先は2つです異なるホスト。想像できるように、FORWARDルールは、あるホストが別のホストからサーバーを介してトラフィックを送受信しているサーバーで基本的に使用されます。パケットがサーバーから生成されると、チェーンはOUTPUTになります。つまり、トラフィックはそれ自体から発信されますが、INPUTチェーンは、パケットがサーバー自体専用であることを意味します。以下はFORWARDチェーンの例です。インターフェースeth0のポート80で受信したTCPトラフィックは、ホスト192.168.0.4向けに受け入れられ、192.168.0.4に転送されます。 :

iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 192.168.0.4 -j ACCEPT
5
heemayl