サービス拒否(DoS)攻撃とは、悪意のあるユーザーがリクエストをサーバーに連続して送信することで、正当なユーザーによるサービスへのアクセスを妨害することを指します。
DoS攻撃を回避するために、リクエストの頻度または同時接続数が指定された制限を超えた場合、リクエストを拒否するようにOracle Traffic Director仮想サーバーを構成できます。より細かくリクエストを制御するには、リクエスト制限を定義し、各制限を、指定したURLパターンや問合せ文字列パターンに一致するリクエスト、および指定した値に一致するリクエスト・ヘッダーなどに適用できます。
この項には次の項目が含まれています。
仮想サーバーに複数のリクエスト制限を指定できます。各リクエスト制限について、いくつかのパラメータを構成できます。
各リクエスト制限は、次のような式を使用して指定した特定の条件を満たすリクエストに適用するように設定できます。
$path = "*.jsp" $url = "/images/*" $ip =~ "^130\.35\.46\..*"
変数または変数の組合せを使用して、制限の条件を指定できます。リクエスト制限の条件式の作成の詳細は、『Oracle Traffic Director構成ファイル・リファレンス』の変数、式および文字列の補間の使用に関する項を参照してください。
各リクエスト制限に対して、同時リクエスト数(max-connections
)および1秒当たりの平均リクエスト数(max-rps
)を指定できます。
たとえば、制限を指定すると(max-rps
=20など)、Oracle Traffic Directorは、指定された計算間隔(デフォルト: 30秒)で受信したリクエスト数に基づき、その間隔でリクエスト・レートを繰返し計算することでリクエスト・レートを継続的に追跡します。指定したリクエスト制限に達した場合、Oracle Traffic Directorによって後続のリクエストはすべて拒否されます。
リクエスト制限を適用する場合、Oracle Traffic Directorが監視するオプション属性も指定できます。Oracle Traffic Directorは、個別のカウンタを使用して、各監視対象属性のリクエスト統計を追跡します。
たとえば、Oracle Traffic DirectorでクライアントIPごとにリクエストを個別に追跡するには、変数$ip
を監視属性として指定できます。リクエスト・レートがクライアントで指定された制限を超えると、そのクライアントからの後続のリクエストは拒否されますが、その他のクライアントからのリクエストは引き続き処理されます。
また、監視する属性を指定する際は、変数を組み合せることもできます。たとえば、同じURIをリクエストする頻度が高すぎるクライアントからのリクエストを制限するには、$ip:$uri
を監視対象の属性として指定できます。1つのURIに対するクライアントからのリクエスト・レートが制限を超えた場合、その後のそのクライアントからのそのURIへのリクエストは拒否されますが、そのクライアントから別のURIへのリクエスト、およびその他のクライアントから任意のURIへのリクエストは引き続き処理されます。
Oracle Traffic Directorによって拒否されたリクエストについては、指定したHTTPレスポンス・コードが返されます。デフォルトのステータス・コードは、503 (service unavailable)
です。
指定された制限(max-connections
またはmax-rps
)に到達した後、Oracle Traffic Directorでは、指定された続行条件が満たされるまで、後続のリクエストはすべて拒否され続けます。次の続行条件のいずれかを指定できます。
しきい値(デフォルト): 指定された制限をリクエスト・レートが下回ったら、サービスは再開されます。
サイレンス: 受信するリクエスト数が間隔全体でゼロになると、サービスが再開されます。
管理コンソールまたはCLIのいずれかを使用して、仮想サーバーのリクエスト制限を構成できます。
注意:
|
管理コンソールを使用したリクエスト制限の構成
管理コンソールを使用してリクエスト制限を構成するには、次の操作を行います。
2.3.2項「管理コンソールへのアクセス」の説明に従って、管理コンソールにログインします。
ページの左上隅にある「構成」ボタンをクリックします。
使用可能な構成のリストが表示されます。
リクエスト制限を構成する構成を選択します。
ナビゲーション・ペインで、「仮想サーバー」を展開し、リクエスト制限を構成する仮想サーバーの名前を展開して、「リクエスト制限」を選択します。
「リクエスト制限」ページが表示されます。仮想サーバーに現在定義されているリクエスト制限がリストされます。
リクエスト制限の作成
「新規リクエスト制限」をクリックします。
「新規リクエスト制限」ダイアログ・ボックスが表示されます。
「名前」フィールドで、新しいリクエスト制限の名前を入力します。
「接続」フィールドに、仮想サーバーへの最大同時接続数を指定します。
「リクエスト数/秒」フィールドに、仮想サーバーが1秒当たりで受入れ可能な最大リクエスト数を指定します。
注意: 少なくともいずれかの制限(最大接続数または1秒当たりの最大リクエスト数)を指定する必要があります。 |
「監視属性」フィールドに、仮想サーバーがリクエスト制限を適用するために監視する必要があるリクエスト・ヘッダーの属性を指定します。このパラメータを指定しない場合、リクエスト制限はすべてのリクエストに適用されます。
次へをクリックします。
このリクエスト制限が仮想サーバーに対する最初のリクエスト制限の場合、「新規キャッシュ・ルール」ダイアログ・ボックスに、制限をすべてのリクエストに適用するかどうかを選択するオプションが表示されます。「すべてのリクエスト」を選択します。
条件を満たすリクエストにのみ、制限を適用する場合は、「条件を新規に作成します」を選択して新しい条件を作成します。「新規式」ペインで「変数/関数」を選択し、各ドロップダウン・リストから演算子を選択し、「値」フィールドに値を入力します。
複数の式を構成する場合は、ドロップダウン・リストでand
/or
演算子を選択します。同様に、指定した式が偽に評価されるときにルートを適用する場合は、Not
演算子を使用します。
条件を手動入力するには、「取消」をクリックし、「手動編集」をクリックします。「条件」フィールドで、リクエスト制限が適用される条件を指定します。条件式の作成の詳細は、「条件」フィールドの近くにあるヘルプ・ボタンをクリックするか、『Oracle Traffic Director構成ファイル・リファレンス』の変数、式および文字列の補間の使用に関する項を参照してください。
次へをクリックし、「リクエスト制限の作成」をクリックします。
作成したリクエスト制限が「リクエスト制限」ページに表示されます。
さらに、「デプロイメント保留中」メッセージが、メイン・ペインの上部に表示されます。4.3項「構成のデプロイ」の説明に従い、「変更のデプロイ」をクリックして更新された構成を即座にデプロイすることも、さらに変更を行いその後でデプロイすることもできます。
リクエスト制限の編集
リクエスト制限の設定を変更するには、次の操作を行います。
リクエスト制限の「名前」をクリックします。
「編集中のリクエスト制限」ページが表示されます。
注意: 条件ビルダーにアクセスして条件を編集するには、「条件を満たすリクエスト」を選択し、「編集」をクリックします。条件ビルダーでは古い式を削除したり、新しい式を作成したりできます。 |
変更するパラメータを指定します。
リクエスト制限を編集する際、リクエスト制限の作成時に指定したパラメータの変更に加えて、requests-per-second
計算間隔、および指定した制限に到達したときに拒否されるリクエストについて仮想サーバーが返すHTTPステータス・コードを設定および変更できます。「編集」をクリックすると設定済の条件を編集できるため、条件を手動でまたは条件ビルダーを使用して編集できます。古い式を削除したり、新しい式を作成できます。
画面上のヘルプおよびプロンプトがすべてのパラメータに提供されています。
フィールドの値を変更する、または変更したテキスト・フィールドからタブアウトすると、ページの右上隅にある「保存」ボタンが有効になります。
「リセット」ボタンをクリックすることで、いつでも変更を破棄できます。
必要な変更を行った後、「保存」をクリックします。
更新された構成が保存されたことを確認するメッセージが、「コンソール・メッセージ」ペインに表示されます。
さらに、「デプロイメント保留中」メッセージが、メイン・ペインの上部に表示されます。4.3項「構成のデプロイ」の説明に従い、「変更のデプロイ」をクリックして更新された構成を即座にデプロイすることも、さらに変更を行いその後でデプロイすることもできます。
リクエスト制限の削除
リクエスト制限を削除するには、「削除」ボタンをクリックします。確認プロンプトで、「OK」です。
CLIを使用したリクエスト制限の構成
リクエスト制限を作成するには、create-request-limit
コマンドを実行します。
例:
次のコマンドでは、1つのクライアントからの同時リクエスト数を5に制限する、limit_ip
という名前のリクエスト制限が、構成soa
の仮想サーバーsoa.example.com
に作成されます。
tadm> create-request-limit --config=soa --vs=soa.example.com --max-connections=5 limit_ip
OTD-70201 Command 'create-request-limit' ran successfully.
次のコマンドでは、サブネット111.23.30.*
のクライアントIPアドレスからの1秒当たりのリクエスト数を20に制限する、limit_subnet
という名前のリクエスト制限が、構成soa
の仮想サーバーsoa.example.com
に作成されます。
tadm> create-request-limit --config=soa --vs=soa.example.com --condition="$ip='111.12.30.*'" --max-rps=20 limit_subnet
OTD-70201 Command 'create-request-limit' ran successfully.
--condition
オプションの値は、正規表現にする必要があることに注意してください。条件式の作成の詳細は、『Oracle Traffic Director構成ファイル・リファレンス』の変数、式および文字列の補間の使用に関する項を参照してください。
仮想サーバーに定義されたリクエスト制限のリストを表示するには、次の例に示すようにlist-request-limits
コマンドを実行します。
tadm> list-request-limits --config=soa --vs=soa.example.com
request-limit condition
-------------------------
limit_ip -
limit_subnet "$ = '111.23.30.*'"
リクエスト制限のプロパティを表示するには、次の例に従い、get-request-limit-prop
コマンドを実行します。
tadm> get-request-limit-prop --config=soa --vs=soa.example.com --request-limit=limit_ip
continue-condition=silence
condition="$ip = '111.23.30.*'"
error-code=503
max-connections=50
rps-compute-interval=30
max-rps=20
request-limit=limit_ip
リクエスト制限のプロパティを変更するには、set-request-limit-prop
コマンドを実行します。
たとえば、次のコマンドでは、構成soa
の仮想サーバーsoa.example.com
内のリクエスト制限limit_ip
における1秒当たりのリクエスト数の計算間隔が60秒に変更されます。
tadm> set-request-limit-prop --config=soa --vs=soa.example.com --rule=loan-rule rps-compute-interval=60
リクエスト制限を削除するには、次の例に示すように、delete-request-limit
コマンドを実行します。
tadm> delete-request-limit --config=soa --vs=soa.example.com limit_ip
OTD-70201 Command 'delete-request-limit' ran successfully.
更新された構成を有効にするには、deploy-config
コマンドを使用して、構成をOracle Traffic Directorインスタンスにデプロイする必要があります。
この項で説明されたCLIコマンドの詳細は、『Oracle Traffic Directorコマンドライン・リファレンス』を参照するか、--help
オプションを付けてコマンドを実行してください。