89

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

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

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

4

10 に答える 10

196

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

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

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

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

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

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

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

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

    • ロード バランサーの QoS 機能を使用して、すべての匿名セッションをクラスター内の個別のアプリケーション サーバーに送信し、ログオン ユーザーは別のセットを使用します。これにより、アプリケーション レベルの匿名 DDOS が貴重な顧客を奪うのを防ぎます。
    • 強力な CAPCHA を使用して匿名サービスを保護する
    • セッションのタイムアウト
    • レポートなどの特定のタイプのリクエストにセッション制限またはレート制限を設定します。必要に応じて匿名アクセスをオフにできることを確認してください
    • ユーザーの同時セッション数に制限があることを確認します (ハッキングされたアカウントが何百万回もログオンするのを防ぐため)
    • サービスごとに異なるデータベース アプリケーション ユーザーを使用し (例: トランザクションの使用とレポートの使用)、データベース リソース管理を使用して、1 つのタイプの Web 要求が他のすべての要求を圧倒するのを防ぎます。
    • 可能であれば、これらの制約を動的にするか、少なくとも構成可能にします。このようにして、攻撃を受けている間、ユーザーごとにセッションを 1 つだけにし、匿名アクセスを禁止するなど、積極的な一時的な制限を設定する (攻撃を「抑制する」) ことができます。これは確かに顧客にとって良いことではありませんが、まったくサービスを提供しないよりはずっとましです。
  8. 最後になりましたが、重要なことですが、DOS 対応計画文書を作成し、これをすべての関係者 (ビジネス、管理、ソフトウェア開発チーム、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 アドレスをログに記録します。DNS を逆にしないでください - 皮肉なことに、これを行うコストにより、攻撃者にとって DDOS がより簡単になります

    • URI と HTTP メソッド全体をログに記録します (例: "GET http://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 で素晴らしいアドバイスを提供しています。

于 2013-01-30T08:00:17.070 に答える
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;
?>
于 2013-01-30T14:41:36.530 に答える
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 からお尻を救うことができます。キャッシュ機能のためだけに、多くの高トラフィック サイトで使用しています。 . やばいです!

于 2013-02-04T23:23:58.213 に答える
5

これは PHP レベルでは実行できません。DDOS は、Web サーバーに大量のリクエストを送信する一種の攻撃です。ウェブサーバーは、PHP スクリプトを呼び出す前にリクエストを拒否します。

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

于 2013-01-29T05:52:26.743 に答える
4

DDoS は、非常に高価な専用のネットワーク アプライアンスによって最適に処理されます。ホストは、パフォーマンスが比較的低い、状態が枯渇している、帯域幅が限られているなどの影響を受けやすいため、一般的に DDoS 保護を行うのが得意ではありません。DDoS 軽減ハードウェアにアクセスできない場合は、iptables、apache mod、および同様のサービスを使用すると、状況によっては役立つことがあります。または DDoS 軽減サービスですが、これは理想とはほど遠いものであり、依然として攻撃のリスクにさらされています。

于 2013-01-29T16:30:50.110 に答える
3

ddos/dos 用に apache で使用できるプラグインがあります。ここから始めましょう http://www.debianadmin.com/how-to-protect-apache-against-dosddos-or-brute-force-attacks.html

LEMP を使用している場合は、ここで確認できます。 http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html

これらは、安価な出発点として適しています。

于 2013-02-05T00:47:23.620 に答える
3

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

ただし、層 4 と戦うために CloudFlare を使用することをお勧めしますが、支払う気がない限り層 7 ベースの攻撃は避けてください。

于 2015-04-24T23:17:38.737 に答える