【文献】
伊藤 大輔 他,TCPセッション管理によるDoS耐性の考察,情報処理学会研究報告,2001年11月21日,第2001巻,第111号,p.183〜190
【文献】
大下 裕一 他,分散SYN Flood攻撃防御のための構築可能なオーバーレイネットワーク,電子情報通信学会技術研究報告,2004年12月 9日,第104巻,第513号,p.13〜18
(58)【調査した分野】(Int.Cl.,DB名)
【背景技術】
【0002】
従来のネットワーク機器はブラックボックスであり、外部から負荷分散や片寄等柔軟性に富んだ制御ができない。このため、ネットワークの規模が大きくなると、システムとしての挙動の把握と改善が困難になり、設計や構成変更には多大なコストを伴うことが問題であった。
【0003】
こうした課題を解決するための技術として、ネットワーク機器のパケット転送機能と経路制御機能を分離する手法が考えられている。例えば、パケット転送機能をネットワーク機器が担当し、経路制御機能をネットワーク機器の外部に分離した制御装置が担当することで、制御が容易になり柔軟性に富んだネットワークを構築することが可能になる。
【0004】
[CD分離型ネットワークの説明]
機能を分離したネットワークの1つとして、コントロールプレーン側の制御装置からデータプレーン側のノード装置を制御するCD(C:コントロールプレーン/D:データプレーン)分離型ネットワークが提案されている。
【0005】
CD分離型ネットワークの一例として、コントローラからスイッチを制御してネットワークの経路制御を行うオープンフロー(OpenFlow)技術を利用したオープンフローネットワークが挙げられる。オープンフロー技術の詳細については、非特許文献1に記載されている。なお、オープンフローネットワークは一例に過ぎない。
【0006】
[オープンフローネットワークの説明]
オープンフローネットワークでは、制御装置に相当するオープンフローコントローラ(OFC:OpenFlow Controller)が、ノード装置に相当するオープンフロースイッチ(OFS:OpenFlow Switch)の経路制御に関するフローテーブルを操作することにより、オープンフロースイッチ(OFS)の挙動を制御する。
【0007】
以下、記載の簡略化のため、オープンフローコントローラ(OFC)を「コントローラ(OFC)」と表記し、オープンフロースイッチ(OFS)を「スイッチ(OFS)」と表記する。
【0008】
コントローラ(OFC)とスイッチ(OFS)の間は、専用線やSSL(Secure Socket Layer)等により保護された通信路である「セキュアチャンネル」セキュアチャンネル(Secure Channel)により接続されている。コントローラ(OFC)とスイッチ(OFS)とは、セキュアチャンネルを介して、オープンフロー規約(OpenFlow Protocol)に準拠したオープンフローメッセージ(OpenFlow Message)を送受信する。
【0009】
オープンフローネットワークにおけるスイッチ(OFS)とは、オープンフローネットワークを形成し、コントローラ(OFC)の制御下にあるエッジスイッチ及びコアスイッチのことである。オープンフローネットワークにおける入力側エッジスイッチ(Ingress)でのパケット(packet)の受信(流入)から出力側エッジスイッチ(Egress)での送信(流出)までのパケットの一連の流れをフロー(Flow)と呼ぶ。
【0010】
パケットは、フレーム(frame)と読み替えても良い。パケットとフレームの違いは、プロトコルが扱うデータの単位(PDU:Protocol Data Unit)の違いに過ぎない。パケットは、「TCP/IP」(Transmission Control Protocol/Internet Protocol)のPDUである。一方、フレームは、「Ethernet(登録商標)」のPDUである。
【0011】
フローテーブルとは、フローとして扱うパケットを特定するための判別条件(ルール)と、パケットがルールに適合(マッチ)した回数を示す統計情報と、パケットに対して行うべき処理内容(アクション)の組を定義したフローエントリ(Flow entry)の集合である。
【0012】
フローエントリのルールは、パケットのヘッダ領域(フィールド)に含まれる各プロトコル階層の情報のいずれか又は全てを用いた様々な組み合わせにより定義され、区別可能である。各プロトコル階層の情報の例として、送信先アドレス(Destination Address)、送信元アドレス(Source Address)、送信先ポート(Destination Port)、送信元ポート(Source Port)等が考えられる。なお、上記のアドレスには、MACアドレス(Media Access Control Address)やIPアドレス(Internet Protocol Address)を含むものとする。また、上記に加えて、入口ポート(Ingress Port)の情報も、フローエントリのルールとして使用可能である。また、フローエントリのルールとして、フローとして扱うパケットのヘッダ領域の値の一部(又は全部)を、正規表現やワイルドカード「*」等で表現したものを設定することもできる。
【0013】
フローエントリのアクションは、「パケットを特定のポートに出力/転送する」、「パケットを破棄/廃棄する(削除する)」、「パケットのヘッダを書き換える」といった動作を示す。例えば、スイッチ(OFS)は、フローエントリのアクションに出力ポートの識別情報(出力ポート番号等)が示されていれば、これに該当するポートにパケットを出力し、出力ポートの識別情報が示されていなければ、パケットを破棄する。或いは、スイッチ(OFS)は、フローエントリのアクションにヘッダ情報が示されていれば、当該ヘッダ情報に基づいてパケットのヘッダを書き換える。
【0014】
スイッチ(OFS)は、フローエントリのルールに適合するパケット群(パケット系列)に対して、フローエントリのアクションを実行する。具体的には、スイッチ(OFS)は、パケットを受信すると、フローテーブルから、受信パケットのヘッダ情報に適合するルールを持つフローエントリを検索する。検索の結果、受信パケットのヘッダ情報に適合するルールを持つフローエントリが見つかった場合、当該フローエントリの統計情報を更新すると共に、受信パケットに対して、当該フローエントリのアクションとして指定された動作を実施する。一方、検索の結果、受信パケットのヘッダ情報に適合するルールを持つフローエントリが見つからなかった場合、当該受信パケットを最初のパケット(first packet)と判断し、制御チャネルを介して、オープンフローネットワークにおけるコントローラ(OFC)に対して、受信パケット(又はそのコピー)を転送し、受信パケットの送信元・送信先(宛先)等に基づいたパケットの経路計算を要求し、応答としてフローエントリの設定用メッセージを受信し、フローテーブルを更新する。
【0015】
なお、フローテーブルには、低い優先度で、全てのパケットのヘッダ情報に適合するルールを持つデフォルトエントリが登録されている。受信パケットに適合するフローエントリが他に見つからなかった場合、受信パケットは、このデフォルトエントリに適合する。デフォルトエントリのアクションは、「コントローラ(OFC)への当該受信パケットの問い合わせ情報の送信」である。
【0016】
[オープンフローネットワークのセキュリティ対応]
近年、ネットワーク機器の増加に伴うネットワーク管理コストの増加やネットワーク構成変更の柔軟性が低いことが問題視されており、この問題を解決する技術としてオープンフロー技術が生み出された。
【0017】
オープンフロー技術により、パケットの経路を計算・設定する処理をコントローラ(OFC)に集中させることで、既存のネットワークよりも管理や構成変更のコストを削減したオープンフローネットワークを構成することができる。
【0018】
しかし、このオープンフローネットワークにおいては、現状では「SYN Flood」攻撃と呼ばれるDoS攻撃(Denial of Service attack)への対応が考慮されていない。
【0019】
Dos攻撃の一般的な攻撃の1つである「SYN Flood」攻撃は、攻撃者がTCP接続の手順を中途半端な状態で中止することでサーバのリソースを枯渇させる攻撃である。クライアントとサーバとの間でTCP接続を確立するには、クライアントがサーバに「SYNパケット」を送信し、サーバがクライアントに「ACKパケット」を返信し、最後にクライアントがACKパケットを送り返すという手順を踏む。最後のACKパケットが届くまでサーバ側は「応答待ち」状態のまま待機することになり、その接続のために用意されたメモリ領域等のリソースを開放できなくなる。悪意のある攻撃者が大量のSYNパケットを送信し、故意にACKパケットを送らずに放置すると、そのうちサーバ側の「応答待ち」の接続数が限界を超え、新たに接続を受け付けられない状態になる。
【0020】
既存のネットワークをオープンフローネットワークに置換する場合、「SYN Flood」攻撃への対応を行う必要があるが、既存のネットワークにおける既存の防御手法をそのままオープンフローネットワークに適用するのは困難である。その理由について、以下に詳細に説明する。
【0021】
[既存の防御手法]
まず、「SYN Flood」攻撃に対する既存の防御手法について説明する。
【0022】
防御手法としては、大きく分けて2種類の手法がある。1つは攻撃対象とされるサーバ側の防御手法である。もう1つは攻撃パケットを転送するネットワーク機器側の防御手法である。
【0023】
(1)サーバ側の防御手法
サーバ側の防御手法には、「SYN cookies」や「SYN cache」等が従来技術として存在する。
【0024】
(2)ネットワーク機器側の防御手法
ネットワーク機器側の防御手法には、パケットの内容によって、受信したパケットの転送先を決定するルータ(Router)やロードバランサ(Load Balancer)等のネットワーク機器が、攻撃対象のサーバの代わりに、パケットの送信元ホストとのTCP接続(代理TCP接続)を行い、不正な接続やパケットを検知して防御するという手法が従来技術として存在する。
【0025】
但し、これらの防御手法をオープンフローネットワークに適用しようとした場合、サーバ側の防御手法及びネットワーク機器側の防御手法のいずれにおいても、以下のように新たな課題が発生する。
【0026】
(1)サーバ側の防御手法を用いた場合
オープンフローネットワークにおいては、ネットワーク機器に相当するスイッチ(OFS)自身が管理しているパケットの転送先を決めるための経路情報であるフローエントリに合致しないパケットを受信すると、コントローラ(OFC)に経路計算と設定を要求するために、パケットをコントローラ(OFC)へ転送する。そのため、パケットの転送処理を行うスイッチ(OFS)が大量の攻撃パケットを受信した場合、コントローラ(OFC)に大量の攻撃パケットを転送するため、コントローラ(OFC)の負荷が高くなり、適切にパケットを処理できなくなる可能性がある。
【0027】
(2)ネットワーク機器側の防御手法を用いた場合
オープンフローネットワークにおいても、既存の防御手法と同様に、パケットの送信先ホスト(サーバ)の代理として、ネットワーク機器に相当するスイッチ(OFS)がパケットの送信元ホストとの代理TCP接続を行い、更に、送信先ホストとも代理TCP接続を行う必要がある。しかし、通信経路上に複数のスイッチ(OFS)がある場合、各スイッチ(OFS)は、受信したパケットが、送信元ホスト及び送信先ホストの各々と既に代理TCP接続が行われた上で転送されたパケットであるかどうかを判断できない。従って、各スイッチ(OFS)は、個別に送信元ホスト及び送信先ホストの各々と代理TCP接続を行わなければならない。そのため、「各スイッチ(OFS)の代理TCP接続が全て確立するまでの待機時間によって通信遅延が増大する」という課題が発生してしまう。
【0028】
但し、ネットワーク機器側の防御手法を使用する場合、スイッチ(OFS)自体が不正な接続やパケットを検知して防御することが可能であるため、サーバ側の防御手法の課題である「コントローラ(OFC)に攻撃パケットが転送される」という課題は発生しない。
【発明を実施するための形態】
【0038】
本発明は、CD分離型ネットワークを対象としている。ここでは、CD分離型ネットワークの1つであるオープンフローネットワークを例に説明する。但し、実際には、オープンフローネットワークに限定されない。
【0039】
本発明では、既存のネットワーク機器側の防御手法をオープンフローネットワークに適用する場合に、各スイッチ(OFS)の代理TCP接続が全て確立するまでの待機時間によって通信遅延が増大するという課題を、代理TCP接続数を削減することで解決する。
【0040】
オープンフローネットワークにおいて、スイッチ(OFS)がホストとの代理TCP接続を行う場合、(1)「パケットの送信元ホスト」と「最も送信元ホストに近いスイッチ(OFS)」との間、及び、(2)「最も送信元ホストに近いスイッチ(OFS)」と「送信先サーバ」との間、の2箇所で行えば良い。
【0041】
しかし、各スイッチ(OFS)は、受信したパケットが、送信元ホストと既に代理TCP接続が行われた上で転送されたパケットなのかどうかを判断できないため、スイッチ(OFS)毎に、隣接するスイッチ(OFS)との代理TCP接続を行う必要があった。
【0042】
本発明では、パケットの送信元ホストからパケットの送信先サーバへの通信経路上において、以下のような処理を行う。
【0043】
スイッチ(OFS)は、通信経路上のスイッチ(OFS)のうち、最も送信元ホストに近いスイッチ(OFS)である場合、最も送信元ホストに近いスイッチ(OFS)であるかどうかを示す情報である「通信経路先頭識別子」をコントローラ(OFC)から受け取る。ここでは、通信経路先頭識別子の値は、先頭スイッチ(OFS)である旨を示す値であるものとする。先頭スイッチ(OFS)は、通信経路上で、最も送信元ホストに近いスイッチ(OFS)である。
【0044】
スイッチ(OFS)は、通信経路先頭識別子を受け取った場合、当該通信経路先頭識別子を、当該スイッチ(OFS)で管理している経路情報に追加する。ここでは、スイッチ(OFS)は、通信経路先頭識別子を受け取った場合、当該通信経路先頭識別子に基づいて、経路情報における通信経路先頭識別子の値を、先頭スイッチ(OFS)である旨を示す値に更新する。
【0045】
スイッチ(OFS)は、通信経路先頭識別子の値が先頭のスイッチ(OFS)を示す値である場合にのみ、ホストとの代理TCP接続を行う。すなわち、先頭スイッチ(OFS)はホストとの代理TCP接続を行うが、先頭スイッチ(OFS)以外のスイッチ(OFS)はホストとの代理TCP接続を行わない。
【0046】
これにより、これまで行われていた不要な代理TCP接続を排除し、通信遅延の要因となっていた代理TCP接続が確立するまでの時間を削減することができる。
【0047】
オープンフローネットワークにおいて、「SYN Flood」攻撃を防ぐためにネットワーク機器側の防御手法を用いた場合に発生する通信遅延という課題を、代理TCP接続数を削減することで解決する手法について、以下に詳細に説明する。
【0048】
<第1実施形態>
以下に、本発明の第1実施形態について添付図面を参照して説明する。
【0049】
[システム構成]
図1を参照して、本発明に係るオープンフローネットワークシステムの構成例について説明する。
【0050】
本発明に係るオープンフローネットワークシステムは、コントローラ(OFC)10と、スイッチ(OFS)20と、ホスト30を含む。
【0051】
コントローラ(OFC)10、スイッチ(OFS)20、及びホスト30は、それぞれ複数でも良い。例えば、複数のスイッチ(OFS)20の各々は、スイッチ(OFS)20−1、スイッチ(OFS)20−2、・・・、のように表記する。
図1では、コントローラ(OFC)10、スイッチ(OFS)20−1、スイッチ(OFS)20−2、ホスト30−1、及びホスト30−2を例示している。
【0052】
コントローラ(OFC)10は、スイッチ(OFS)20を管理する。
【0053】
スイッチ(OFS)20は、ネットワークを構成する。
【0054】
ホスト30は、スイッチ(OFS)20に接続され、スイッチ(OFS)20を介してネットワーク通信を行う。なお、ホスト30は、クライアントやサーバに限らず、オープンフローに未対応のネットワーク機器等でも良い。
【0055】
コントローラ(OFC)10とスイッチ(OFS)20の間は、専用線やSSL(SecureSocketLayer)等により保護された通信路である「セキュアチャンネル」で接続されている。コントローラ(OFC)10とスイッチ(OFS)20は、セキュアチャンネルを経由し、オープンフロープロトコルに則った通信を行う。
【0056】
コントローラ(OFC)10は、スイッチ(OFS)20に到着するパケットをスイッチ(OFS)20がどのように処理するかについて、各パケットに対応する経路情報であるフローエントリを操作することにより制御する。
【0057】
コントローラ(OFC)10は、スイッチ(OFS)20に、多数のフローエントリを登録することになる。フローエントリの集合は、「フローテーブル」と呼ばれる表形式で管理されている。
【0058】
各スイッチ(OFS)20は、フローテーブルを少なくとも1つ保持している。コントローラ(OFC)10は、配下の各スイッチ(OFS)20のフローテーブルと同じ内容のフローテーブルを全て保持している。すなわち、コントローラ(OFC)10は、各スイッチ(OFS)20のフローテーブルのマスターテーブルを保持している。
【0059】
なお、「フローテーブルを保持している」とは、そのフローテーブルを管理していることを意味する。そのフローテーブルをネットワーク経由等で管理可能であれば、実際には、そのフローテーブルが自身の内部に存在していなくても良い。すなわち、フローテーブルの保管場所は、そのフローテーブルを管理する装置の内部に限らず、外部でも良い。例えば、コントローラ(OFC)10とスイッチ(OFS)20が、ネットワーク上にある同一のフローテーブルを共有することも考えられる。
【0060】
[フローエントリの仕様]
図2を参照して、本発明に係るフローエントリの仕様について説明する。
【0061】
スイッチ(OFS)20は、各パケットに対応する経路情報として、
図2に示すように、フローエントリ200を保持している。
【0062】
フローエントリ200は、フローヘッダ201と、アクション202と、フローカウンタ203と、通信経路先頭識別子204を含む。
【0063】
フローヘッダ201は、フローエントリのルールを指定するための領域(フィールド)である。フローヘッダ201には、フローエントリのルールとして、OSI参照モデルのL1(レイヤ1:物理層)からL4(レイヤ4:トランスポート層)までの情報(属性値)を任意に組み合わせて指定することができる。なお、フローヘッダ201には、ブロードキャストアドレスやマルチキャストアドレスを指定することができる。また、「*」や「?」といったワイルドカードを使用することもできる。
【0064】
アクション202は、フローエントリのアクションを指定するための領域である。アクション202には、「特定のポートに出力する」、「廃棄する」、「ヘッダを書き換える」といった動作を指定することができる。
【0065】
フローカウンタ203は、受信したパケットの情報が当該フローエントリのルールにマッチした回数を記録するための領域である。ここでは、フローカウンタ203には、受信したパケットの情報がフローエントリ200のフローヘッダ201に合致した回数を記録する。
【0066】
通信経路先頭識別子204は、最も送信元ホストに近いスイッチ(OFS)であるかどうかを示す情報を指定するための領域である。すなわち、先頭スイッチ(OFS)である旨を示す値を記録するための領域である。スイッチ(OFS)20は、通信経路先頭識別子204に指定された値を参照して、自身が、受信したパケットの通信経路上の先頭スイッチ(OFS)であるかどうかを確認する。なお、通信経路先頭識別子204は、本発明においてフローエントリに新たに追加された領域である。
【0067】
[コントローラ(OFC)の構成]
図3を参照して、コントローラ(OFC)10の構成例について説明する。
【0068】
コントローラ(OFC)10は、ネットワーク管理部11と、経路計算部12と、パケット送受信部13を備える。
【0069】
ネットワーク管理部11は、スイッチ(OFS)20により構成されるネットワークのトポロジー情報(Network topology)を収集・管理する。また、ネットワーク管理部11は、スイッチ(OFS)20に設定されたフローエントリ200の集合を保持・管理する。
【0070】
経路計算部12は、トポロジー情報を基に、スイッチ(OFS)20から受信したパケットの通信経路を計算する。
【0071】
パケット送受信部13は、パケットの送受信を行う。また、パケット送受信部13は、計算の結果として得られた通信経路を基に、フローエントリ200を作成し、フローエントリ200をスイッチ(OFS)20に設定するためのオープンフローメッセージを作成する。或いは、スイッチ(OFS)20から、フローエントリ200の変更等に関するオープンフローメッセージを受信し、ネットワーク管理部11に、保持・管理されているフローエントリ200の変更等を要求する。なお、パケット送受信部13は、セキュアチャンネルを介して、スイッチ(OFS)20とオープンフローメッセージの送受信を行う。
【0072】
[スイッチ(OFS)の構成]
図4を参照して、スイッチ(OFS)20の構成例について説明する。
【0073】
スイッチ(OFS)20は、フローテーブル21と、フローテーブル管理部22と、パケット受信部23と、パケット送信部24と、パケット廃棄部25と、通信経路先頭解析部26と、代理TCP接続部27を備える。
【0074】
フローテーブル21は、フローエントリ200の集合である。例えば、フローテーブル21は、経路情報を蓄積するためのデータベースである。
【0075】
フローテーブル管理部22は、フローテーブル21に含まれるフローエントリ200を管理(追加/更新/削除)する。
【0076】
パケット受信部23は、コントローラ(OFC)10、隣接するスイッチ(OFS)20、ホスト30等からパケットを受信する。なお、パケット受信部23は、セキュアチャンネルを介して、コントローラ(OFC)10から、オープンフローメッセージを受信する。オープンフローメッセージを受信した際、当該オープンフローメッセージを解析し、当該オープンフローメッセージの種類・内容に応じた処理を行う。例えば、フローテーブル21にフローエントリ200を設定するためのオープンフローメッセージであれば、フローテーブル管理部22に、フローテーブル21へのフローエントリ200の設定を要求する。また、パケット受信部23は、LAN等のネットワークを介して、隣接するスイッチ(OFS)20やホスト30等からパケットを受信する。パケットを受信した際、受信したパケットにマッチするフローエントリ200が設定されているか確認し、受信したパケットにマッチするフローエントリ200が設定されている場合、当該フローエントリ200のアクション202に従って、当該パケットを処理する。例えば、受信したパケットにマッチしたフローエントリ200のアクション202に指定された動作が「パケットの送信/転送」である場合、又は、受信したパケットにマッチするフローエントリ200が設定されていない場合、パケット送信部24に、当該パケットの送信/転送を要求する。また、フローエントリ200のアクション202に指定された動作が「パケットの廃棄」である場合、パケット廃棄部25に、当該パケットの廃棄を要求する。
【0077】
パケット送信部24は、コントローラ(OFC)10、隣接するスイッチ(OFS)20、ホスト30等にパケットを送信/転送する。なお、パケット送信部24は、受信したパケットにマッチするフローエントリ200が設定されていない場合、セキュアチャンネルを介して、コントローラ(OFC)10に、パケットを転送し、当該パケットの経路計算と設定を要求する。例えば、パケット送信部24は、当該パケットの経路計算と設定を要求するためのオープンフローメッセージを作成し、当該オープンフローメッセージのデータ領域に当該パケットを格納し、当該オープンフローメッセージをコントローラ(OFC)10に送信する。また、パケット送信部24は、受信したパケットにマッチしたフローエントリ200のアクション202に指定された動作が「パケットの送信/転送」である場合、LAN等のネットワークを介して、隣接するスイッチ(OFS)20やホスト30等にパケットを送信/転送する。このとき、パケット送信部24は、送信先/転送先に応じた出力ポートにパケットを転送し、当該出力ポートからパケットを送出する。また、受信したパケットにマッチしたフローエントリ200のアクション202に指定された動作が「コントローラ(OFC)へのパケットの送信/転送」である場合、セキュアチャンネルを介して、コントローラ(OFC)10にパケットを送信/転送しても良い。実際には、パケット送信部24は、パケット受信部23と連携/一体化していても良い。
【0078】
パケット廃棄部25は、パケットを廃棄する。なお、パケット廃棄部25は、パケット受信部23からのパケットの廃棄の要求を受けた場合、或いは、何らかの事情でパケットが不要となった場合に、当該パケットを廃棄する。また、パケット廃棄部25は、パケットを廃棄する際、即座/即時に廃棄するのではなく、パケット受信時/廃棄要求時から一定時間が経過した場合や、所定の条件を満たした場合に、パケットを廃棄するようにすることもできる。実際には、パケット廃棄部25は、パケット受信部23と連携/一体化していても良い。
【0079】
通信経路先頭解析部26は、スイッチ(OFS)20がパケットの通信経路上の先頭スイッチ(OFS)かどうかを解析する。具体的には、通信経路先頭解析部26は、フローエントリ200の通信経路先頭識別子204の値を解析し、フローエントリ200の通信経路先頭識別子204の値が、先頭スイッチ(OFS)である旨を示す値であるか確認する。なお、通信経路先頭解析部26は、本発明においてスイッチ(OFS)20に新たに追加された構成要素である。実際には、通信経路先頭解析部26は、パケット受信部23と連携/一体化していても良い。
【0080】
代理TCP接続部27は、フローエントリ200の通信経路先頭識別子204の値が、先頭スイッチ(OFS)である旨を示す値である場合、ホスト30との代理TCP接続を行う。すなわち、スイッチ(OFS)20は、パケットの通信経路上の先頭スイッチ(OFS)である場合、通信経路上にある複数のスイッチ(OFS)の代表として、ホスト30との代理TCP接続を行う。このとき、代理TCP接続部27は、ホスト30との代理TCP接続を行うためのSYNパケットやACKパケットを作成し、ホスト30に送信/転送する。また、パケットの送信元ホストとの代理TCP接続に失敗した場合、パケット廃棄部25に、送信元ホストからのパケットの廃棄を要求する。なお、代理TCP接続部27は、本発明においてスイッチ(OFS)20に新たに追加された構成要素である。実際には、代理TCP接続部27は、パケット受信部23、パケット送信部24、及びパケット廃棄部25と連携/一体化していても良い。
【0081】
なお、パケット送信部24、パケット廃棄部25、通信経路先頭解析部26、及び代理TCP接続部27を一体化(統合)したものを、「パケット処理部」と呼ぶ。
【0082】
[処理の概要]
本発明を適用した場合の処理の概要を、以下の場合に分けて説明する。
【0083】
オープンフローネットワークにおいて、「SYN Flood」攻撃を受ける場合を「不正接続」とする。
【0084】
オープンフローネットワークにおいて、正常なTCP通信を行う場合を「正常接続」とする。
【0085】
[不正接続]
図5を参照して、オープンフローネットワークにおいて、「SYN Flood」攻撃を受けた場合における処理の概要について順に説明する。
【0086】
(1)SYNパケットの受信
スイッチ(OFS)20−1は、ホスト30−1からSYNパケットを受信する。
【0087】
(2)代理TCP接続の試行
スイッチ(OFS)20−1は、ホスト30−1との代理TCP接続を試みる。例えば、スイッチ(OFS)20−1は、ホスト30−1にACKパケットを送信し、ホスト30−1がACKパケットを送り返してくるのを待つ。ホスト30−1からの「SYN Flood」攻撃である場合、ホスト30−1がACKパケットを送り返してこないため、ホスト30−1との代理TCP接続は必ず失敗する。
【0088】
(3)「SYN Flood」攻撃の判定
スイッチ(OFS)20−1は、ホスト30−1との代理TCP接続が失敗した場合、ホスト30−1から受け取ったパケットが「SYN Flood」攻撃としてのSYNパケットである可能性が高いと判断し、コントローラ(OFC)10にパケットを転送することなく、受信したSYNパケットを廃棄し、処理を終了する。
【0089】
これにより、スイッチ(OFS)20−1は、「SYN Flood」攻撃を防御することができる。
【0090】
[正常接続]
図6を参照して、オープンフローネットワークにおいて、正常なTCP通信を行う場合における処理の概要について順に説明する。
【0091】
(1)SYNパケットの受信
スイッチ(OFS)20−1は、ホスト30−1からSYNパケットを受信する。
【0092】
(2)送信元との代理TCP接続の試行
スイッチ(OFS)20−1は、ホスト30−1との代理TCP接続を試みる。正常なTCP通信の場合、ホスト30−1との代理TCP接続は成功する。これにより、スイッチ(OFS)20−1とホスト30−1との間の通信経路が確立する。
【0093】
(3)経路計算と設定の要求
スイッチ(OFS)20−1は、ホスト30−1との代理TCP接続が成功した場合、コントローラ(OFC)10に、パケットを転送し、ホスト30−1から受信したパケットの経路計算と設定を要求する。ここでは、パケットの送信元はホスト30−1であり、パケットの送信先はホスト30−2であるものとする。例えば、ホスト30−1は、クライアントであり、ホスト30−2は、サーバであるものとする。
【0094】
(4)経路計算
コントローラ(OFC)10は、スイッチ(OFS)20−1からの要求に応じて、経路計算を行い、計算の結果として得られた通信経路を基にフローエントリ200を作成する。ここでは、通信経路上で最も送信元のホスト30−1に近いスイッチ(OFS)は、要求元のスイッチ(OFS)20−1である。
【0095】
なお、コントローラ(OFC)10は、通信経路上で最も送信先のホスト30−2に近いスイッチ(OFS)から順にフローエントリを設定する。その理由は、通信経路上で最も送信元のホスト30−1に近いスイッチ(OFS)から順にフローエントリを設定すると、通信経路上の全てのスイッチ(OFS)へのフローエントリの設定が完了する前に、パケットの転送等が開始されてしまうからである。
【0096】
(5)先頭スイッチ以外の設定
コントローラ(OFC)10は、スイッチ(OFS)20−2に設定されるフローエントリ200の通信経路先頭識別子204に、先頭スイッチ(OFS)ではない旨を示す値を指定し、スイッチ(OFS)20−2にフローエントリ200を設定する。
【0097】
(6)先頭スイッチの設定
コントローラ(OFC)10は、スイッチ(OFS)20−1に設定されるフローエントリ200の通信経路先頭識別子204に、先頭スイッチ(OFS)である旨を示す値を指定し、スイッチ(OFS)20−1にフローエントリ200を設定する。
【0098】
(7)送信先との代理TCP接続の試行
スイッチ(OFS)20−1は、設定されたフローエントリ200の通信経路先頭識別子204を解析し、フローエントリ200の通信経路先頭識別子204の値が、先頭スイッチ(OFS)である旨を示す値であるため、ホスト30−2との代理TCP接続を行う。
【0099】
ここでは、スイッチ(OFS)20−1は、自身のフローエントリ200のアクション202に従って、この代理TCP接続のSYNパケットをスイッチ(OFS)20−2に送信する。
【0100】
また、スイッチ(OFS)20−2は、この代理TCP接続のSYNパケットを受信した際、設定されたフローエントリ200の通信経路先頭識別子204の値を解析し、通信経路先頭識別子204の値が、先頭スイッチ(OFS)である旨を示す値ではないため、代理TCP接続を行わず、自身のフローエントリ200のアクション202に従って、受信したSYNパケットをホスト30−2に転送する。
【0101】
通常、スイッチ(OFS)20−1は正常なTCP通信を行うため、スイッチ(OFS)20−1とホスト30−2との代理TCP接続は成功する。例えば、ホスト30−2は、この代理TCP接続のSYNパケットを受信した際、スイッチ(OFS)20−1にACKパケットを送信し、スイッチ(OFS)20−1がACKパケットを送り返してくるのを待つ。スイッチ(OFS)20−1は、ホスト30−2にACKパケットを送り返す。これにより、スイッチ(OFS)20−1とホスト30−2との間の通信経路が確立する。
【0102】
スイッチ(OFS)20−1とホスト30−2との間の通信経路が確立した時点では、スイッチ(OFS)20−1は、ホスト30−1及びホスト30−2とそれぞれ個別にTCP接続をしているに過ぎない。このとき、スイッチ(OFS)20−1とホスト30−1との間での代理TCP接続におけるパケットのフィールド値は、スイッチ(OFS)20−1とホスト30−2との間での代理TCP接続におけるパケットのフィールド値と異なっている。異なっているフィールド値は、
図7に示すTCPヘッダの「確認応答番号」と「シーケンス番号」である。
【0103】
スイッチ(OFS)20−1は、ホスト30−1とホスト30−2が直接TCP接続しているように見せる(擬装する)ために、ホスト30−1とホスト30−2との間の通信パケットの受信時に、通信パケットのフィールド値を変更(変換)する必要がある。この変更(変換)処理は、代理TCP接続において必要な処理である。
【0104】
(8)変換用フローエントリの設定
スイッチ(OFS)20−1は、ホスト30−1とホスト30−2との間の通信パケットのフィールド値を変更(変換)するためのフローエントリ200の設定を行う。例えば、スイッチ(OFS)20−1は、コントローラ(OFC)10により設定されたフローエントリ200を変更し、このフローエントリ200のアクション202に、ホスト30−1とホスト30−2との間の通信パケットのフィールド値を変更(変換)する動作を追加指定し、フローエントリ200の変更をコントローラ(OFC)10に通知する。或いは、スイッチ(OFS)20−1は、通信パケットのフィールド値を変更(変換)する動作を指定した新規のフローエントリ200を自身に設定し、この新規のフローエントリ200をコントローラ(OFC)10に通知する。この新規のフローエントリ200については、既存のフローエントリ200よりも優先度を高く設定すると好適である。
【0105】
(9)通信パケットの受信
スイッチ(OFS)20−1は、ホスト30−1から通信パケットを受信する。
【0106】
(10)通信パケットのフィールド値の変換
スイッチ(OFS)20−1は、ホスト30−1とホスト30−2との間の通信パケットの受信時に、自身のフローエントリ200のアクション202に従って、通信パケットのフィールド値を変更(変換)する。ここでは、スイッチ(OFS)20−1は、通信パケットのフィールド値のうち、TCPヘッダの「確認応答番号」と「シーケンス番号」を変更(変換)する。これにより、ホスト30−1とホスト30−2との間の通信経路が確立する。ホスト30−1とホスト30−2は、スイッチ(OFS)20−1が代理でTCP接続していることを意識することなく、相互に通信することができる。
【0107】
(11)通信パケットの受信
スイッチ(OFS)20−1は、ホスト30−2に通信パケットを転送する。
【0108】
ここでは、ホスト30−1からホスト30−2に通信パケットを送信する場合について説明しているが、ホスト30−2からホスト30−1に通信パケットを送信する場合についても同様の変換処理を行う。この場合、(9)通信パケットの受信から(11)通信パケットの受信までの各処理において、「ホスト30−1」と「ホスト30−2」とを相互に読み替える。
【0109】
上記のように、本発明では、正常なTCP通信を行う場合、経路上の先頭スイッチ(OFS)が代表して代理TCP接続をすることで、不要な代理TCP接続数を削減することができる。
【0110】
また、本発明では、オープンフローネットワークにおいて、パケットの通信経路上に複数のスイッチ(OFS)20が存在する場合においても、「SYN Flood」攻撃を防御しながら通信遅延を短縮することが可能となる。
【0111】
[正常接続終了時]
更に、正常なTCP通信が終了した場合における処理について説明する。
【0112】
スイッチ(OFS)20−1は、ホスト30−1又はホスト30−2の少なくとも一方との代理TCP接続が終了(切断)した場合、代理TCP接続に関するフローエントリ200をフローテーブル21から削除する。
【0113】
このとき、スイッチ(OFS)20−1は、当該フローエントリ200を削除するための削除用オープンフローメッセージを作成する。
【0114】
例えば、スイッチ(OFS)20−1は、削除用オープンフローメッセージをコントローラ(OFC)10に通知する。コントローラ(OFC)10は、削除用オープンフローメッセージに応じて、通信経路上の各スイッチ(OFS)20から当該フローエントリ200を削除する。なお、コントローラ(OFC)10は、通信経路上の各スイッチ(OFS)20に、削除用オープンフローメッセージを転送しても良い。
【0115】
或いは、スイッチ(OFS)20−1は、当該フローエントリ200のアクション202に従って、通信経路上の各スイッチ(OFS)20に削除用オープンフローメッセージを送信する。送信と同時に/送信後、当該フローエントリ200を削除し、当該フローエントリ200の削除をコントローラ(OFC)10に通知する。
【0116】
通信経路上の各スイッチ(OFS)20は、削除用オープンフローメッセージを受信した際に、自身のフローエントリ200のアクション202に従って、隣接するスイッチ(OFS)20に削除用オープンフローメッセージを転送するようにしても良い。転送と同時に/転送後、自身のフローエントリ200を削除し、自身のフローエントリ200の削除をコントローラ(OFC)10に通知する。隣接するスイッチ(OFS)20が存在しない場合、削除用オープンフローメッセージを廃棄する。
【0117】
[パケット受信時の処理]
図8A、
図8Bを参照して、スイッチ(OFS)20−1がSYNパケットを受信した場合における処理の流れについて説明する。
【0118】
ここでは、ホスト30−1からホスト30−2にパケットを送信する事例について説明する。例えば、ホスト30−1は、ホスト30−2との代理TCP接続を行う場合、ホスト30−2宛にSYNパケットを送信する。また、ホスト30−1は、ホスト30−2との間で通信経路が確立した場合、ホスト30−2宛に通常パケットを送信する。
【0119】
(1)ステップS101
スイッチ(OFS)20−1は、ホスト30−1からパケットを受信する。
【0120】
(2)ステップS102
スイッチ(OFS)20−1は、自身が管理するフローテーブル21中に、受信したパケットと合致するフローエントリ200が存在するか確認する。例えば、スイッチ(OFS)20−1は、受信したパケットのヘッダの情報が、自身が管理するフローテーブル21中のフローエントリ200のフローヘッダ201の情報に合致するか確認する。
【0121】
(3)ステップS103
スイッチ(OFS)20−1は、自身が管理するフローテーブル21中に、受信したパケットと合致するフローエントリ200が存在しない場合(ステップS102でNo)、受信したパケットがSYNパケットであるか確認する。
【0122】
(4)ステップS104
スイッチ(OFS)20−1は、受信したパケットがSYNパケットである場合(ステップS103でYes)、このSYNパケットの送信元であるホスト30−1との代理TCP接続を試みる。
【0123】
(5)ステップS105
スイッチ(OFS)20−1は、ホスト30−1との代理TCP接続が成功したか確認する。ホスト30−1からの「SYN Flood」攻撃である場合(ステップS105でNo)、スイッチ(OFS)20−1とホスト30−1との代理TCP接続は必ず失敗する。スイッチ(OFS)20−1は、ホスト30−1との代理TCP接続が失敗した場合、ホスト30−1から受け取ったパケットが「SYN Flood」攻撃としてのSYNパケットである可能性が高いと判断し、自身を管理するコントローラ(OFC)10にパケットを転送することなく、受信したパケットを廃棄し、処理を終了する。
【0124】
(6)ステップS106
スイッチ(OFS)20−1は、ホスト30−1との代理TCP接続が成功した場合(ステップS105でYes)、コントローラ(OFC)10に、受信したパケットを転送し、受信したパケットの経路計算と設定を要求する。
(7)ステップS107
コントローラ(OFC)10は、スイッチ(OFS)20−1からの要求に応じて、経路計算を行い、計算の結果として得られた通信経路を基に、通信経路上の各スイッチ(OFS)20にフローエントリ200を設定する。各スイッチ(OFS)20は、コントローラ(OFC)10から設定されたフローエントリ200をフローテーブル21に登録する。
【0125】
(8)ステップS108
スイッチ(OFS)20−1は、自身が先頭スイッチ(OFS)であるか確認する。ここでは、スイッチ(OFS)20−1は、コントローラ(OFC)10から設定されたフローエントリ200の通信経路先頭識別子204を解析し、フローエントリ200の通信経路先頭識別子204の値が、先頭スイッチ(OFS)である旨を示す値であるか確認する。
【0126】
(9)ステップS109
スイッチ(OFS)20−1は、自身が先頭スイッチ(OFS)である場合(ステップS108でYes)、ホスト30−2との代理TCP接続を試みる。例えば、スイッチ(OFS)20−1は、自身のフローエントリ200のアクション202に従って、ホスト30−2との代理TCP接続のためのSYNパケットを、ホスト30−2に送信する。
【0127】
(10)ステップS110
スイッチ(OFS)20−1は、ホスト30−2との代理TCP接続が成功したか確認する。通常、スイッチ(OFS)20−1は正常なTCP通信を行うため、スイッチ(OFS)20−1とホスト30−2との代理TCP接続は成功する。仮に、何らかの事情で、スイッチ(OFS)20−1とホスト30−2との代理TCP接続が失敗した場合(ステップS110でNo)、処理を終了する。或いは、一定時間経過後/定期的に、ホスト30−2との代理TCP接続を再試行し、一定回数の代理TCP接続の再試行が失敗した場合、処理を終了するようにしても良い。このとき、スイッチ(OFS)20−1は、ホスト30−2との代理TCP接続が失敗した旨を、コントローラ(OFC)10及びホスト30−1に通知するようにしても良い。
【0128】
(11)ステップS111
スイッチ(OFS)20−1は、ホスト30−2との代理TCP接続が成功した場合(ステップS110でYes)、ホスト30−1とホスト30−2との間の通信パケットのフィールド値を変更(変換)するため、フローエントリ200を更新し、フローエントリ200のアクション202に、ホスト30−1とホスト30−2との間の通信パケットのフィールド値を変更(変換)する動作を指定する。実際には、新規のフローエントリ200を設定しても良い。その後、処理を終了する。例えば、ホスト30−1からの通信パケット等の到着を待つ(ステップS101に戻る)。
【0129】
(12)ステップS112
なお、スイッチ(OFS)20−1は、受信したパケットと合致するフローエントリ200が存在せず、受信したパケットがSYNパケットではない場合(ステップS103でNo)、当該パケットを「ファーストパケット」(First packet)と判断し、通常のオープンフローネットワークと同様に処理する。すなわち、スイッチ(OFS)20−1は、コントローラ(OFC)10に、受信したパケットを転送し、受信したパケットの経路計算と設定を要求する。
【0130】
(13)ステップS113
コントローラ(OFC)10は、スイッチ(OFS)20−1からの要求に応じて、経路計算を行い、計算の結果として得られた通信経路を基に、通信経路上の各スイッチ(OFS)20に、ファーストパケット用のフローエントリ200を設定する。このフローエントリ200の仕様は、通信経路先頭識別子204を含まない通常のフローエントリの仕様でも十分である。各スイッチ(OFS)20は、コントローラ(OFC)10から設定されたフローエントリ200をフローテーブル21に登録する。
【0131】
(14)ステップS114
スイッチ(OFS)20−1は、受信したパケットと合致するフローエントリ200が存在する場合(ステップS102でYes)、或いは、自身が先頭スイッチ(OFS)ではない場合(ステップS108でNo)、又は、コントローラ(OFC)10からファーストパケット用のフローエントリ200を設定された場合(ステップS113の後)、自身のフローエントリ200のアクション202に従って、受信したパケットを処理する。なお、スイッチ(OFS)20−1以外のスイッチ(OFS)20も、スイッチ(OFS)20−1と同様に、自身のフローエントリ200のアクション202に従って、受信したパケットを処理する。
【0132】
これにより、オープンフローネットワークにおいて、「SYN Flood」攻撃が行われた場合、攻撃を回避しながら代理TCP接続による通信時間の遅延を小さくすることができる。
【0133】
<第2実施形態>
以下に、本発明の第2実施形態について説明する。
【0134】
本発明は、
図9に示すように、コントローラ(OFC)10やスイッチ(OFS)20がネットワーク上に複数ある場合でも成立する。更に、本発明は、ネットワーク上にある複数のスイッチ(OFS)間がどのように接続されていても成立する。
【0135】
[システム構成]
図9を参照して、本実施形態に係るオープンフローネットワークシステムの構成例について説明する。
【0136】
本実施形態に係るオープンフローネットワークシステムは、コントローラ(OFC)10(10−i、i=1〜X:Xは任意)と、スイッチ(OFS)20(20−j、j=1〜Y:Yは任意)と、ホスト30(30−k、k=1〜Z:Zは任意)を含む。
【0137】
コントローラ(OFC)10(10−i、i=1〜X)、スイッチ(OFS)20(20−j、j=1〜Y)、及びホスト30(30−k、k=1〜Z)は、それぞれ第1実施形態において説明したコントローラ(OFC)10、スイッチ(OFS)20、及びホスト30に相当する。
【0138】
例えば、
図9に示すようなオープンフローネットワークシステムにおいて、ホスト30−1からホスト30−Zに通信パケットを送信する場合、スイッチ(OFS)20−1、スイッチ(OFS)20−4、スイッチ(OFS)20−8、・・・、スイッチ(OFS)20−Y、及びスイッチ(OFS)20−(Y−1)が通信経路上のスイッチ(OFS)となる。
【0139】
このとき、スイッチ(OFS)20−1は、先頭スイッチ(OFS)となる。また、スイッチ(OFS)20−4、スイッチ(OFS)20−8、・・・、スイッチ(OFS)20−Y、及びスイッチ(OFS)20−(Y−1)の各々は、先頭スイッチ(OFS)以外のスイッチ(OFS)となる。
【0140】
なお、スイッチ(OFS)20−1がパケットを転送するコントローラ(OFC)10は、コントローラ(OFC)10−1、コントローラ(OFC)10−2、・・・、コントローラ(OFC)10−Xのいずれかである。
【0141】
<第3実施形態>
以下に、本発明の第3実施形態について説明する。
【0142】
本発明は、
図5に示す「不正接続」や
図6に示す「正常接続」の「(1)SYNパケットの受信」の直後に、コントローラ(OFC)にSYNパケットを転送する場合でも成立する。
【0143】
[システム構成]
本実施形態に係るオープンフローネットワークシステムの構成例については、
図1に示す構成例(第1実施形態)と同様であるものとする。
【0144】
[処理の概要]
図10を参照して、本実施形態における処理の概要を、以下に説明する。
【0145】
(1)SYNパケットの受信
スイッチ(OFS)20−1は、ホスト30−1からSYNパケットを受信する。
【0146】
(2)SYNパケットの転送
スイッチ(OFS)20−1は、受信したSYNパケットをコントローラ(OFC)10に転送する。コントローラ(OFC)10は、スイッチ(OFS)20−1からSYNパケットを受信した場合、経路計算をせずにスイッチ(OFS)20−1からの要求を待つ。
【0147】
(3)代理TCP接続の試行
スイッチ(OFS)20−1は、ホスト30−1との代理TCP接続を試みる。
【0148】
(4)失敗時の廃棄要求
スイッチ(OFS)20−1は、ホスト30−1との代理TCP接続が失敗する場合、コントローラ(OFC)10に、先に転送したパケット(SYNパケット)の廃棄を要求し、処理を終了する。コントローラ(OFC)10は、スイッチ(OFS)20−1からの当該要求に応じて、SYNパケットを廃棄し、処理を終了する。
【0149】
(5)成功時の計算要求
スイッチ(OFS)20−1は、ホスト30−1との代理TCP接続が成功する場合、コントローラ(OFC)10に、先に転送したパケット(SYNパケット)の経路計算と設定を要求する。
【0150】
以降は、
図6に示す「正常接続」の「(4)経路計算」から「(11)通信パケットの受信」までの処理と同様である。
【0151】
(6)経路計算
コントローラ(OFC)10は、スイッチ(OFS)20−1からの要求に応じて、経路計算を行い、計算の結果として得られた通信経路を基にフローエントリ200を作成する。ここでは、通信経路上で最も送信元のホスト30−1に近いスイッチ(OFS)は、要求元のスイッチ(OFS)20−1である。
【0152】
(7)先頭スイッチ以外の設定
コントローラ(OFC)10は、スイッチ(OFS)20−2に設定されるフローエントリ200の通信経路先頭識別子204に、先頭スイッチ(OFS)ではない旨を示す値を指定し、スイッチ(OFS)20−2にフローエントリ200を設定する。
【0153】
(8)先頭スイッチの設定
コントローラ(OFC)10は、スイッチ(OFS)20−1に設定されるフローエントリ200の通信経路先頭識別子204に、先頭スイッチ(OFS)である旨を示す値を指定し、スイッチ(OFS)20−1にフローエントリ200を設定する。
【0154】
(9)送信先との代理TCP接続の試行
スイッチ(OFS)20−1は、設定されたフローエントリ200の通信経路先頭識別子204を解析し、フローエントリ200の通信経路先頭識別子204の値が、先頭スイッチ(OFS)である旨を示す値であるため、ホスト30−2との代理TCP接続を行う。
【0155】
(10)変換用フローエントリの設定
スイッチ(OFS)20−1は、スイッチ(OFS)20−1とホスト30−2との間の通信経路が確立した場合、ホスト30−1とホスト30−2との間の通信パケットのフィールド値を変更(変換)するためのフローエントリ200の設定を行う。
【0156】
(11)通信パケットの受信
スイッチ(OFS)20−1は、ホスト30−1から通信パケットを受信する。
【0157】
(12)通信パケットのフィールド値の変換
スイッチ(OFS)20−1は、ホスト30−1とホスト30−2との間の通信パケットの受信時に、自身のフローエントリ200のアクション202に従って、通信パケットのフィールド値を変更(変換)する。
【0158】
(13)通信パケットの受信
スイッチ(OFS)20−1は、ホスト30−2に通信パケットを転送する。
【0159】
<第4実施形態>
以下に、本発明の第4実施形態について説明する。
【0160】
本発明において、先頭スイッチ(OFS)が、パケットの送信元ホストとの代理TCP接続に失敗した場合に、送信元ホストからのパケットの受信回数をカウントしておくようにする。受信回数が予め設定した閾値に達すると、送信元ホストからのパケットが「SYN Flood」攻撃としてのSYNパケットである可能性が高いと判断し、パケットの送信元ホストとの代理TCP接続を一定時間拒否するようにする。
【0161】
代理TCP接続を一定時間拒否することで、先頭スイッチ(OFS)が、パケットの送信元ホストとの代理TCP接続に失敗した場合、再度SYNパケットを受信した際に、無条件に代理TCP接続を試みてしまうことを防ぐことができる。
【0162】
また、パケットの受信回数を判断材料とすることで、「SYN Flood」攻撃ではないが、何らかの事情で、先頭スイッチ(OFS)が、パケットの送信元ホストとの代理TCP接続に失敗した場合に、直ちに「SYN Flood」攻撃と判断してしまうことを防ぐことができる。
【0163】
例えば、
図4に示すスイッチ(OFS)20のパケット受信部23が、ホスト30からのパケットの受信回数をカウントし、受信回数が予め設定した閾値に達すると、ホスト30からのパケットが「SYN Flood」攻撃としてのSYNパケットである可能性が高いと判断する。
【0164】
この場合、
図4に示すスイッチ(OFS)20のパケット受信部23が、一定時間、ホスト30からのパケットの受信を拒否するようにする。或いは、
図4に示すスイッチ(OFS)20のパケット送信部24が、一定時間、ホスト30との代理TCP接続の試行(ACKパケットの送信)を拒否するようにする。或いは、
図4に示すスイッチ(OFS)20のパケット廃棄部25が、一定時間、ホスト30からのパケットを廃棄するようにする。
【0165】
<各実施形態の関係>
なお、上記の各実施形態は、組み合わせて実施することも可能である。
【0166】
<ハードウェアの例示>
以下に、本発明に係るネットワークシステムを実現するための具体的なハードウェアの例について説明する。
【0167】
コントローラ(OFC)及びホストの例として、PC(パソコン)、アプライアンス(appliance)、シンクライアントサーバ、ワークステーション、メインフレーム、スーパーコンピュータ等の計算機を想定している。また、ホストの他の例として、IP電話機、携帯電話機、スマートフォン、スマートブック、カーナビ(カーナビゲーションシステム)、携帯型ゲーム機、家庭用ゲーム機、携帯型音楽プレーヤー、ハンディターミナル、ガジェット(電子機器)、双方向テレビ、デジタルチューナー、デジタルレコーダー、情報家電(information home appliance)、OA(Office Automation)機器、店頭端末・高機能コピー機、デジタルサイネージ(Digital Signage:電子看板)等も考えられる。なお、コントローラ(OFC)及びホストは、端末やサーバに限らず、中継機器や周辺機器でも良い。また、コントローラ(OFC)及びホストは、計算機等に搭載される拡張ボードや、物理マシン上に構築された仮想マシン(VM:Virtual Machine)でも良い。
【0168】
スイッチ(OFS)の例として、ネットワークスイッチ(network switch)、ルータ(router)、プロキシ(proxy)、ゲートウェイ(gateway)、ファイアウォール(firewall)、ロードバランサ(load balancer:負荷分散装置)、帯域制御装置(packet shaper)、セキュリティ監視制御装置(SCADA:Supervisory Control And Data Acquisition)、ゲートキーパー(gatekeeper)、基地局(base station)、アクセスポイント(AP:Access Point)、通信衛星(CS:Communication Satellite)、或いは、複数の通信ポートを有する計算機等が考えられる。また、物理マシン上に構築された仮想マシン(VM)により実現される仮想スイッチでも良い。
【0169】
コントローラ(OFC)、スイッチ(OFS)、及びホストは、車両や船舶、航空機等の移動体に搭載されていても良い。
【0170】
図示しないが、コントローラ(OFC)、スイッチ(OFS)、及びホストの各々は、プログラムに基づいて駆動し所定の処理を実行するプロセッサと、当該プログラムや各種データを記憶するメモリと、ネットワークとの通信に用いられるインターフェースによって実現される。
【0171】
上記のプロセッサの例として、CPU(Central Processing Unit)、ネットワークプロセッサ(NP:Network Processor)、マイクロプロセッサ(microprocessor)、マイクロコントローラ(microcontroller)、或いは、専用の機能を有する半導体集積回路(LSI:Large Scale Integration)等が考えられる。
【0172】
上記のメモリの例として、RAM(Random Access Memory)、ROM(Read Only Memory)、EEPROM(Electrically Erasable and Programmable Read Only Memory)やフラッシュメモリ等の半導体記憶装置、HDD(Hard Disk Drive)やSSD(Solid State Drive)等の補助記憶装置、又は、DVD(Digital Versatile Disk)等のリムーバブルディスクや、SDメモリカード(Secure Digital memory card)等の記憶媒体(メディア)等が考えられる。また、バッファ(buffer)やレジスタ(register)等でも良い。或いは、DAS(Direct Attached Storage)、FC−SAN(Fibre Channel − Storage Area Network)、NAS(Network Attached Storage)、IP−SAN(IP − Storage Area Network)等を用いたストレージ装置でも良い。
【0173】
なお、上記のプロセッサ及び上記のメモリは、一体化していても良い。例えば、近年では、マイコン等の1チップ化が進んでいる。従って、電子機器等に搭載される1チップマイコンが、上記のプロセッサ及び上記のメモリを備えている事例も考えられる。
【0174】
上記のインターフェースの例として、ネットワーク通信に対応した基板(マザーボード、I/Oボード)やチップ等の半導体集積回路、NIC(Network Interface Card)等のネットワークアダプタや同様の拡張カード、アンテナ等の通信装置、接続口(コネクタ)等の通信ポート等が考えられる。
【0175】
また、ネットワークの例として、インターネット、LAN(Local Area Network)、無線LAN(Wireless LAN)、WAN(Wide Area Network)、バックボーン(Backbone)、ケーブルテレビ(CATV)回線、固定電話網、携帯電話網、WiMAX(IEEE 802.16a)、3G(3rd Generation)、専用線(lease line)、IrDA(Infrared Data Association)、Bluetooth(登録商標)、シリアル通信回線、データバス等が考えられる。
【0176】
なお、コントローラ(OFC)、スイッチ(OFS)、及びホストの各々の内部の構成要素は、モジュール(module)、コンポーネント(component)、或いは専用デバイス、又はこれらの起動(呼出)プログラムでも良い。
【0177】
但し、実際には、これらの例に限定されない。
【0178】
<本発明の特徴>
以上のように、本発明では、オープンフローネットワーク等のCD分離型ネットワークにおいて、通信経路先頭識別子を導入し、スイッチによる代理TCP接続時の通信遅延を短縮する。
【0179】
Dos攻撃の一般的な攻撃の1つである「SYN Flood」攻撃の防御手法の1つに、パケットの内容によって、受信したパケットの転送先を決定するルータ(Router)やロードバランサ(Load Balancer)等のネットワーク機器が攻撃対象のサーバの代理でTCP接続(代理TCP接続)を行うことで、攻撃を検知し防御する手法がある。
【0180】
しかし、この防御手法を、オープンフローネットワークにおいて、パケットの転送を行うスイッチ(OFS)にそのまま適用すると、パケットの通信経路上に複数のスイッチ(OFS)がある場合、スイッチ(OFS)毎に個別に代理TCP接続が必要となり、各々の接続が確立するまでの待機時間により、通信遅延が発生する可能性があった。
【0181】
本発明では、スイッチ(OFS)が保持する経路情報にパケットの送信元ホストからサーバへの通信経路上の先頭のスイッチ(OFS)であることを示す情報を付加することで、通信経路上にスイッチ(OFS)の台数に比例して必要であった代理TCP接続の回数を通信経路上のスイッチ(OFS)の台数に関係なく2回に限定し、「SYN Flood」攻撃に対する防御と通信遅延時間削減の両立を可能とする。
【0182】
本発明は、オープンフローに代表されるような、経路制御の機能を外部の制御装置(コントローラ)に分離したネットワーク機器(スイッチ)で構成されるネットワークシステムに適用することができる。
【0183】
経路制御の機能を外部の制御装置(コントローラ)に分離したネットワーク機器(スイッチ)で構成されるネットワークシステムに本発明を適用した場合、パケット転送を行うネットワーク機器(スイッチ)のうち、パケットの通信経路における先頭のネットワーク機器(スイッチ)が、パケットの通信経路上のネットワーク機器(スイッチ)の中で、パケットの送信先に最も近いネットワーク機器(スイッチ)である旨を示す情報(通信経路先頭識別子)を保持する。
【0184】
また、経路制御の機能を外部の制御装置(コントローラ)に分離したネットワーク機器(スイッチ)で構成されるネットワークシステムに本発明を適用した場合、経路制御を行う制御装置(コントローラ)が、パケット転送を行うネットワーク機器(スイッチ)のうち、パケットの通信経路における先頭のネットワーク機器(スイッチ)に対して、上記情報(通信経路先頭識別子)を設定する。
【0185】
また、経路制御の機能を外部の制御装置(コントローラ)に分離したネットワーク機器(スイッチ)で構成されるネットワークシステムに本発明を適用した場合、上記情報(通信経路先頭識別子)によって、パケットの送信先に最も近いネットワーク機器(スイッチ)のみが送信元・送信先と代理TCP接続を行うため、パケット転送を行うネットワーク機器(スイッチ)間でTCP接続を行う必要がない。
【0186】
<付記>
上記の実施形態の一部又は全部は、以下の付記のように記載することも可能である。但し、実際には、以下の記載例に限定されない。
【0187】
[付記1]
複数のスイッチと、
該複数のスイッチの各々に対して、パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリを設定するコントローラと
を含み、
該各スイッチは、
送信元ホストからSYNパケットを受信する機能部と、
該送信元ホストとの代理TCP接続に成功した場合、該コントローラに対して、経路計算及びフローエントリの設定を要求する機能部と、
該経路計算の結果として得られた通信経路上の先頭スイッチである場合、送信先ホストとの代理TCP接続を行う機能部と、
該通信経路上の先頭スイッチではない場合、先頭スイッチと該送信先ホストとの代理TCP接続のためのSYNパケットを転送する機能部と
を備える
ネットワークシステム。
【0188】
[付記2]
付記2に記載のネットワークシステムであって、
該各スイッチは、
該通信経路上の先頭スイッチである場合、該送信先ホストとの代理TCP接続が確立した時点で、該送信元ホストと該送信先ホストとの間の通信パケットのTCPヘッダの確認応答番号とシーケンス番号とを変更するための変換用フローエントリを設定し、該変換用フローエントリを該コントローラに通知する機能部と、
該送信元ホストと該送信先ホストとの間の通信パケットの受信時に、該変換用フローエントリに従って、該通信パケットのTCPヘッダの確認応答番号とシーケンス番号とを変更し、該送信元ホストと該送信先ホストとが直接代理TCP接続しているように擬装する機能部と
を更に備える
ネットワークシステム。
【0189】
<備考>
以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。