DDoS保護を有効にする方法は?


85

DDoS(分散型サービス拒否攻撃)は通常、サーバーレベルでブロックされますか?

PHPレベルでそれをブロックする方法、または少なくともそれを減らす方法はありますか?

そうでない場合、DDoS攻撃を阻止するための最速かつ最も一般的な方法は何ですか?


これ以上良いものがないことから、ここに潜在的に役立つかもしれないApacheモジュールのリストがあります。しかし、それはあまり豊かではないようで、4つの2つのプロジェクト(「dos」で検索)はどこも指していないように見えます。
Audrius Meskauskas 2013年

このようなもの?mod-antiloris.sourceforge.net
K-Gun

DDOSは、攻撃がスローしているすべての要求をシステムが処理できなくなったときに成功します。「これはDDOS攻撃ですか?」の各リクエストをチェックするコードをアプリケーションに追加すると、リクエストごとに少し多くのリソースが必要になるため、そのコードは実際には害を及ぼします。これは、匿名のリクエストがとにかく許可されている非常に制限された環境でのみ機能します。
Hugo Delsing 2013

回答:


188

DDOSは、次のようなデータセンターの主要システムを圧倒する攻撃のファミリーです。

  • ホスティングセンターのインターネットへのネットワーク接続
  • ホスティングセンターの内部ネットワークとルーター
  • ファイアウォールとロードバランサー
  • Webサーバー、アプリケーションサーバー、およびデータベース。

