web-dev-qa-db-ja.com

iptablesテーブルとチェーンをトラバースする方法

Linuxには3つの組み込みテーブルがあり、次のようにそれぞれに独自のチェーンがあることを知っています。

[〜#〜] filter [〜#〜]:PREROUTING、FORWARD、POSTOUTING

[〜#〜] nat [〜#〜]:プレルーティング、入力、出力、ポスルーティング

[〜#〜] mangle [〜#〜]:PREROUTING、INPUT、FORWARD、OUTPUT、POSTOUTING

しかし、それらがどのようにトラバースされるか、ある場合、その順序で理解することはできません。たとえば、次の場合、どのようにトラバースされますか。

  1. 同じローカルネットワークのPCにパケットを送信します
  2. 別のネットワークのPCにパケットを送信するとき
  3. ゲートウェイがパケットを受信し、それを転送する必要がある場合
  4. 自分宛のパケットを受け取ったとき
  5. その他のケース(ある場合)
23
zer0uno

ウィキペディアには、処理順序を示す 素晴らしい図 があります。

詳細については、iptablesのドキュメント、特に テーブルとチェーンのトラバースの章 もご覧ください。 フロー図 も含まれます。

順序は、netfilterの使用方法(ブリッジまたはネットワークフィルターとして、およびアプリケーションレイヤーとの相互作用があるかどうか)によって異なります。

一般的に(上記のリンクされた章の詳細にはもっと悪魔がいますが)チェーンは次のように処理されます

  • INPUTチェーンを「このホストの外部からへのトラフィックインバウンド」として参照してください。
  • FORWARDチェーンを「このホストをルーターとして使用するトラフィック」として参照してください(ソースと宛先はではありませんこのホストです)。
  • thisホストが送信したいトラフィック」としてOUTPUTチェーンを参照してください。
  • PREROUTING/POSTROUTINGは、テーブルタイプごとに使用方法が異なります(たとえば、NATテーブルの場合、PREROUTINGはインバウンド(ルーティング/転送)SNATトラフィック用であり、POSTROUTINGはアウトバウンド(ルーティング/転送)DNATトラフィック用です。詳細については、ドキュメントを参照してください。詳細。

さまざまなテーブルは次のとおりです。

  • マングルは、トラバース時にパケット(サービスの種類、存続時間など)を変更することです。
  • ナットはNATルールを入れることです。
  • Rawは、マーキングと接続追跡に使用されます。
  • Filterはパケットをフィルタリングするためのものです。

したがって、5つのシナリオの場合:

  1. 送信ホストがiptables、OUTPUT
  2. 上記と同じ
  3. FORWARDチェーン(ゲートウェイがiptablesのホストである場合)
  4. 「me」がiptablesを持つホストの場合、INPUT
  5. 上記のチェーンルール(一般的な経験則)とフロー図(これもwhatによって異なります)を見て、 IPTables)
31
Drav Sloan