DDoS(分散型サービス拒否攻撃)は一般にサーバーレベルでブロックされますか?
PHPレベルでブロックする、または少なくとも削減する方法はありますか?
そうでない場合、DDoS攻撃を阻止する最も速く最も一般的な方法は何ですか?
DDOSは、データセンターの主要なシステムを圧倒する攻撃のファミリーです。
DDOS防御の構築を開始する前に、最悪の場合のバリューアットリスクを検討してください。小規模なコミュニティ向けの重要ではない無料のサービスの場合、リスクの合計値はピーナッツになる可能性があります。確立された数十億ドル規模のビジネス向けの、有料の公共向けのミッションクリティカルなシステムの場合、その価値は会社の価値になる可能性があります。後者の場合、StackExchangeを使用するべきではありません:)とにかく、DDOSから防御するには、徹底した防御アプローチが必要です。
すべてのシステムとソフトウェアパッケージを最新のセキュリティパッチで更新します-そして、それらすべてを意味します:
優れたファイアウォールまたはセキュリティアプライアンスが設定されていることを確認し、資格のあるセキュリティエキスパートによって定期的にレビューされていること。ファイアウォールの強力なルールは、多くの単純な攻撃に対する優れた防御策です。また、各オープンサービスで利用可能な帯域幅を管理できると便利です。
適切なネットワーク監視ツールを用意してください-これは理解するのに役立ちます:
攻撃は、正当なWebサイトサービスの単純な大量使用(クエリを実行する「合法的な」URIのヒット、データの挿入/更新/削除など)である可能性があります。膝。あるいは、一部のサービスは実行に非常に高価であるため、ごく少数の要求だけがDOSを引き起こします-本当に高価なレポートだと考えてください。そのため、何が起こっているかを適切にアプリケーションレベルで監視する必要があります:
アプリケーションの適切な制約と制限。たとえば、次のことができます。
最後に、重要なこととして、DOS応答計画文書を作成し、ビジネス、管理、SW開発チーム、 ITチームとセキュリティの専門家。ドキュメントを作成するプロセスにより、あなたとあなたのチームは問題を熟考し、最悪の事態が休日の午前3時に発生する場合に備えられるようになります。文書は(とりわけ)カバーする必要があります:
序文はさておき、ここにいくつかの具体的な答えがあります。
DDOSは一般にサーバーレベルでブロックされますよね?
そうではありません-最悪のDDOS攻撃のほとんどは低レベル(IPパケットレベル)であり、DDOS攻撃を処理するために開発されたルーティングルール、ファイアウォール、セキュリティデバイスによって処理されます。
PHPレベルでブロックする方法、または少なくともそれを減らす方法はありますか?
一部のDDOS攻撃は、有効なURIおよびHTTPリクエストを送信するアプリケーション自体を対象としています。リクエストの割合が上がると、サーバーが悪戦苦闘し始め、SLAの停止が発生します。この場合、PHPレベル:
アプリケーションレベルの監視:各サービス/ページがリクエストを記録していることを確認します(これにより、攻撃を軽減するためのアクションを実行できます)。いくつかのアイデア:
ログツール(またはExcelなど)に簡単にロードでき、コマンドラインツール(grep、sed、awk)で解析できるログ形式を使用します。 DDOSは数百万行のログを生成することに注意してください。何が起こっているのかを把握するために、ログをスライス(特にURI、時間、IP、およびユーザー)し、次のようなデータを生成する必要があります。
各リクエストのIPアドレスを記録します。 DNSを逆引きしないでください-皮肉なことに、これを行うコストは攻撃者にとってDDOSを簡単にします
合理的なレート制限:特定のIPまたはユーザーが特定の期間に行うことができるリクエスト数に制限を設けることができます。正当な顧客が1秒あたり10件を超えるリクエストを行うことはできますか?匿名ユーザーは高価なレポートにまったくアクセスできますか?
匿名アクセス用のCAPTCHA:すべての匿名要求にCAPTCHAを実装して、ユーザーがDDOSボットではなく個人であることを確認します。
DDOS攻撃を阻止する最も速く最も一般的な方法は何ですか?
恐らく最速の手段は恐らく恐giveに屈することですが、これは望ましくないかもしれません。
それ以外の場合、最初に行うことは、ホスティングプロバイダーやCDNプロバイダーに連絡し、それらと連携することです(既に連絡を取っていない場合は、一体何が起こっているのかを尋ねます...)。 DDOSが発生すると、ホスティングプロバイダーの他の顧客に影響を与える可能性が高く、プロバイダーはリソースを保護するためだけにサイトをシャットダウンするようにかなりの圧力を受けている可能性があります。ログ(すべての情報)をプロバイダーと共有する準備をします。これらのログは、ネットワークモニターと組み合わせて、攻撃をブロック/軽減するのに十分な情報を提供する場合があります。
DDOSを期待している場合は、ホスティングプロバイダーが提供できる保護レベルで認定することをお勧めします。 DDOSの経験とそれを緩和するツールが必要です。ツール、プロセス、エスカレーション手順を理解してください。また、ホスティングプロバイダーが their アップストリームプロバイダーにどのようなサポートを提供しているかについても尋ねます。これらのサービスは、より多くの前払いまたは月額費用を意味する場合がありますが、これを保険証券として扱います。
攻撃を受けている間は、ログを取得してマイニングする必要があります-攻撃のパターンを試してみてください。匿名アクセスをオフにし、攻撃を受けているサービスを調整することを検討する必要があります(つまり、サービスに対するアプリケーションのレート制限を下げます)。
幸運で、小規模で固定された顧客ベースがある場合、有効な顧客のIPアドレスを決定できる可能性があります。この場合、しばらくの間、ホワイトリストアプローチに切り替えることができます。新しいIPからアクセスする必要がある場合に電話をかけることができるように、すべての顧客がこれが行われていることを確認してください:)
Doug McClean にはいくつかの素晴らしいアドバイスがあります: https://stackoverflow.com/a/1029613/1395668
PHP質問の一部;
私はPHPに依存していませんが、実装することはできますが、これらすべての可能性以上を考慮する必要があります。
単純な擬似。
<?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;
?>
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からあなたのお尻を救います。キャッシュ機能のためだけにサイトをトラフィックします。すごい!
DDoSは、非常に高価な専用ネットワークアプライアンスによって最適に処理されます。ホストは、比較的低いパフォーマンス、状態の枯渇、限られた帯域幅などの影響を受けるため、一般にDDoS保護の実行には適していません。またはDDoS軽減サービスがありますが、理想からはほど遠いため、攻撃の危険があります。
PHP side:
//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;
}
PHPレベルではこれを実行できません。 DDOSは、Webサーバーに多くのリクエストを送信する一種の攻撃です。ウェブサーバーは、PHPスクリプトを呼び出す前にリクエストを拒否します。
Apacheを使用している場合、Apacheからのヒントを次に示します。 http://httpd.Apache.org/docs/trunk/misc/security_tips.html
Apacheでddos/dosに使用できるプラグインがあります。ここから始めましょう 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
これらは、安価で良い出発点です。
通常、DDOSはサーバーレベルでブロックされます。サーバーレベルでDDOS保護を有効にしてください。 DDOS保護については、以下の注意を確認してください。
DDOSの問題の防止に役立つApache HTTPサーバーの構成設定:
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ディレクティブを調整して、サーバーがリソースを使い果たすことなく最大数の同時接続を処理できるようにします。
[〜#〜] not [〜#〜]はPHPベースの保護を使用します。恐ろしく、ほとんど影響を与えません! Nginxでlimit_reqモジュールを使用してリクエストをレート制限するようにWebサーバーを設定します( http://nginx.org/en/docs/http/ngx_http_limit_req_module.html )
ただし、CloudFlareを使用してレイヤー4に対抗することをお勧めします。ただし、支払いを希望しない限り、レイヤー7ベースの攻撃は避けてください。
Anti DDOSステップ: