SDN環境に基づく異常なDDoS攻撃の検知と軽減 - 実験
声明: いかなる形式においても無断で転載することを禁止します。引用する場合はリンク先をマークしてください。全文は合計 7903 文字で、読むのに必要な時間は約 5 分です
。
SDN環境に基づく異常なDDoS攻撃の検知と軽減 – 実験
実験を開始する前に、ローカル環境をセットアップします。必要なツール:
- フラッドライト (SDN コントローラーの一種)
- mininet (シミュレートされたネットワーク トポロジ環境)
- Sflow-RT(流量監視装置)
はじめに: sFlow テクノロジーは、デバイスポートを基本単位としたデータフローのランダムサンプリングに基づくトラフィック監視テクノロジーで、第 2 層から第 4 層、さらにはネットワーク全体に至る完全なリアルタイムのトラフィック情報を提供するだけでなく、トラフィック環境(10Gbit/s以上など)のトラフィック分析により、ネットワーク伝送フローのパフォーマンス、傾向、既存の問題を詳細かつリアルタイムで分析できます。sFlow 監視ツールは、sFlow Agent と sFlow Collector で構成されます。エージェントはクライアントとして、通常、ネットワーク転送デバイス (スイッチやルーターなど) に組み込まれています。デバイス上のインターフェイス統計情報とデータ情報を取得することで、エージェントは情報を sFlow パケットにカプセル化します。sFlow パケット バッファがいっぱいになったとき、またはその後sFlow パケットのキャッシュ時間 (1 秒) が経過すると、sFlow エージェントは指定されたコレクタに sFlow パケットを送信します。Collector はリモート サーバーとして、sFlow パケットのトラフィック レポートを分析、要約、生成する役割を果たします。
使用する必要があるプラットフォーム コンパイラ: java (JDK/JRE はバージョン 1.8 である必要があります)、ant コンパイラ、curl (コマンド ラインで動作する URL 構文を使用するファイル転送ツール)
仮想マシン: ubuntu20.04 (このバージョンは重要ではありません)
1. 投光器を設置する
1.1 関連する依存ライブラリをインストールする
sudo apt-get install build-essential default-jdk ant python-dev openjfx
sudo apt-get install git
1.2 Floodlight ソースをダウンロードする
git clone git://github.com/floodlight/floodlight.git
1.3 JDK1.8のインストール ( ⚠️インストール前にJava JDKのバージョンが1.8であることを確認してください)
ここで問題が発生します。jdk11 はデフォルトでインストールされていますが、jdk11 を使用して Floodlight を実行するとエラーが報告されるため (長い間ここでスタックしていた)、最初に JDK11 をアンインストールします。
sudo apt-get autoremove openjdk-11-jre-headless
jdk8を再ダウンロードしました
sudo apt install openjdk-8-jre-headless
他の関連する依存関係をインストールします。
sudo apt-get install ant python-dev build-essential maven openjfx
1.4. Floodlight フォルダーに入る
cd ~/floodlight
1.5 今後localhost:8080のWebページにアクセスできなくなる問題への事前対応
git pull origin master
git submodule init
git submodule update
1.6 コンパイル (Floodlight ディレクトリ内)
ant
ant でエラーが発生しました。
エラーは: パッケージ javax.xml.bind.annotation が存在しません。Ant
は、パッケージ ** が存在しないことを示します (エラーは次のように報告される場合があり、このステップは長時間停止しました)当時の時間)
jdkのバージョンがjdk11なので、jdkをjdk8に変更します。
sudo update-alternatives --config javac//切换jdk版本
まだエラー
echo $JAVA_HOME //查看JAVAHOME
// コンテンツがない場合
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 //加入自己jdk8的地址
1.7 次にビルドします (Floodlight ディレクトリ内)
ant
1.8以降、ビルドは成功します
java -jar target/floodlight.jar //运行floodlight控制器,该窗口请不要关闭
1.9 Webページアクセス管理インターフェース
ブラウザで Web ページhttp://localhost:8080/ui/index.htmlを開きます。
2. sFlow-RT フロー監視デバイスをインストールします。
2.1 公式サイトのインストールアドレスhttps://sflow-rt.com/download.php
2.2 ここではコマンドラインを使用してインストールします(インストール前にJDK1.8環境が必要です)
wget https://inmon.com/products/sFlow-RT/sflow-rt.tar.gz(下载)
tar -xvzf sflow-rt.tar.gz(解压)
./sflow-rt/start.sh(启动)
インストール パスとしてデスクトップを選択することに注意してください。システム ルート ディレクトリでは接続が失敗します。パスは重要です!
3. コマンドラインでcurlツールをインストールします。
wget https://curl.haxx.se/download/curl-7.55.1.tar.gz (ダウンロード)
tar -xzvf curl-7.55.1.tar.gz(解压)
3) インストールする
cd curl-7.55.1
./configure
make
make install
4) 更新が成功したかどうかを確認するには、curl --version を使用します。
curl --version
4. トポロジの構築
Floodlight が実行されているターミナルを維持し、新しいターミナル ウィンドウを開いて次のコマンドを入力して、必要なトポロジを構築します。
sudo mn --controller=remote,ip=127.0.0.1,port=6633 --topo=single,3
5. DDoS攻撃の検出
sFlow-RT を起動して
ターミナル上で Mininet を実行し続け、新しいターミナル ウィンドウを開き、次のコマンドを入力して sFlow-RT を起動します。
cd sflow-rt
./start.sh
b) sFlow エージェントの構成
sFlow コレクターが分析とプレゼンテーション用のフロー情報を収集できるように、仮想スイッチ上で sFlow エージェントを構成する必要があります。
c) sFlow エージェントをデプロイします。
sudo ovs-vsctl -- --id=@sflow create sflow agent=eth0 target=\"127.0.0.1:6343\" sampling=10 polling=20 -- -- set bridge s1 sflow=@sflow
コマンドを入力して、ip link
仮想スイッチのポートとポート番号の間のマッピングを表示します。
s1 スイッチに対応する番号は 4、host1 に接続されているスイッチのポートに対応する番号は 5 であることがわかります。
s1 スイッチに対応する番号は 4、host1 に接続されているスイッチのポートに対応する番号は 5 であることがわかります。
d) sFlow Agent が正常に設定されているかどうかを確認します。WebUI を通じて確認できます:
http://localhost:8008/html/index.html#status
e) flow-trend アプリをインストールします (図を参照)
git clone https://github.com/sflow-rt/flow-trend(下载)
sflow-rt/get-app.sh sflow-rt flow-trend(运行)
インストールが完了したら、すべての端末を閉じて上記の操作を繰り返すと、次の図が表示されます。
ページ上の[アプリ]オプションをクリックし、[フロートレンド]オプションをクリックします。
ローカルホスト:8008/app/flow-trend/html/index.html
次にKeys
、 、、Value
の各欄に入力し、右側の [送信 (√)] をクリックして送信します ------- その後、自動的にグラフィカルなトラフィック監視ページに移動しますFilter
ipsource,ipdestination,stack;bytes;留空
e) 次に、mininet コンソール ウィンドウに切り替え、次のコマンドを使用して Host1 と Host2 の端末を開きます。
xterm h1 h2
次に、Host1 で http サービスを開始します。
python3 -m http.server 80&
ホスト 2 でホスト 1 に ping を実行します
次に、トラフィックを観察します。トラフィックが正常であることがわかります。Host2 ターミナルで Ctrl+C を押して ping を停止できます。Host1 の HTTP サービスへのアクセスを試行できます。
2) DDoS 攻撃の検出
次に、ミニネット端末で DDoS シミュレーション攻撃を実行します ( h2 ping -f h1
-f パラメータは Ping Flood を意味し、フラッド攻撃をシミュレートします)。
h2 ping –f h1
次に、スイッチのトラフィックを観察します。
6. DDoS攻撃防御
システム ターミナルを開き、次のコマンドを入力して Floodlight API を呼び出し、既存のフロー テーブルをクエリします。
sudo curl http://127.0.0.1:8080/wm/staticflowpusher/list/00:00:00:00:00:00:01/json
戻り値は空です。
1) フロー テーブル操作を追加し
、操作と表示を容易にするために静的フロー テーブルを追加します。新しい ddos.json ファイルを作成し、フロー テーブルの内容をこのファイルに書き込み、送信します。 API を介した場合、ファイルの内容は次のとおりです。
次のコマンドを実行して、フロー テーブル ドロップ パケットを配信します。
curl -X POST -d @ddos.json http://127.0.0.1:8080/wm/staticflowpusher/json
“Entry pushed”
フロー テーブルが正常に配信されたことを示す を返します。
2) フローを
観察する sFlow に切り替えてフローを表示します。
フロー テーブルが配信された後、トラフィックが急速に減少し、h1 から h2 にフラッディングされたデータ パケットがすぐに完全にドロップされたことがわかりました。
h2の端末に切り替えてh1のWebサービスにアクセスします
こちらもアクセス不可。これは、提供したフロー テーブルがすべてのデータ パケットをドロップするためです。これは私たちが望んでいる効果ではありません。
3) フローテーブルの削除
以下のコマンドを実行して、配信したフローテーブルを削除します。
curl -X DELETE -d '{"name":"flow-mod-dropt"}' \
http://127.0.0.1:8080/wm/staticflowpusher/json
トラフィックを再度観察します。
攻撃に対するパケット フロー テーブルが復元されます。
4) 指定されたトラフィックをドロップする
OpenFlowSwitch が通常の HTTP サービスに影響を与えることなく ICMP トラフィックのみをドロップするように、配信する必要があるフロー テーブルを変換します。変更内容は次のとおりです。
2 つのフィールドが追加されます。eth_type: イーサネット タイプを ipv4 として指定し、ip_proto: プロトコル タイプを ICMP として指定します。
フロー テーブルを再度送信します。
curl -X POST -d @ddos.json http://127.0.0.1:8080/wm/staticflowpusher/json
このとき、トラフィックを観察し、h1 の HTTP サービスにアクセスします。
トラフィックは通常に低下しましたが、HTTP サービスは影響を受けずに引き続きアクセスできることがわかります。
7. まとめ
SDN テクノロジーを通じて、ネットワーク トラフィックをリアルタイムで監視、抽出、分析し、QoS、ロード バランシング、DDoS トラフィック フィルタリングなどのトラフィックをタイムリーに調整できます。
-終わり-