2017-07-15 10 views
18

Djangoチャンネルサーバーをに照らしたり、偶発的な影響を受けないようにするための具体的な方法はありますか websocket/HTTPクライアントからのDDoS攻撃または一般負荷の増加? Channelsは本当に非同期ではない(まだ舞台裏で働いている)ので、かなり簡単なハードウェアでも、ChannelsベースのWebサイトを簡単に削除できるようになりました。私は現在、Djangoチャンネルでアプリケーションを構築しており、後でいくつかのテストを実行して、それがどのように保持しているかを確認します。Djangoチャンネルのスパイクをロードする

ダフネには何らかの調整が組み込まれていますか?アプリケーションレベルのスロットルを実装する必要がありますか?ワーカーが依然として抑制された要求を処理しているため、これはまだまだ遅いですが、要求がはるかに高速になる可能性があります。これらの攻撃を阻止しようとするために他に何かできますか?

私は、特定のチャネルに指定されたワーカーが常に存在することを確実にすることを考えました。つまり、websocketチャネルに過負荷がかかってもHTTPは応答します。

編集:低レベルのDDoS保護が理想的な解決策であることは十分に認識しており、DDoS攻撃の仕組みを理解しています。私が探しているのは、そのような増加した負荷を処理するのに役立つチャネルに組み込まれたソリューションです。おそらく、Daphneがチャネルをスケールアップして補償するために別のチャネルをスケールダウンする能力、またはあるポイントの後で要求ごとの重量を減らすことができるスロットルの能力。

私はdaphne/channelsの特定の回答を探しています - DDoSや一般的な負荷処理に関する一般的な回答は、私が探しているものではありません - それについては他にもたくさんの質問があります。

ログインしている人とログインしていない人に基づいて調整することもできます。ログインしていないユーザーのためのスロットルが役立つ可能性があります。

もう一度編集:質問全体をお読みください!私は一般的なDDoS軽減のアドバイスや低レベルアプローチの説明を探しているわけではありません。ダフネのようなもののためにサポートしている場合、私は思ったんだけど:キューサイズに基づいて

  • ダイナミック労働者の割り当てをスロットリング

    • ミドルウェアは、認証要求に優先順位を提供するために

    またはその性質のもの。私はこの問題のための最良の場所ではないかもしれないので、私はまた、これについて直接チャネルのコミュニティに手を差し伸べるつもりです。

  • +0

    ソフトウェアファイアウォールによるDDoS保護?私の意見は「畏敬の念」です。要求ごとに60バイトのヘッダを読み込みます。拒否ドロップフリーズのためのより多くの機能を引き起こしたのは 'システムリソース'の問題です。遅れは「予期せぬ結論」です。低価値攻撃で成功するかもしれませんが、システムリソースを処理する方法はありますか?ファイアウォール上でストアプロシージャを使用することはできません。good_userとbad_userの両方のリクエストを意味します。 **望ましくない要求が受け入れられた場合、あなた自身を守ることはできません!**パケットがループバック( 'lo')に達した場合は安価ではありません。 – dsgdfg

    答えて

    3

    私はAndrew Godwinからanswerを受け取っています。彼はStackOverflowを使用しないので、私は彼のためにここにそれを掲示しています。

    こんにちはジェイミー、

    瞬間チャンネルでスロットリングのために非常に限定的なサポートを持っている - それはかなり完全な、サーバーが503エラーを返すようになります、着信接続のための調整可能なチャネルサイズで構成されてい。作業者は、チャネル設計による可用性に基づいて負荷分散されているため、作業者が他のものより大きなキューを取得するリスクはありません。

    さらに高度なDoSまたはDDoS保護を提供することは、おそらくチャネル自体の範囲内でできることではありませんが、適切なフックを提供していることを確認したいと思います。あなたが必要とするもののいくつかを書くのに役立つ具体的な事柄は、私たちが実装できると思いましたか?

    (現在、私たちは大幅に書き直しの一環としてワーカー/コンシューマのレイアウトを変更しています。これはスケーリング時に別の考慮事項を意味するため、あまり与えたくありませんまだ正確なアドバイス)

    アンドリュー

    彼はまた彼のblogで2.0の移行について書かれています。

    0

    私は最初の質問に答えるだけです。基本的には、ddos攻撃から100%保護することは不可能です。なぜなら、それは常にリソースの戦いに陥るからです。サーバー側のリソースが攻撃側のリソースよりも大きい場合、サーバーは停止しません(パフォーマンスは低下する可能性があります)が、サーバーがダウンしても[参照不要]になります。 100%保護することができないのはなぜですか、あなたは尋ねるかもしれません。だから、基本的にあなたのサーバーは "クラッシュする"人々がそれに接続できない場合[https://en.wikipedia.org/wiki/Crash_(computing)#Web_server_crashes --- Webサーバークラッシュセンテンス1.]。したがって、1秒間に10000回の接続が行われるたびに5分間シャットダウンしてサーバーを保護しようとすると、ddosは成功しました。サーバーがクラッシュしました。私が知っている唯一のddos保護はCloudfare(https://www.cloudflare.com/lp/ddos-b/?_bt=207028074666&_bk=%2Bddos%20%2Bprotection&_bm=b&_bn=g&gclid=EAIaIQobChMIu5qv4e-Z1QIVlyW9Ch2YGQdiEAAYASAAEgJbQ_D_BwE)です。これは、10Tbpsネットワークバックボーンによるddos攻撃の影響を吸収します。しかし、10Tbpsがダウンするとサーバーもダウンするため、100%ddos保護機能は提供されません。だから、私は助けてくれることを願っています

    +0

    答えてくれてありがとう、@Evgeny、それは本当に質問に答えるものではありません。私はDDoS攻撃の仕組みを理解しており、決して安全ではないことを理解しています。 Cloudflareのようなオプションもありますが、CAPTCHAのようなユーザーが許容できる緩和戦略を提供することができないため、Webソケットに対する攻撃の効果は大幅に制限されています。ダフネASGIサーバーでDjango Channelsサイトを構築する際のベストプラクティスについて具体的に質問しています。 –

    0

    のDDoS =サービス

    の分散型DoS攻撃は、「分散型」の部分はキーです:リクエストがあちこちから来るので、あなたは、あなたが特定の「誰かによって攻撃されている知っていることはできません。

    サーバーは、特定の数の接続のみを受け入れます。攻撃者が誰も接続できないほど多くの接続を作成すると、あなたはDDoSされています。

    本質的に、接続が合法でないことを検出できる必要があります。また、接続数の制限を補うために高速にスケールアップできる必要があります。

    これで幸運です!

    DDoS保護は、実際にクラウドプロバイダのサービス、ロードバランサレベルで行う必要があります。

    OVHのような企業は、不正なトラフィックを検出し、疑似リアルタイムで動作するIPを禁止する高度なマシン学習技術を使用しています。 このような検出機構を構築するには、おそらく貴重な時間を費やさない莫大な投資があります(ウェブサイトが非常に重要でない場合、$$$が何百万ドルも失われない限り)。

    +0

    ちょっと@MrE、確かに。私は完全にクラウドレベルの保護が優れていることを理解していますが、私はまた、負荷に関する偶発的な問題についても尋ねています。スロットルのようなものは、リクエストごとのインパクトの量を減らすか、またはダフネが特定のチャンネルをスケールダウンして別のチャンネルを補うようにするなど、チャンネルに特有のものを減らします。 WebSocketの問題は、彼らが悪意を持って保護するのが難しいことです。私は私の質問をもう少し明確に更新するつもりです。 –

    +0

    トラフィック量が少ない(チャットチャンネルのような)場合は、yesのスロットルは良い解決策です:あまりにも多くのメッセージを送信している人を一時停止または追放してください。 IoTデータのような他のものについては、期待されるデータレートも持っているはずです。スロットルは一般的には良い考えのようです。 – MrE

    +0

    しかし、未知のトラフィックを処理する最善の方法は、websocket apiサーバーで何も処理せず、メッセージキュー(Kafka、RabbitMQなど)に直接メッセージを送信し、スパイクを処理してメッセージをプロセスにプッシュすることです。処理を実際に処理します。 – MrE

    0

    Theres a lotどのようにあなたがあなたの処分で持っているか、誰かがあなたをオフラインにしたいどのくらいに応じていくつかのきちんとした 'トリック'があります。

    あなたは保護しようとしているリソースに直接接続する必要がある公共サービスを提供していますか?

    もしそうなら、あなたはリソースを使ってDDOSを「浸す」必要があるでしょう。拡大縮小したり、伸縮させたりすることもできます。どちらにしてもお金がかかります!

    攻撃者があなたのリソースを消費するのをより困難にするか、これを行うにはいくつかの方法があります。

    サービスに何らかの認証が必要な場合は、保護しようとしているリソースから認証サービスを分離します。

    多くのアプリケーションでは、認証と 'サービス'は同じハードウェア上で実行されます。 DOSが起こるのを待っていることだ。

    ダイナミックファイアウォールのフィルタリングルールを使用して、完全に認証されたユーザーのみが保護しようとしているリソースにアクセスできるようにします。あなたの認証された場合は、リソースへのゲートが開きます(QOSが制限された状態で)。あなたのよく知られた、長期信頼できるユーザーの場合は、フルボアでリソースにアクセスしてください。

    ユーザーリソースの動作(ネットワーク、メモリ、CPU)を監査する方法、奇妙な金額を使用して特定のアカウントを表示する、禁止する、または制限を課す方法があり、最終的にトラフィックのファイアウォールドロップポリシーにつながります。

    ISPボーダーで仕様へのトラフィックを落とす可能性のあるシステムを備えたISPと連携して作業してください。.... OVHが最適です。フィルタとトラフィックをAPIとしてドロップするISPは、私は彼らが存在したかったと思っています...基本的にファイアウォールのフィルタリングルールをAS境界に移動しています... niiiiice! (ファンタジー)

    DDOSを止めることはできませんが、リソースを管理者レベルで消費することを無駄にしないようにするためのツールがいくつか用意されています。 DDoSはあなたの認証サーバーに向かわなければなりません...(可能な)、または多くのユーザーアカウントを侵害します....既に認証されたユーザーはまだアクセスできます:-)

    あなたのDDoSがISPの帯域幅をすべて消費している場合、それはより困難な問題です。より大きなISPに移行してください!またはISPの...を移動する:-)。主なリソースを隠し、動的に動かせるようにして、動いてください! :-)

    問題を細かく分割してください...小さな部分にDDOSコントロールを適用してください。 :-)

    私は最も一般的な答えを試しましたが、たくさんの依存している、各DDOSの緩和は、スキンのビットが必要です、スズのアプローチ..本当にあなたのチームのアンチddos忍者が必要です。 ;-)

    分散プロトコルを見てみましょう.... DPはおそらくDDOSの答えです。

    楽しんでください。

    0

    あなたの質問にいくつかの分析を適用しましょう。 DDoSはDoSに似ていますが、友人とは異なります。 DDoS攻撃を避けたい場合は、DoSの可能性を最小限にする必要があります。ありがとうございました。

    まず最初は、リソースが影響を受けているものをお使いのシステムで発生し、ウィッヒでリストを作成されて行うことです。

    • TCPハンドシェイクが実行される(SYN_COOKIESが影響を受けている)
    • SSLハンドシェイクが後で来ます(エントロピー接続をチャネル層に形成されている
    • 、CPU)...

    は、各リソースをmonitorizeと対策を実施しようとする。

    • ...
    • (SSLハンドシェイクを最小化するための簡単な方法)短時間でオープン/クローズの接続を制限するためにファイアウォールを設定
    • 使用エントロピー発電
    • カーネルのparamsを設定SYN_FLOODに、ファイアウォールを守ります

    大きな問題(DDoS)を多くの簡単で簡単なタスクで分けることができます。難しい部分は、ステップとリソースの詳細なリストを取得します。

    すみません。

    +0

    capitan?キャプテン? – Pang

    +0

    ちょっと@lasizoillo、応答のおかげで。私が他の答えに言及したように、私はDaphneがこのようなことをサポートしているかについての情報を本当に探しています。大きなキューを処理する方法、特定のチャネルのためのより多くのワーカーを正常に生成する方法、または何らかの調整を行う方法。本当のDDoS保護ははるかに低いレベルで行われていると私は理解していますが、私はDaphneとDjango Channelsのアプリケーションレベルのサポート(DRFの調整など)についての情報を探しています。 –

    関連する問題