Linuxでのファイアウォールの作成とテスト、パート2.1。 第二部の紹介。 ネットワークとプロトコルを調べます。 Wireshark

最初の部分の内容:





2番目の部分の内容:



2.1-2番目のパートの紹介。 ネットワークとプロトコルを調べます。 Wireshark

2.2-ファイアウォールテーブル。 トランスポート層 構造TCP、UDP。 ファイアウォールを拡張します。

2.3-機能を拡張します。 ユーザー空間でデータを処理します。 libnetfilter_queue。

2.4-ボーナス。 実際のバッファオーバーフロー攻撃を調査し、ファイアウォールで防止します。



パート2



前のパートでは、単純なカーネルモジュール、ch​​arデバイスドライバーを作成し、読み取り/書き込みcharデバイスおよびsysfs操作を介してユーザー空間と通信するためのインターフェイスを装備し、最も重要なことには、すべてのトラフィックの順序付きインターセプトを追加しました。 このパートでは、ファイアウォールのトピックをもう少し深く掘り下げ、プログラムをより高度にする方法も見ていきます。



パート2.1ネットワークの概要。 理論から実践へ。



注意! 「プロトコル」、TCP \ IP、Wiresharkという言葉が初めてではない場合は、ここで何もする必要はありません。



続行する前に、このトピックにまったく関わっていなかった人のために、ネットワークについてほんの少し言葉を述べたいと思います(トピックには多くの情報があるため)。



1つのパケットが1つのデバイス(コンピューター、電話、ルーターなど)から別のデバイスに到達するためには、その輸送順序を決定する特定のルールが必要です。 これらのルールはプロトコルと呼ばれます。 たとえば、サンクトペテルブルクからテルアビブに飛ぶ場合は、空港に行き、カウンターに行き、チェックインし、別のカウンターに送り、そこに正しいことをして、あなたを送ります。輝かしいテルアビブで下車。 ネットワークでは、ネットワークやその他の要因に応じて、パケットはさまざまな段階を経ます。 理論的には、OSIモデルが定義され( ここを読んでください )、すべての段階を説明しますが、ほとんどすべてが少し異なります。 写真を見てみましょう:





画像ソース



クライアントがサーバーにパケットを送信すると、パケットはいくつかのインスタンスを通過します(これも古典的な理論上の場合です)。 アプリケーション-たとえば、ブラウザ。 彼はいくつかのデータ、例えばあなたがソーシャルにアップロードしたい写真を追加します。 ネットワーク。 トランスポート-ここではTCPとUDPの2つのプロトコルが普及しています。 それらには大きな違いがありますが、この段階では、それぞれが機能を果たすために情報を追加することが重要です(たとえば、すべてのパッケージが送信された順序で到着するように)。 ネットワーク-ここで最も一般的なプロトコルはIPであり、大規模なネットワーク上の異なるルーターを介してパケットが送信されるようにします。 パケットをプロバイダーに転送し、次に別のサーバーに転送し、次に別のサーバーに転送し、最後にエンドポイントに転送します。 リンクは小規模ネットワークでパケットをルーティングするために使用され、物理レベルは非常に低いレベルであり、ネットワークカードの個々のビットにより関連しています。



仮想ネットワークでも同じことが起こります。 IPプロトコルレベルでは、2つのフィールドのみが重要です。IP送信元-パケットの送信者、IP宛先-パケットの送信先。 TCPレベルでは、送信元ポート、宛先ポートのみに関心があります。 ポートは特定の接続識別番号です(たとえば、ブラウザがリモートサーバーに接続する場合、宛先ポート= 80でソースポート= 12345でこれを行います。既知のサービスの宛先ポートは事前に予約され、既知です。



例:



Host2は、host1パケットをポート12345からポート80に送信します。



データパケットは10.0.3.1ネットワークカードに到達し、その後ファイアウォールは10.0.2.1にリダイレクトしました(はい、fwはデータの送信先を正確に知っていたため、最初の部分からはまったく同じ転送を行います-別のトピック、それは簡単にインターネット上にあります)。





そして最後に、host1はデータパケットを受信し、そのIPアドレスがsrc ipフィールドに書き込まれていることを確認して、それを自分自身に持って行きます(そして、それを他の場所に転送しません)。



注意することが重要です! Srp ip、des tip、src port、dest port、TCP / UDP-これらのデータのうち5つは、通信セッションを一意に識別するために一意です(プロトコルなしで4つのデータについて話すことがよくあります。およびudpは一致できます)。 つまり、すべてがルールに従って、同じ5番目に記述されたデータを持つ2つの接続が同時に存在する通常のネットワークには存在できません。



これまでのところ、ネットワークの運用に関する知識がない読者が記事を読み続けるにはこれで十分だと思います。



重要2! 上記は最小限の直感を提供することを目的としており、完全な正確な状況とはほど遠いものですが、ネットワーク(インターネットなど)の主要な基盤を反映しています。



パート2.1ネットワークの概要。 練習する



実践として、ネットワークをリッスンするために広範囲のプログラムを使用できます(ちなみに、このプログラムは、このシリーズの記事のファイアウォールと同じ原理で機能します)。 LinuxとWindowsの両方で利用可能で、無料で配布されています。



パッケージでライブを見てみましょう。 だから、wiresharkを実行し、DHCP出力を聞きます:







ブラウザを起動して、Googleにアクセスしました。







一般的に、これを試したことがない人には、ここで遊んでみることを強くお勧めします。なぜなら、google.comへの接続に加えて、ネットワークで発生するすべて、すべて、すべて、プロトコルで動作し、その安定性を確保できるからです。 DNSおよび下位レベルを含む作業。 まだ何もせずに、私はすでに1000個以上のパッケージを所有しています。 フィルターを使用して、google.comへの接続に直接関連するものを見つけます





ダブルクリックして別のウィンドウで開きます。







これは見た目です。 使用されているすべてのOSIレベルは上に表示されています(上で書いたもの)。以下では、最も重要なIPソース、IP宛先など、IPプロトコルに関連するデータを強調しました。 アプリケーション(ブラウザ)レベルの最上部で、GoogleがGET /HTTP/1.1リクエストをgoogle.comに送信していること、つまりページ(HTTPプロトコルの詳細はインターネットでも簡単に見つけることができます)とシステムのさまざまな設定をリクエストしていることがわかります(言語、エンコードなど)。



TCPレベルでは、送信元ポート= 52983、宛先ポート= 80、およびインターネットで読み取れるその他のフラグが表示されます。



結論として、この記事は主にネットワークに精通していない人向けに書かれており、次のパートの準備を目的としています。 それの実際的な部分は、ネットワークを「感じた」ことがないが、同時にそれを常に望んでいた人々にとっての出発点となり得る。



次のパートでは、ファイアウォールテーブル、ステートフルファイアウォールとステートレスファイアウォールの違いについて説明し、モジュールから上記で説明したフィールドにアクセスする方法も確認します。



All Articles