DDOS防御の構築を開始する前に、最悪の場合のバリューアットリスクを検討してください。小規模なコミュニティ向けの重要ではない、無料で使用できるサービスの場合、リスクのある合計値はピーナッツである可能性があります。確立された数十億ドル規模のビジネスのための有料の、公に面した、ミッションクリティカルなシステムの場合、その価値は会社の価値かもしれません。この後者の場合、StackExchangeを使用するべきではありません:)とにかく、DDOSに対して防御するには、多層防御アプローチが必要です。

  1. ホスティングセンターと協力して、インターネットへのネットワーク接続でのIPおよびポートフィルタリングや、ホスティングセンターが提供するファイアウォールサービスなど、ホスティングセンターが提供するサービスを理解します。これは非常に重要です。ホスティング会社が1人の顧客に対するDDOSによって引き起こされるデータセンター全体の混乱に対処するため、多くのサイトがホスティング会社によってインターネットから引き出されます。また、DDOS攻撃中は、ホスティングセンターのスタッフと緊密に連携するため、緊急電話番号を把握し、良好な関係を保つ必要があります:)国際地域全体をブロックし、特定のサービスやネットワークを完全にブロックできる必要があります。プロトコルやその他の広範囲にわたる防御策、またはホワイトリストに登録されたIPのみを許可する(ビジネスモデルによって異なります)
  2. ホスティングセンターにいる間は、コンテンツ配信ネットワークを使用して、エンドユーザーの近くに(主に静的な)サービスを配布し、DDOSアーキテクトから実サーバーを隠します。完全なCDNは大きすぎて、DDOSがすべての国のすべてのノードを取り出すことはできません。DDOSが1つの国に焦点を合わせている場合でも、少なくとも他のユーザーは問題ありません。
  3. すべてのシステムとソフトウェアパッケージを最新のセキュリティパッチで更新してください-そして私はそれらすべてを意味します:

    • マネージドスイッチ-うん、これらは時々更新が必要です
    • ルーター
    • ファイアウォール
    • ロードバランサー
    • オペレーティングシステム
    • Webサーバー
    • 言語とそのライブラリ
  4. 適切なファイアウォールまたはセキュリティアプライアンスがセットアップされ、資格のあるセキュリティ専門家によって定期的にレビューされていることを確認してください。ファイアウォールの強力なルールは、多くの単純な攻撃に対する優れた防御策です。また、オープンサービスごとに利用可能な帯域幅を管理できると便利です。

  5. 適切なネットワーク監視ツールを用意します。これは、次のことを理解するのに役立ちます。

    • 単に重い負荷がかかっているのではなく、攻撃を受けていること
    • 攻撃の発信元(通常は取引を行わない国が含まれる場合があります)および
    • 攻撃が実際に何であるか(ポート、サービス、プロトコル、IP、およびパケットの内容)
  6. 攻撃は単に正当なWebサイトサービスの多用である可能性があります(たとえば、クエリを実行する「正当な」URIをヒットする、データを挿入/更新/削除する)-数千から数百万の異なるIPアドレスからの数千または数百万のリクエストがサイトを膝。あるいは、一部のサービスは実行に非常に費用がかかるため、わずかな要求だけがDOSを引き起こす可能性があります-本当に高価なレポートだと思います。したがって、何が起こっているのかをアプリケーションレベルで適切に監視する必要があります

    • どのサービスが呼び出され、どの引数/データが送信されるか(つまり、アプリケーションにログインする)
    • どのユーザーが呼び出しを行っており、どのIPから(つまり、アプリケーションにログインしている)
    • DBが実行しているクエリおよび挿入/更新/削除
    • システム内のすべてのコンピューター(およびVM)の負荷平均、CPU使用率、ディスクI / O、ネットワークトラフィック
    • このすべての情報を簡単に取得できること、およびさまざまなコンピューターやサービスからのログを相互に関連付けることができることを確認します(つまり、すべてのコンピューターがntpを使用して時刻同期されていることを確認します)。
  7. アプリケーションにおける賢明な制約と制限。たとえば、次のようになります。

    • ロードバランサーのQoS機能を使用して、すべての匿名セッションをクラスター内の個別のアプリケーションサーバーに送信し、ログオンしたユーザーは別のセットを使用します。これにより、アプリケーションレベルの匿名DDOSが貴重な顧客を奪うのを防ぎます
    • 強力なCAPCHAを使用して匿名サービスを保護する
    • セッションタイムアウト
    • レポートなどの特定のタイプのリクエストには、セッション制限またはレート制限があります。必要に応じて匿名アクセスをオフにできることを確認してください
    • ユーザーが同時セッションの数に制限があることを確認します(ハッキングされたアカウントが100万回ログオンするのを防ぐため)
    • さまざまなサービス(トランザクションの使用とレポートの使用など)にさまざまなデータベースアプリケーションユーザーを配置し、データベースリソース管理を使用して、あるタイプのWeb要求が他のすべての要求を圧倒しないようにします。
    • 可能であれば、これらの制約を動的にするか、少なくとも構成可能にします。このようにして、攻撃を受けている間、ユーザーごとに1つのセッションのみを使用し、匿名アクセスを行わないなど、攻撃的な一時制限を設定できます(攻撃の「抑制」)。これは確かに顧客にとっては素晴らしいことではありませんが、まったくサービスを提供しないよりははるかに優れています。
  8. 最後に、大事なことを言い忘れましたが、DOS応答計画ドキュメントを作成し、これをすべての関係者(ビジネス、管理、SW開発チーム、ITチーム、セキュリティの専門家)に内部でレビューしてもらいます。ドキュメントを作成するプロセスにより、あなたとあなたのチームは問題について考え、最悪の事態が休日の午前3時に発生した場合に備えて準備するのに役立ちます。ドキュメントは(とりわけ)カバーする必要があります:

    • 何が危険にさらされているか、そしてビジネスへのコスト
    • 資産を保護するために講じられた措置
    • 攻撃の検出方法
    • 計画された対応とエスカレーション手順
    • システムとこのドキュメントを最新の状態に保つためのプロセス

それで、前文はさておき、ここにいくつかの具体的な答えがあります:

DDOSは通常、サーバーレベルでブロックされますよね?

実際にはそうではありません-最悪のDDOS攻撃のほとんどは低レベル(IPパケットレベル)であり、DDOS攻撃を処理するために開発されたルーティングルール、ファイアウォール、およびセキュリティデバイスによって処理されます。

