iptablesは、 LinuxカーネルファイアウォールのIPパケットフィルタルールをシステム管理者が設定できるようにするユーザー空間ユーティリティプログラムです。これらのルールは、さまざまなNetfilterモジュールとして実装されています。フィルタは一連のテーブルに整理されており、各テーブルにはネットワークトラフィックパケットの処理方法に関するルールの連鎖が含まれています。異なるプロトコルには異なるカーネルモジュールとプログラムが使用されます。iptablesはIPv4、ip6tablesはIPv6、arptablesはARP、ebtablesはイーサネットフレームに適用されます。
iptables は動作するために管理者権限が必要であり、 rootユーザーによって実行されなければなりません。そうでない場合、正しく動作しません。ほとんどの Linux システムでは、iptables は/usr/sbin/iptablesとしてインストールされ、インストール時にman ページでドキュメント化されていますman iptables。また、 にも存在する可能性があります/sbin/iptablesが、iptables は「必須バイナリ」というよりはサービスに近いので、推奨される場所は/usr/sbinです。
iptablesという用語は、カーネルレベルのコンポーネントを包括的に指す場合にもよく使用されます。x_tablesは、4つのモジュールすべてで使用される共有コード部分を持ち、拡張機能に使用されるAPIも提供するカーネルモジュールの名前です。そのため、Xtablesはファイアウォール(v4、v6、arp、およびeb)アーキテクチャ全体を指す場合によく使用されます。
iptables はipchainsに取って代わり、iptables の後継はnftablesであり、2014 年 1 月 19 日にリリースされ[ 2 ] 、カーネル バージョン 3.13 でLinux カーネルのメインラインに統合されました。
iptables を使用すると、システム管理者はパケット処理のためのルールチェーンを含むテーブルを定義できます。各テーブルは、異なる種類のパケット処理に関連付けられています。パケットは、チェーン内のルールを順番にたどることで処理されます。チェーン内のルールは、別のチェーンへの goto またはジャンプを引き起こすことができ、これは必要なレベルのネストまで繰り返すことができます。(ジャンプは「呼び出し」のようなもので、ジャンプ元のポイントが記憶されます。)コンピュータに到着またはコンピュータから送信されるすべてのネットワークパケットは、少なくとも 1 つのチェーンをたどります。

パケットの発信元によって、最初に通過するチェーンが決まります。定義済みのチェーンは5 つあり(利用可能な Netfilter フック 5 つに対応)、テーブルにはすべてのチェーンが登録されているとは限りません。定義済みのチェーンにはポリシー(例えば DROP) が設定されており、パケットがチェーンの終端に達した場合に適用されます。システム管理者は、必要に応じて他のチェーンをいくつでも作成できます。これらのチェーンにはポリシーが設定されておらず、パケットがチェーンの終端に達すると、呼び出し元のチェーンに返されます。チェーンは空にすることも可能です。
PREROUTINGパケットはルーティング決定が行われる前にこのチェーンに入ります。INPUT: パケットはローカルに配信されます。これは、プロセスがソケットを開いていることとは関係ありません。ローカル配信は「local-delivery」ルーティングテーブルによって制御されますip route show table local。FORWARD: ルーティングされたパケットのうち、ローカル配信用ではないものはすべて、この経路を経由します。OUTPUT: マシン自体から送信されるパケットは、このチェーンを経由します。POSTROUTINGルーティングの決定が完了しました。パケットはハードウェアに渡される直前にこのチェーンに入ります。チェーンは単独では存在せず、テーブルに属します。テーブルはnat、filter、mangleの 3 つあります。オプション-tが前に付かない限り、コマンドはデフォルトでfilteriptablesテーブルに関係します。たとえば、いくつかのチェーンとそのルールを表示するコマンドは、と同等です。テーブルnatのチェーンを表示するには、コマンドを使用します。iptables -L -v -niptables -t filter -L -v -niptables -t nat -L -v -n
チェーン内の各ルールには、どのパケットに一致するかの仕様が含まれています。また、ターゲット(拡張機能に使用) または判定(組み込みの決定の 1 つ) が含まれる場合もあります。パケットがチェーンを通過する際、各ルールが順番に検査されます。ルールがパケットに一致しない場合、パケットは次のルールに渡されます。ルールがパケットに一致する場合、ルールはターゲット/判定によって示されるアクションを実行します。これにより、パケットがチェーンに沿って続行されることが許可される場合と許可されない場合があります。一致は、パケットがテストされる条件が含まれているため、ルールセットの大部分を占めます。これらは、たとえばおよびパラメータのように、 OSIモデルのほぼすべてのレイヤーで発生する可能性があり、 などのプロトコルに依存しない一致もあります。--mac-source-p tcp --dport-m time
パケットは、以下のいずれかが完了するまでチェーンを通り続けます。
ACCEPTルールはパケットに一致し、例えば、またはのいずれかを呼び出すDROPか、そのような最終的な結果を返すモジュールを呼び出すことによって、パケットの最終的な運命を決定します。RETURN評決を呼び出し、その場合、処理は呼び出しチェーンに戻ります。RETURNが使用されたかのように)、または最終的な運命であるベースチェーンポリシーが使用されます。ACCEPTターゲットは、 (NATモジュールがこれを行う) やDROP(たとえばREJECTモジュール)のような判定を返すこともありますが、ターゲット/判定がまったく指定されていないかのように次のルールに進むことを暗示する場合もありますCONTINUE(たとえばLOGモジュール。CONTINUEは内部名です)。
iptables 用のサードパーティ製ソフトウェアアプリケーションは数多く存在し、ルール設定を容易にすることを目的としています。テキスト形式またはグラフィカル形式のフロントエンドでは、ユーザーがクリック操作で簡単なルールセットを生成できます。スクリプトは通常、シェルスクリプト(他のスクリプト言語も使用可能)を指し、 iptables を呼び出すか、(より高速な方法iptables-restoreとして)定義済みのルールセット、または簡単な設定ファイルを使用してテンプレートから展開されたルールを使用します。Linux ディストリビューションでは、一般的に後者のテンプレートを使用する方式が採用されています。このようなテンプレートベースのアプローチは、実質的にはルールジェネレーターの限定的な形式であり、PHP ウェブページなど、スタンドアロンの形式でも存在します。
このようなフロントエンド、ジェネレーター、スクリプトは、多くの場合、組み込みのテンプレートシステムによって制限されており、テンプレートにはユーザー定義ルールを置き換えるための場所が用意されています。また、生成されるルールは、一般的にユーザーが望む特定のファイアウォール効果に最適化されていません。最適化すると、開発者のメンテナンスコストが増加する可能性があるためです。iptablesを十分に理解し、ルールセットを最適化したいユーザーは、独自のルールセットを作成することをお勧めします。