そこで、Linux環境でのファイアウォールの作成について説明します。 記事全体をいくつかの部分に分けます。 あなたが今読んでいるのは最初の部分で、さらに3つの部分に分かれています。 いくつかのトピックはよく知られており、文書化されているので、それらについての最小限の理論を示し、個別に練習しようとします。 みんなに興味を持たせるため。 また、深化のためのリンク(多くの場合、これらは英語の記事になります)。
最初の部分の内容:
1.1-仮想実験室の作成(作業場所を確保するため、コンピューターで仮想ネットワークを作成する方法を示します。ネットワークは3台のLinux ubuntuマシンで構成されます)。
1.2 -Linuxでの簡単なモジュールの作成。 Netfilterの概要とそれを使用したトラフィックの傍受。 すべてをまとめてテストします。
1.3- 単純なcharデバイスの作成。 仮想ファイルシステムの追加-sysfs。 ユーザーインターフェイスを記述します。 すべてをまとめてテストします。
2番目の部分の内容:
非表示のテキスト
2.1-2番目のパートの紹介。 ネットワークとプロトコルを調べます。 Wireshark
2.2-ファイアウォールテーブル。 トランスポート層 構造TCP、UDP。 ファイアウォールを拡張します。
2.3-機能を拡張します。 ユーザー空間でデータを処理します。 libnetfilter_queue。
2.4 -(*オプション)実際のバッファオーバーフロー攻撃を調査し、ファイアウォールの助けを借りてそれを防ぎます。
2.2-ファイアウォールテーブル。 トランスポート層 構造TCP、UDP。 ファイアウォールを拡張します。
2.3-機能を拡張します。 ユーザー空間でデータを処理します。 libnetfilter_queue。
2.4 -(*オプション)実際のバッファオーバーフロー攻撃を調査し、ファイアウォールの助けを借りてそれを防ぎます。
パート2。まだ準備ができていませんが、次のトピックについて考えます。ファイアウォールテーブルの簡単な紹介。 ステートレスファイアウォールとステートフルファイアウォール。 ルールテーブルを読み込むための別のモジュールを追加します(最初の部分のsysfs仮想ファイルシステムを介して、ここでは基本的に新しいものは何もないため、ここでソースコードを提供します)。 小さなプロキシプログラムをユーザースペースに追加し、必要なトラフィックをカーネルからプロキシに送信し、トラフィックのコンテンツを操作し、これに基づいて将来の運命について決定します(個々のサイトをブロックする機能を追加します)。 また、バッファオーバーフローに基づいた有名な攻撃を行い、それを使用してリモートコンピュータを制御し、ファイアウォールがこれをどのように保護できるかを確認します。
おそらく、2番目の部分は2つに分割されるか、変更されます。 最初の部分と2番目の部分の両方であなたのコメントと提案を非常にうれしく思います。
はじめに
このパートの目標は、すべてのトラフィックを非常に単純なレベルで制御するプログラムを作成することです。 つまり、スキップできるパッケージと削除するパッケージを決定します。 もちろん、結果を追跡するためのログの簡単なシステムと、ユーザー向けのプログラムを作成します。これらのプログラムを使用して、これらの結果を読み取ってプログラムを少し管理できます。 このような些細なファイアウォール、またはロシア語ではファイアウォール、ファイアウォールは、指定されたルールに従って非ネットワークパケットを通過するパケットを監視およびフィルタリングするコンピューターネットワーク内のハードウェアとソフトウェアの複合体です。 ( ウィキペディア )。
この場合、ファイアウォール機能は別のコンピューターによって実行されます。 次のようになります。
見てみましょう。 host1、host2、fwという3つの仮想コンピューターがあるネットワークを作成し、上の図のように接続します。
host1-静的IPアドレスを取得します-10.0.1.1。 彼を保護します。
host2-最後の部分で攻撃し、静的IPを持ちます-10.0.2.2
fw-すべてのトラフィックを監視し、インターネットにアクセスするために同じインターフェースを設定します。そのため、必要な場合(
DHCP (動的ホスト構成プロトコル-動的ホスト構成プロトコル)に関する簡単な説明では、TCP / IPネットワークでの作業に必要なIPアドレスおよびその他のパラメーターをコンピューターが自動的に取得できるネットワークプロトコルです。 (ウィキペディア)。
つまり、このネットワークインターフェイスを介してこの頭痛の種なしでインターネットにアクセスできるように、彼はIPを含むさまざまな設定を受け取ります。
仮想環境の作成。 理論
仮想マシンについて少し。 この場合、仮想マシンはコンピューターをエミュレートするプログラムであるため、コンピューターで3つのオペレーティングシステムを一度に実行できます。 トピックにまったく精通していない人のために、彼らはここから始めることができます 。
無料プログラムVirtualBoxを使用して、1台のコンピューターで仮想ネットワークを作成できるようにします。 もちろん、何を正確に使用するかは重要ではありません。主なことは、ネットワークを構成できることです。 プログラムは無料で、検索、ダウンロード、インストールが可能です。
次のステップは、仮想マシンを追加することです。 「歴史的な理由」のために、Linux Ubuntu 12を使用します。 最新バージョンをダウンロードできます。 特に、コンピューターが十分に強力な場合。 Ubuntuのイメージはこちらにあります 。
読者がvirtualboxに画像を追加して、画像に似たものを手に入れることを願っています。 virtualboxの「クローン」機能を使用して、さらに2台のマシンをすばやく作成することをお勧めします。 host1の役割で、host2は、グラフィカルインターフェイスなしで、ubuntuの特別に切り捨てられた「ライト」バージョンを持っています(完全なRAMに十分なRAMがありません)。
このようなものは最後を見るべきです
仮想環境を作成します。 練習する
ですから、すでに3つの仮想linuxマシンがあり、同じネットワーク上で構成し、プログラムの作成を開始する前にすべてが機能することを確認します。
設定に移動し、写真のように構成します。
ネットワークデバイスを追加します。
これで、Linuxはコンピューターにネットワークカードがあると「考える」ようになり、[詳細]を見ると、ケーブルも挿入されていることがわかります。 素晴らしい。 次に、オペレーティングシステムでこのカードを設定する必要があります。 これを行うには、host1を実行します。
この段階では、読者はIPアドレスが何であるか、どのように検索するのか、なぜ必要なのかを知っていると思います。 viで編集しますが、他のエディターでも編集できますが、保存できるように管理者権限(sudoで実行)を与えることを忘れないでください。
$ sudo vi /etc/network/interfaces
(マシンを再起動しないように)構成ファイルを再度読み取るようシステムに「お願いします」:
$ sudo ifdown eth0 && sudo ifup eth0
ifconfigを起動して、 IP == 10.0.1.1、マスクなどを含むeth0という名前のネットワークカードがあることを確認します 。
host2でも同じように、IPを10.0.2.2、ゲートウェイ10.0.2.3に設定し、virtualboxのマシンの設定にネットワークカードを「追加」することを忘れないでください(virtualboxの設定を変更した後、ブート時にマシンが数分間ハングして書き込みますネットワーク構成を待機しています...これは、デフォルトでは、ネットワークインターフェイスがdhcpとして構成されているためです。つまり、オペレーティングシステムはネットワーク設定を動的に受信するのを待っていますが、virtualboxでは、これをNATとして構成する必要がありますが、それを変更したため、 OSは何が問題なのかを理解しようとしています。最初にOSをロードし、 インターフェイスをアクティブにしてから、コンピューターの電源を切り、設定を変更して再起動します)。
Host2:
これでメインマシンの番になり、ファイアウォールとして機能します。 3枚のネットワークカードが必要であり、1枚は必要に応じてオンラインに接続できるため、NATとして定義されます。 残りの2つは、host1-> host2からトラフィックを転送し、host2-> host1からトラフィックを転送します。
Adapter1-NATとして設定する必要があります。 Adapter2、Adapter3の設定は、前の例(内部ネットワーク)と同じです。 まず、ネットワークインターフェイスカードの構成を開始します。 これは、interfacesファイルの外観です。
再起動後の最終的な構成結果は次のとおりです。
最後にやるべきことは、 パケット転送を有効にすることです。これにより、コンピューターは、host2からのパケットが来る1つのネットワークインターフェース(10.0.2.3)からパケットを取得し、host1にそれぞれ接続された別のネットワークインターフェース10.0.1.3に転送できます。
ここですべてを詳しく説明します。 構成を永続的にするには、/ etc / sysctl.confの次の行を変更する必要があります。
net.ipv4.ip_forward = 1
これは便利な方法で行うことができますが、sudoを忘れないでください。 インターフェースの設定に関する多くの情報をここで読むことができます 。
確認する
すべてが相互に接続され、機能することを確認するために残っています。 クラシックpingで確認します
図でわかるように、pingはhost1-> host2、host2-> host1、fw-> host1、fw-> host2で「パス」されました。 完了、「実験室」は将来の実験のために設定されます。
参照:
» ネットワーク画面
» 仮想マシン
» 転送を有効にする方法
» インターフェースの構成