PHPレベルでそれをブロックする方法、または少なくともそれを減らす方法はありますか?

一部のDDOS攻撃は、アプリケーション自体を狙っており、有効なURIとHTTPリクエストを送信します。リクエストの割合が上がると、サーバーが苦労し始め、SLAが停止します。この場合、PHPレベルでできることがいくつかあります。

  • アプリケーションレベルの監視:各サービス/ページが何が起こっているかを確認できる方法でリクエストをログに記録するようにします(これにより、攻撃を軽減するためのアクションを実行できます)。いくつかのアイデア:

    • ログツール(またはExcelなど)に簡単にロードできるログ形式を用意し、コマンドラインツール(grep、sed、awk)で解析します。DDOSは数百万行のログを生成することを忘れないでください。何が起こっているのかを理解するために、(特にURI、時間、IP、ユーザーに関して)ログをスライスアンドダイスする必要があり、次のようなデータを生成する必要があります。

      • アクセスされているURI
      • どのURIが高率で失敗しているのか(攻撃者が攻撃している特定のURIの可能性のある指標)
      • どのユーザーがサービスにアクセスしているか
      • 各ユーザーがサービスにアクセスしているIPの数
      • 匿名ユーザーがアクセスするURIは何ですか
      • 特定のサービスに使用されている引数
      • 特定のユーザーのアクションを監査する
    • 各リクエストのIPアドレスをログに記録します。これを逆引きしないでください-皮肉なことに、これを行うコストは攻撃者にとってDDOSを容易にします

    • URIとHTTPメソッド全体をログに記録します(例:「GEThttp ://example.com/path/to/service?arg1 = ddos」)。
    • 存在する場合はユーザーIDをログに記録します
    • 重要なHTTP引数をログに記録する
  • 賢明なレート制限:特定のIPまたはユーザーが特定の期間に実行できるリクエストの数に制限を実装できます。正当な顧客が1秒あたり10を超えるリクエストを行うことはできますか?匿名ユーザーは高価なレポートにアクセスできますか?

  • 匿名アクセス用のCAPTCHA:すべての匿名リクエストにCAPTCHAを実装して、ユーザーがDDOSボットではなく個人であることを確認します。

DDOS攻撃を阻止するための最速かつ最も一般的な方法は何ですか?

恐らく最速は恐喝に屈することですが、これは望ましくないかもしれません。

それ以外の場合、最初に行うことは、ホスティングおよび/またはCDNプロバイダーに連絡して、それらと連携することです(連絡がない場合は、何が起こっているのかをすでに尋ねています...)。DDOSが発生すると、ホスティングプロバイダーの他の顧客に付随的な影響を与える可能性があり、プロバイダーは、単にリソースを保護するためにサイトをシャットダウンするというかなりのプレッシャーにさらされる可能性があります。ログ(すべての情報)をプロバイダーと共有する準備をしてください。これらのログは、ネットワークモニターと組み合わされて、攻撃をブロック/軽減するのに十分な情報を提供する場合があります。

DDOSを期待している場合は、提供できる保護のレベルでホスティングプロバイダーを認定することをお勧めします。DDOSの経験と、それを軽減するためのツールが必要です。ツール、プロセス、およびエスカレーション手順を理解してください。また、ホスティングプロバイダから持ってサポートするかについて尋ね、その上流のプロバイダ。これらのサービスは、より多くの前払いまたは月額費用を意味する場合がありますが、これは保険契約として扱います。

攻撃を受けている間は、ログを取得してマイニングする必要があります。攻撃のパターンを試してみてください。匿名アクセスをオフにし、攻撃を受けているサービスを制限することを検討する必要があります(つまり、サービスのアプリケーションのレート制限を下げる)。

運が良ければ、固定された小さな顧客ベースがある場合は、有効な顧客のIPアドレスを特定できる可能性があります。この場合、しばらくの間、ホワイトリストアプローチに切り替える可能性があります。新しいIPからアクセスする必要がある場合に電話できるように、すべての顧客がこれが行われていることを知っていることを確認してください:)


