
これは私のフォローアップの質問です。前の質問。
私のロジックは、カーネルファイアウォールがネットワークアクセス層とインターネット層の間にあるということです。これは、宛先がホストであるかどうかを判断する前に、パケットをフィルタリングするために送信元と宛先のIPアドレスを読み取るためにIPパケットヘッダにアクセスする必要があるためです。または、パケットが別の場所に向かっている場合は、次のホップに転送する必要があります。
ファイアウォールがインターネット層の一部であると言うのも論理的なようです。インターネット層にはルーティングテーブルがあり、ファイアウォールはある点ではルーティングテーブルルールに似ているためです。
答え1
ファイアウォールは存在しません。場所カーネルネットワークスタックから。たとえば、Linuxでは、ファイアウォール機能をサポートする基本的なインフラストラクチャが次のように提供されています。Webフィルタパケットフィルタリングフレームワーク。 netfilterフレームワーク自体はカーネルプロトコルスタックのさまざまなポイントのフックセット。
Netfilterは5つのフックを提供します。
NF_IP_PRE_ROUTING
NF_IP_PRE_ROUTING
初期の健全性チェックに合格したパケットはフックに転送されます。これは、ルーティング決定が行われる前に発生します。NF_IP_LOCAL_IN
ホスト自体に向けられたパケットは
NF_IP_LOCAL_IN
フックに転送されます。NF_IP_FORWARD
NF_IP_FORWARD
他のインターフェイスに向けられたパケットはフックに転送されます。NF_IP_LOCAL_OUT
NF_IP_LOCAL_OUT
フックによってルーティングが変更される可能性がありますが、ローカルで生成されたパケットはルーティング決定が行われた後に転送されます。NF_IP_POST_ROUTING
フックは、
NF_IP_POST_ROUTING
パケットがネットワーク上で送信される前に転送できる最終フックです。
ファイアウォールは、netfilterフレームワークによって提供される各フックのコールバック機能を登録するカーネルモジュールと、ファイアウォールを構成するためのユーザースペースツールで構成されています。パケットがフックに転送されるたびに、対応するコールバック関数が呼び出されます。コールバック関数は、コールバックをトリガーしたパケットで自由に機能できます。コールバック関数は、パケットをさらに処理する必要があるのか、通常はユーザー空間処理のためにコールバック自体によって処理されるのか、またはパケットに対して同じフックを呼び出すべきかを決定します。
Netfilter は通常、次に関連付けられます。iptablesパケットフィルタ。 〜のようにGnoucは以前の質問ですでに指摘しています。iptablesには、netfilterとインタフェースするカーネルモジュールと、カーネル内のパケットフィルタを設定するip_tables
ユーザ空間プログラムがあります。iptables
実際、iptablesパケットフィルタは、それぞれ異なる種類のパケット処理に関連する様々なツールを提供する。
ユーザースペースツール
iptables
とip_tables
カーネルモジュールが興味を持っている部分は次のとおりです。IPv4パケットフィルタリング。ユーザースペースツール
ip6tables
とip6_tables
カーネルモジュールが興味を持っている部分は次のとおりです。IPv6パケットフィルタリング。ユーザースペースツール
arptables
とarp_tables
カーネルモジュールが興味を持っている部分は次のとおりです。ARPパケットフィルタリング。
iptablesパケットフィルタに加えてebtables
ユーザー空間ツールとeb_tables
カーネルモジュールはリンク層を管理します。イーサネットフレームフィルタリング。これらのツールを通称して次のように呼ぶこともあります。拡張テーブル、同様のテーブルベースのアーキテクチャが原因です。
アーキテクチャは、以下に基づいてパケット選択抽象化を提供します。テーブル一緒にパケット。各テーブルにはパケットフィルタが含まれています。ルールで組織チェーン。事前定義された5つのチェーン、PREROUTING、INPUT、FORWARD、OUTPUT、およびPOSTROUTINGは、netfilterが提供する5つのカーネルフックに対応します。ルールが属するテーブルによって、ルールが特定の netfilter フックに適用される相対順序が決まります。
- この
raw
テーブルは、他のテーブルの前にパケットをフィルタリングします。 - この
mangle
テーブルはパケットを変更するために使用されます。 - この
nat
テーブルは次の目的で使用されます。ネットワークアドレスの解釈(例:ポート転送) - この
filter
テーブルはパケットフィルタリングに使用され、パケットを変更しないでください。 - この
security
テーブルは、SELinuxなどのLinuxセキュリティモジュール(LSM)によって実装された必須アクセス制御(MAC)ネットワークルールに使用されます。
Jan Engelhardtの次の図は、テーブルとチェーンがOSIモデルのさまざまな層にどのように対応するかを示しています。
今年初めには、次の新しいパケットフィルタリングフレームワークがリリースされました。nftablesメインラインLinuxカーネルバージョン3.13にマージされました。 nftablesフレームワークは、既存のxtablesツールを置き換えるように設計されています。また、netfilterインフラストラクチャに基づいています。
Unixファミリーオペレーティングシステムの他のカーネルベースのファイアウォールには、次のものがあります。IPフィルタ(マルチプラットフォーム),PF(OpenBSD、さまざまな他のBSDバリアント、およびMac OS Xに移植)NPF(ネットBSD)、IPファイアウォール(FreeBSD、さまざまなオペレーティングシステムに移植)