Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> 5つの側面からLinuxファイアウォールフレームワークを分析する

5つの側面からLinuxファイアウォールフレームワークを分析する

  

LinuxのNetfilterは抽象的で一般化されたフレームワークを提供しますフレームワークによって定義されたサブ関数の実装はパケットフィルタリングサブシステムです。各ネットワークプロトコル(IPv4、IPv6など)は、プロトコルスタックを通るデータグラムフローのいくつかの重要なポイントで呼び出されるフック関数のセットを定義します(IPv4は5つのフック関数を定義します)。これらの点で、プロトコルスタックはデータグラムとフック関数ラベルをパラメータとしてNetfilterフレームワークを呼び出します。

2.カーネル内のどのモジュールでも、フックを実装するために各プロトコルの1つ以上のフックを登録できます。そのため、パケットがNetfilterフレームワークに渡されると、カーネルはモジュールがあるかどうかを検出できます。プロトコルとフック機能が登録されています。登録されている場合は、モジュールの登録時に使用されたコールバック関数が呼び出されるので、これらのモジュールはパケットをチェック(そしておそらく変更)し、パケットを破棄し、Netfilterにパケットをユーザ空間のキューに渡すように指示します。 。

3.キューに入れられたパケットは、ユーザースペースとは非同期に処理されます。ユーザプロセスはパケットを調べ、パケットを修正し、さらにカーネルを離れるのと同じフック関数を通してパケットをカーネルに再注入することさえできます。 4. IP層で破棄されるIPパケットは、実際に破棄される前にチェックされます。たとえば、モジュールはIP-Spoofedパケット(ルートによって破棄された)をチェックできます。

5. IPレイヤ内の5つのフックポイントの位置は次のとおりです。(1)NF_IP_PRE_ROUTING:ネットワークレイヤに入ったばかりのパケットは、このポイントを通過します(バージョン番号、チェックサムなどの直後)。この時点で送信元アドレス変換が実行され、IP_RcvがIP_Input.cで呼び出されます。(2)NF_IP_LOCAL_IN:経路が検索された後、このチェックポイントを介してマシンに送信され、この時点でINPUTパケットフィルタリングが行われ、IP_local_deliverで呼び出されます。 NF_IP_FORWARD:転送されるパケットはこの検出ポイントを通過し、FORWORDパケットフィルタリングはこの時点で実行されます;(4)NF_IP_POST_ROUTING:ネットワークデバイスを通過するすべてのパケットはすぐにこの検出ポイントを通過し、組み込み宛先アドレス変換機能(アドレスカモフラージュを含む)この時点で、(5)NF_IP_LOCAL_OUT:ローカルプロセスによって送信されたパケットはこの検出ポイントを通過し、OUTPUTパケットフィルタリングはこの時点で実行されます。

これらのポイントはすでにカーネル内で定義されており、カーネルモジュールはこれらのHOOKポイントで処理のために登録できます。これは、nf_register_hook関数を使用して指定できます。データグラムがこれらのフック関数を通過するときにデータグラムが呼び出されるので、モジュールはデータグラムを修正して以下の値をNetfilterに返すことができます。

NF_ACCEPTデータグラムを通常通り送信し続ける

NF_DROPデータグラムを破棄する。転送しなくなりました

NF_STOLENモジュールがデータグラムを引き継ぎ、データグラムの転送を続行しません。

NF_QUEUEデータグラムを照会します(通常、データをユーザー空間に処理するために使用されます)。

NF_REPEATフック関数の再呼び出し

IPtablesと呼ばれるNetgramベースのデータグラム選択システムがLinux 2.4カーネルに適用されていますが、実際はIPchainsの後継ですがよりスケーラブルです。カーネルモジュールは新しいルールテーブルを登録し、データグラムが指定されたルールテーブルを通過するように要求することができます。このデータグラムは、データグラムのフィルタリング(フィルタテーブル)、ネットワークアドレス変換(Natテーブル)、およびデータグラム処理(Mangleテーブル)に対して選択されます。 Linux 2.4カーネルが提供する3つのデータグラム処理機能は、Netfilterのフック機能とIPテーブルに基づいています。それらは互いに独立している独立したモジュールです。それらはすべて、Netfileterが提供するフレームワークに完全に統合されています。

パケットフィルタリング

フィルタテーブルはデータグラムを修正するのではなく、データグラムだけを修正します。 IPチェーン上のIPテーブルの1つの側面は、それが小さくて速いということです。それはフック関数NF_IP_LOCAL_IN、NF_IP_FORWARD、およびNF_IP_LOCAL_OUTを通してNetfilterフレームワークにアクセスします。したがって、レポートをフィルタリングするための場所は1つだけです。転送されたデータグラムはIPchainsの3つのチェーンを横断するので、これはIPchainsを超える大きな改善です。

NAT

NATテーブルは、3つのNetfilterフック関数(NF_IP_PRE_ROUTING、NF_IP_POST_ROUTING、およびNF_IP_LOCAL_OUT)を監視します。 NF_IP_PRE_ROUTINGは転送されるデータグラムの送信元アドレスのアドレス変換を実行し、NF_IP_POST_ROUTINGは転送されるパケットの宛先アドレスのアドレス変換を実行します。ローカルデータグラムの宛先アドレスの変換は、NF_IP_LOCAL_OUTによって実装されます。 NATテーブルはフィルタテーブルとは異なります。新しい接続の最初のデータグラムだけがテーブルを通過し、後続のデータグラムは最初のデータグラムの結果に基づいて同じ変換プロセスを実行するためです。 NATテーブルは、送信元NAT、宛先NAT、マスカレード(送信元NATの特殊なケース)、およびトランスペアレントプロキシ(送信先NATの特殊なケース)で使用されます。

パケットマングリング

マングルテーブルは、NF_IP_PRE_ROUTINGおよびNF_IP_LOCAL_OUTフックに登録されています。マングルテーブルを使用すると、データグラムを変更したり、帯域外データをデータグラムに添付したりできます。現在のマングルテーブルはTOSビットの変更とskbのnfmardフィールドの設定をサポートします。

独自のコードを追加したい場合は、nf_register_hook関数を使用する必要があります。私たちの仕事はstruct nf_hook_ops構造体のインスタンスを生成し、それをHOOKに置くためにHOF_register_hookを使うことです。リスト項目は常に{NULL、NULL}に初期化したい;それは一般にIP層で機能するので、pfは常にPF_INETである; hooknumは私たちが選ぶHOOKポイントであり; HOOKポイントは最初に誰でも優先順位、つまり優先順位の指定を確認する。 Netfilter_IPv4.hは、列挙型で組み込みハンドラの優先順位を指定します。

Copyright © Windowsの知識 All Rights Reserved