Doug McCleanは、https//stackoverflow.com/a/1029613/1395668でいくつかの素晴らしいアドバイスをしています


20

質問のPHPの部分によると;

私はこれをPHPに依存していませんが、実装することはできますが、これらすべての可能性以上を考慮する必要があります。

  1. 攻撃者はリクエストごとにIPを変更できます
  2. 攻撃者は、ターゲットサイトがこれらのパラメータを気にしないURIにパラメータを渡す可能性があります
  3. 攻撃者は、有効期限が切れる前にセッションを再開できます...

単純な疑似;

<?php
// Assuming session is already started
$uri = md5($_SERVER['REQUEST_URI']);
$exp = 3; // 3 seconds
$hash = $uri .'|'. time();
if (!isset($_SESSION['ddos'])) {
    $_SESSION['ddos'] = $hash;
}

list($_uri, $_exp) = explode('|', $_SESSION['ddos']);
if ($_uri == $uri && time() - $_exp < $exp) {
    header('HTTP/1.1 503 Service Unavailable');
    // die('Easy!');
    die;
}

// Save last request
$_SESSION['ddos'] = $hash;
?>

8

phpレベルはリクエストチェーンでは遅すぎます。

Apacheサーバーをオープンソースアプライアンスの背後に配置することは、あなたにとって良いオプションかもしれません。

http://tengine.taobao.org/には、DDOS防止を目的としたいくつかのドキュメントとソースコードのモジュールがあります。これはnginxの拡張であるため、Apacheインスタンスのリバースプロキシとして簡単に設定できます。

衝突と戦う方法については、http//blog.zhuzhaoyuan.com/2012/01/a-mechanism-to-help-write-web-application-firewalls-for-nginx/を参照してください。DoS攻撃があります。

完全に忘れてしまいましたが、http://www.cloudflare.comは無料のWebアプリケーションファイアウォールのトップの1つであり、無料と有料のプランがあり、キャッシュ機能のためだけに多くのトラフィックの多いサイトで使用しているDDOSからお尻を節約します。すごい!


5

PHPレベルではこれを行うことはできません。DDOSは、Webサーバーに送信するリクエストが多すぎる一種の攻撃です。Webサーバーは、PHPスクリプトを呼び出す前に要求を拒否します。

Apacheを使用している場合、Apacheからのヒントを次に示します。http//httpd.apache.org/docs/trunk/misc/security_tips.html


5

DDoSは、非常に高価な専用のネットワークアプライアンスで処理するのが最適です。ホストは、パフォーマンスが比較的低く、状態が枯渇し、帯域幅が制限されるなどの理由で、一般にDDoS保護を行うのが苦手です。DDoS緩和ハードウェアにアクセスできない場合、iptables、apache mods、および同様のサービスを使用すると、状況によっては役立つ場合があります。またはDDoS緩和サービスですが、理想からはほど遠いため、攻撃のリスクがあります。


8
解決策が必要であり、理想的な解決策がない場合は、部分的な解決策が必要でした。「これはできない」というようなアドバイスは必要ありません。
Audrius Meskauskas 2013年

5

PHP側でこのようなものはどうですか?

//if user does not change IP, then ban the IP when more than 10 requests per second are detected in 1 second
$limitps = 10;
if (!isset($_SESSION['first_request'])){
    $_SESSION['requests'] = 0;
    $_SESSION['first_request'] = $_SERVER['REQUEST_TIME'];
}
$_SESSION['requests']++;
if ($_SESSION['requests']>=10 && strtotime($_SERVER['REQUEST_TIME'])-strtotime($_SESSION['first_request'])<=1){
    //write the IP to a banned_ips.log file and configure your server to retrieve the banned ips from there - now you will be handling this IP outside of PHP
    $_SESSION['banip']==1;
}elseif(strtotime($_SERVER['REQUEST_TIME'])-strtotime($_SESSION['first_request']) > 2){
    $_SESSION['requests'] = 0;
    $_SESSION['first_request'] = $_SERVER['REQUEST_TIME'];
}

if ($_SESSION['banip']==1) {
    header('HTTP/1.1 503 Service Unavailable');
    die;
}

1
このコードにはいくつかのエラーがあります。10はハードコーディングされており、サーバー変数とセッション変数にstrtotimeは必要ありません。また、$ _ SESSION ['ban_up'] == 1は= 1である必要があります。–
Jason Silver


2

PHPベースの保護を使用しないでください。それは恐ろしく、ほとんど影響を与えません。たとえば、limit_reqモジュール(http://nginx.org/en/docs/http/ngx_http_limit_req_module.html)を使用してNginxでリクエストをレート制限するようにWebサーバーを構成します。

ただし、CloudFlareを使用してレイヤー4と戦うことをお勧めします。ただし、支払いを希望しない限り、レイヤー7ベースの攻撃はお勧めしません。


はい、ここでは、同様に私のための私の経験を素晴らしい仕事softwareengineeringsolutions.co.uk/...
エルビスCiottiを

2

DDOSは通常、サーバーレベルでブロックされます。サーバーレベルでDDOS保護を有効にしてください。DDOS保護については、以下の注意事項を確認してください。

DDOS問題の防止に役立つApacheHTTPサーバー構成設定:

RequestReadTimeoutディレクティブを使用すると、クライアントが要求を送信するのにかかる時間を制限できます。

ヘッダーを含むリクエストの受信には10秒、リクエストの本文の受信には30秒かかります。

RequestReadTimeout header=10 body=30

リクエストの本文を受信するには、少なくとも10秒かかります。クライアントがデータを送信する場合は、タイムアウトの上限なしで、受信した1000バイトごとに1秒ずつタイムアウトを増やします(LimitRequestBodyによって間接的に指定された制限を除く)。

RequestReadTimeout body=10,MinRate=1000

RequestReadTimeout header=10-30,MinRate=500
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500

KeepAliveTimeoutディレクティブは、DoS攻撃の対象となるサイトでも低くなる可能性があります。一部のサイトでは、KeepAliveを介してキープアライブを完全にオフにすることもありますが、これにはもちろんパフォーマンスに他の欠点があります。他のモジュールによって提供されるさまざまなタイムアウト関連のディレクティブの値を確認する必要があります。

ディレクティブLimitRequestBody、LimitRequestFields、LimitRequestFieldSize、LimitRequestLine、およびLimitXMLRequestBodyは、クライアント入力によってトリガーされるリソース消費を制限するように注意深く構成する必要があります。MaxRequestWorkersディレクティブを調整して、サーバーがリソースを使い果たすことなく最大数の同時接続を処理できるようにします。


2

アンチDDOSステップ:

  • 最初に重要なことは、最初にddos攻撃を特定することです。ddos攻撃をより早期に特定することは、サーバーにとってより良いことを意味します。
  • サーバーで利用できる帯域幅を改善します。サーバーに必要な十分な帯域幅を常に維持してください。これはDDOS攻撃を防ぐことはできませんが、時間がかかります。それによってあなたは行動するためにいくらかの余分な時間を得るでしょう。
  • 独自のWebサーバーを所有している場合は、ルーターのレート制限によってネットワークパラメーターで防御し、さまざまな攻撃元にパケットをドロップするフィルターを追加し、半分開いた接続をより積極的にタイムアウトさせることができます。また、SYN、ICMP、UDPのフラッドドロップのしきい値を低く設定します。
  • これらのことについてあまりよくわからない場合は、すぐにホスティングプロバイダーに連絡してください。彼らはDDOS攻撃を防ぐために最善を尽くすことができます。
  • Cloudflareや他の多くの企業が提供する特別なDDOS緩和サービスもあります。これにより、DDOS攻撃を防ぐことができます。また、多くの企業が安価なddos保護dos保護を提供しています。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.