DDOS攻撃からのNginx Protection。 DDOS攻撃からのプログラムからのWebサーバーの保護DDOS攻撃からのNGINX

時に最新のバージョンに基づいて、Webサーバーのインストールと設定に関する詳細な記事を書きました。 そこで私はこれがWebサーバーゾーンサイクルからの最初の記事です。 今日私はあなたが単純なものからあなた自身を守るためのシンプルでかげのある手段としてあなたに言うでしょう ddos。 攻撃

すぐに私はDDOという言葉についての予約をします。これはここではまったく適切ではありませんが、私たちが話しているのはどれだけ普及しているのかを思いつくことはありませんでした。 完全なDDOS攻撃から、Webサーバーのセットアップの一部として身を守ることはできません。 チャンネル全体で詰まっているだけで、サーバーが応答を停止します。 サーバーの電源が入ってくる要求を処理してフィルタリングするのに十分でない場合は、そこで行ってください。 DDOSに対する本格的な保護のためには、有形の財務費用である本格的な資金が必要です。 別の記事で読み取ることによると理論の詳細については。

DDOに対する保護はリソースの重要性に適切であるべきであることを理解されたい。 あなたが個人的なブログを持っているならば、それは重要な利益をもたらさない、それからDDOに対する保護のために支払う。 それはしばらくの間横になるだけで十分です。 一般に、常に保護費用およびこれに基づいてダウンタイムのコストを測定して、1つまたは別の方法の実現可能性を決定する必要があります。

あなたの部品に適切な行動がなければ、あなたのウェブサイトやサーバーを問題なくすることができる、ボットやいくつかの小さな害虫やパックの単純な攻撃から保護するためのアドバイスをします。 これが簡単な例です。 2ヤード、8ギグの作業員とSSDディスクがあるボード上には、それほど弱くはありません。

サーバーは私の前の記事で構成されています。 サーバー上では、いくつかの内容を持つWordPressサイトが展開されます。 そして、私たちはあなたのサーバー上でApacheからWebサーバーのパフォーマンスへの単純なテストを実行する害虫を持っています:

#ab -c 50 -n 30000 "https://hl.zeroxzed.ru/"

50の並列ストリームしか。 Webサーバーに表示されるもの:

とても楽しい写真ではありません。 サーバーは100%ロードされます。 そしてそれは通常要求を処理し、一般的にそれは正しく機能します。 それは遅くなっていませんが、それでも悪いです。 そしてそれぞれ3つのサーバーと100個のストリームがある場合は? 仮想マシン上のさまざまなホスターからテストを取り除き、DDOS攻撃を模倣することでそのようなものを実行することでさえも問題ありません。

一般に、あなたがサーバーをまったく保護しなかったならば、だれでも特別な問題なしにいくつかの不便を届けることができるでしょう。 そのような「攻撃」から提供されていないことは難しくありません。 それから私はあなたにそれをする方法を教えてくれます。

iptablesを使用したDDOS保護

最も単純な攻撃から保護するために、ファイアウォールを使用します - iptables、モジュールカーネル ipset。 IPと自己書類の大規模なスクリプトのリストを保存する。 ファイアウォールの場合は、私の記事を参照してください - 。 ここでは止まりません。

IPsetセットアップの質問私は私の記事で詳細に検討しました。 この記事に直接関連してそれを補完するように、素材を見ることをお勧めします。

そのため、1つのIPアドレスからの多数の接続を伴うDOS攻撃に対する簡単な保護を作成します。 まず、各IPアドレスからの接続数を表示するコマンドを確認します。

#netstat -ntu | awk "(印刷$ 5)" | .. GREP -VE "(アドレス|サーバ| | 127.0.0.1)" CUT-D:-F1 | ソート| UNIQ -C | sort -n | SED "S / ^ [\\ T] * //"

ここで彼は私たちの静けさの違反者で、私たちのサーバーの上司を整理しようとしています。 今すぐサイトと50以上の同時接続を設定するすべての人をブロックするスクリプトを描画します。

#!/ bin / sh netstat -ntu | awk "(印刷$ 5)" | .. GREP -VE "(アドレス|サーバ| | 127.0.0.1)" CUT-D:-F1 | ソート| UNIQ -C | sort -n | sed "s / ^ [\\ t] * //" | awk ""($ 1\u003e 50)印刷$ 2) "\u003e /root/ddos/much_conn.txt sleep 3 list \u003d $(cat /root/ddos/much_conn.txt)$ LIST IPSET IPSet -a kear_conn $ IPNETは完了です

原則として、ここでコメントするものは何もありません。 私たちは、それが最新の接続のリストを取り、それが50より大きい場合、IPアドレスが記録された2列目の結果を比較し、そのファイルに渡します。

次に、このファイルを読み、それからMUST_CONNというIPsetリストにすべてのIPアドレスを追加します。 以前に作成する必要があります。 私はこれについて上記のリンクが導かれた記事で詳細に話しましたが、ここでもう一度繰り返します。

#ipset -n kear_conn iphash.

表示リストの内容をコマンドにすることができます。

#IPSET -L MUCK_CONN

これで、指定されたIPsetリストからのすべての接続がブロックされるiptablesにルールを追加する必要があります。

#iptables -a入力-m set --match-set exup_conn src -j drop

ちょうど私がiptablesルールを設定する前にサーバーコンソールへのアクセスを確認するように警告する場合に備えてください。 すべてが起こる、あなたは単にあなたが必要とするものではなく、単に間違って、コピーし、貼り付けられます。

すべて、サーバーへのマススパム接続を作成したすべての人をブロックしました。 50個の接続部の制限は場所で修正することができ、誰かが1つのIPからの接続を少なくすると、減らす必要があるかもしれません。

私が言いたい唯一の瞬間。 私自身は、サイトに到着したときに検索ボットを開くことをチェックしませんでした。 私はそれが明らかに50ではなく、30ではなく、私はおそらくチェックしなかったと思います。 一般に、このツールを使用するときは注意してください。

このスクリプトは王冠で固執し、毎分走ることができます。 しかし個人的には、そうしないでしょう。 サーバーのリソースを監視し、サーバーがその機能の限界で動作し、手動で入力し、誰かが接続でスパムされることを確認してください。 その後、このクラウンスクリプトをいつでも運転しました。 DDOSが停止したら、切断します。

それは何の間あなたに接続されていない人々からあなたに接続されていない人たちからあなたに接続されていない人たちのリストを自動的にクリーニングし、そこからあなたに接続されていない人たちのリストを自動的にクリーニングするのがいいですが、これは仕事を非常に複雑にします。 ブロッキングリストに少なくともログが必要です。最後のアピールタイムを保存します。 これをすべて処理して、計算します。 一般的に、このタスクはあまり難しくありませんが、些細なことではありません。 私はこれをやりたくなかった。

あまりエレガントではありませんが、この問題に対する簡単な解決策です。 指定されたライフタイムレコーディングでIPsetのリストを作成する タイムアウト。。 たとえば、次のようになります。

ipset -n kear_conn iPhashタイムアウト3600

この場合、IPsetリスト内のIP格納IPレコードは3600秒または60分間保存されます。

この例では、IPSetを使用するための1つのIPアドレスを使用すると、ポイントがないため、すぐにIPTables自体の手段を禁止できます。 このリストが少なくとも数百回線がある場合にのみIPsetが必要です。 いくつかのダースアドレスがある場合は、1つのiptablesが1つあります。

DDOから保護するためのWebサーバーログサーバーの分析

タイプクエリが異なるIPから来ているときに、もう一つの単純なものを考慮してくださいが、それでもより複雑なタイプのDDOS攻撃があります。 つまり、単純なボットネットで、いくつかの安いVDSサーバーから手で組み立てられています。 同時接続はそれほど多くないでしょうが、あなたが重いサイトを持っていて攻撃者がその弱い場所を見つけたならば(例えば検索)、それはサイトを置くのに十分かもしれません。

Iptablesを介して禁止され、BANのアドレスのリストがWebサーバーのログから抽出されます。 これを行うには、Webサーバーへのロギング要求を有効にする必要があります。 たとえば、nginxでは、これは仮想ホストのこの設定を担当します。

access_log /web/sites/hl.zeroxzed.ru/log/access.log main;

毎回ログファイル全体を分析しません。 この操作自体はWebサーバーを加熱します。 Log Logから最後の1000行を取り出して、HTTP 1.0のメインページ要求など、1つのIPからの接続数、「get / http / 1.0」と検討してください。 あなたが攻撃したボットネットの別の永続的な機能に気付いたら、それを使用してください。 それは同じユーザーエージェントまたは他のものであるかもしれません。 攻撃者が脆弱な場所に投下された場合は、このページのアドレスになります。

#tail -1000 /ウェブ/ sites/hl.zeroxzed.ru/log/ssla-access.log | .. EGREP「GET / HTTP / 1.0」| awk "(印刷$ 1)" | .. sort -n | UNIQ -C。

このコマンドの結果はほぼリストになります。

この場合、私は少し異なる条件を使いました、そして単にメインページに撃墜されたすべての人々のリストをもたらしました。 しかし、ここであなたはあなたが禁止できることができる違反者を見ることができます。

私達は私達のサイトへの要求が多すぎるものを自動的にロックするための以前のスクリプトと同様に描き、パフォーマンスの問題を生み出します。 生産性に問題がない場合は、もう一度繰り返します。余分な動きをお勧めしません。

#!/ bin / sh tail -1000 / Web/sites/hl.zeroxzed.ru/log/ssla-access.log | EGREP「GET / HTTP / 1.0」| awk "(印刷$ 1)" | .. sort -n | UNIQ -C | sort -n | テール-N100 | awk "(($ 1\u003e 50)の場合は$ 2)"\u003e /root/ddos/much_gets.txt sleep 3 list \u003d $(cat /root/ddos/much_gets.txt)$ list ipset ipset -a kear_gets $ IPNETは完了です

ここで以前と同じようにします。 ログファイル内の最後の1000行のために私たちのマスクに対して50以上の同一の要求をした人が禁止に送信されます。

要求をフィルタリングする文字列に注意を描きます。 この場合、例しかいませんでした。 表示されているように、服用して申請しないでください。 技術力とアプローチを実演します。 あなたは私の場所にシステムを設定して校正する必要があります。 これを理解することが重要であり、決断を思慮深く適用しません。 害はあるだけです。

IPsetに別のリストを作成し、IPablesに別のルールを追加することを忘れないでください。 既存のリストと前の例からルールを追加することはできますが、すべてを解決することをお勧めします。 その後の分析にとって非常に便利です。

DDOS攻撃中にこの規則をCronに追加し、毎分を実行します。 攻撃が完了すると、スクリプトをオフにすることができます。 原則として、あなたは絶えず去ることができます、しかしここであなたは慎重に考える必要があり、それがどのように見えるかを推定する必要があります。 主な原則は有害ではありません。

誤った参照を持つBanyaボット

194.67.215.242 - - "POST /INDEX.PHP HTTP / 1.1" 200 913 " g0dfw4p1.ru。"" Mozilla / 5.0(Windows NT 6.0; RV:34.0)Gecko / 20100101 Firefox / 34.0 "" - "

正しいリファラーフィールドには、HTTPまたはHTTPSのいずれかを含める必要があります。 それ以外の場合は、エラーステータスを安全にブロックまたは返すことができます。 このデザインを仮想ホスト構成に追加する(セクション) サーバー().

if($ http_referer!〜* ^($ | http:// | https://))(返品403;)

その後、nginx構成を確認して再読み出します。

#nginxt -t#nginx -s reload.

特定のリーファーである種のボットを取り出すならば、あなたはそれを禁止することができます。 これを行うには、条件を追加したり変更したりできます。 たとえば、次のようになります。

($ HTTP_REFERER \u003d "https://bots.ru/dostanim_tym_tym"の場合)(返品403;)

さらに、上記の例のように、シンプルなスクリプトを使用して、これらのボットをすべてイプタファリを禁止することができます。 ちなみに、NGREPを使用するなど、NGINXに落ちる前でさえ、それらはすぐに禁止され、HTTP要求を表示することができますが、これはより難しいタスクです。 それを行う方法を知っているだけではなく、そこにはニュアンスがあり、すべてがNginxに精通しています。 この方法を実装するのはあまり困難ではありません。

NGINXモジュールによるDDOS保護 - LIMIME_CONNとLIMIT_REQ

サーバーの負荷を軽減し、NGINXモジュールを使用してDDOから部分的に保護するためのもう1つの簡単な方法を共有します。 limit_conn そして limit_req.。 それらを構成することは難しくありません、部分的に最初のモジュールの結果は最初のDDOS保護方法と交差します。 カスタマイズするのが簡単ですので、これらのメソッドに対処していない場合は、これを試すことができます。

これらのモジュールの意味は、サイトとの許可された接続の同時量を制限できること、および単位時間当たりの別の接続数を制限することができるということです。

私の例では、1つのIP番号50からサイトへの同時接続数、および2秒あたり2以下の動的コンテンツへの同時要求の数を制限します。 これはしぶきを解決されます( バースト。)最大5のクエリ。 私はそれが正確に何を意味するのかをすぐに理解していないので、私はこのスプラッシュを理解する方法を説明します。

1秒あたりの設定要求数を超えている場合は、その実行が遅延され、それらは指定された速度でキューに組み込まれています。 このキューのサイズはバーストの値に等しいです。 キュー内に十分なスペースがないすべての要求はエラーで完了します。 つまり、要求が1秒あたり4の場合、2はすぐに実行され、別の2はキューにあります。 そして10であれば、2がすぐに実行され、5は毎秒2個の実行のためのキューにあり、残りはエラーで完了します。

これらの条件に基づいて、接続制限はコンテキストにインストールされている必要があります サーバそして適切な動的コンテンツへのアクセス ロケーション。 同時に、指示するゾーンの説明は使用されます。 http。.

DDOS攻撃から保護するための確立された制限の実装のためのNGINX構成の例は次のとおりです。

http(... limit_conn_zone $ binary_remote_addr zone \u003d perip:10m; limit_req_zone $ binary_remote_addr zone \u003d動的:10m Rate \u003d 2r / s; ... server(... limit_conn perip 50; ... location~ \\ .php $ ... limit_req zone \u003d動的Burst \u003d 5 Nodeley; ...))))

その後Nginxを再起動し、制限がどのように機能するかを確認してください。 実行された動的要求の数の制限は、ブラウザで非常に迅速にF5を押すだけで見ることができます。 十分な違反であれば、あなたはすぐに写真を見るでしょう

そしてログのエラーのエラー:

2017/11/30 15:25:26 9773#9773#9773:* 51482リクエスト、過剰:5.664 zone "dynamic"、クライアント:195.91.248.43、サーバー:hl.zeroxzed.ru、要求: "get / http / 2.0 「、ホスト: "hl.zeroxzed.ru"、参照元: "https://hl.zeroxzed.ru/2013/03/15/featured-image-vertical/"

接続数の制限は同じユーティリティを確認できます ab私は紹介で話しました。

017/11/30 15:38:56 9773#9773:* 53938ゾーン「Perip」、クライアント:94.142.141.246、Server:hl.zeroxzed.ru、要求: "Get / Wp-Content / Uploads / 2013 /03/the-dark-knight-rises.jpg http / 1.0、host: "hl.zeroxzed.ru"

特定のページではなくテストを開始する必要があることを忘れないでください。それから、動的コンテンツのパフォーマンスを制限するために取られるでしょうが、他のものに対して。 例えば、私の例のように、写真上。

制限事項を発行する場合は、検索ボットがこれらの制限に入っていないかどうかを制御することを忘れないでください。 デフォルトでは、サイトに負担が増えないようにしてください。 必要に応じて、YANDEXロボットをrobots.txtで指定できます。サイトをスキャンするのに速いです。 そして、ロボットGoogleはウェブマスターを通して同じことができます。

結論

PAMPERのようなもののような単純なDDOS攻撃からWebサーバーを保護するための最も簡単な方法を検討しました。 着信チャネルチャネル全体を単純に埋める重大な攻撃は、私たちの保護には気付いていません。 それにもかかわらず、私はいくつかの攻撃の反映におけるこれらの方法の有効性を確かめなければなりませんでした。

ユーティリティからさえも保護されていないWebサーバーはまだ膨大な数のWebサーバーです。 ab :)私は私が話しているのか知っています。 そして、インターネットやコート、荷物の準備ができていない大胆なサイトで見つけることができるすべての種類のボットやシンプルなプログラムもあります。

別の方法があり、私が説明したのと同じ単純なものがあり、リダイレクトやクッキーを理解していないボットから効果的です。 私はそれを説明しなかった、チェックするものは何もないので、記事を書くのにちょうど疲れていました、それは非常に大きくわかった。 私はそれを長い間書き込み、編集し、さまざまなサーバーのスクリプトと設定を収集し、私がかつて私がしたことを思い出すことを覚えています。 それから彼はこれを別々にチェックしました。

保護の本質は、NGINXの助けを借りてユーザーに特定のクッキーを発行してから、要求されたページをリダイレクトします。 ボットがクッキーやリダイレクトを理解していない場合は、それは落ちる。 通常のユーザーは何も気付かない。 たぶん後で私はこの方法について教えて記事を追加します。 その間。 私は記事のメリットについてコメントしてうれしいです。

オンラインLinuxコース

あなたが非常にアクセス可能で信頼できるシステムの構築と維持方法を学びたいという欲求があるならば、私は知り合いになることをお勧めします オンラインコース「管理者Linux」 OTUSで。 このコースは初心者のためのものではありません、入学のためにネットワーク上の基本的な知識と仮想へのLinuxのインストールが必要です。 トレーニングは5ヶ月続き、その後、コースの成功した卒業生はパートナーからのインタビューを通過することができます。 このコースをあげるもの
  • Linuxアーキテクチャの知識
  • 現代の方法とデータ分析とデータ処理ツールをマスターする。
  • 必要なタスクの設定を選択し、プロセスを管理し、システムのセキュリティを確保できます。
  • システム管理者の主要な作業機器の所持。
  • Linuxに基づいて構築されたネットワークの展開、設定、および保守の機能を理解する。
  • 新たな問題を迅速に解決し、安定して途切れのないシステム操作を確実にする能力。
紹介テストであなた自身をチェックし、より多くのソフトウェアプログラムを見てください。

Habréでの私たちのブログでは、クラウドプロジェクトの開発だけでなく、特定の技術タスクを解決する方法についても説明します。 2015年の夏には、そのヘルプがDDOS攻撃に耐えることができる方法について、Nginxプロジェクトブログにマテリアルが表示されました。 ノートは私たちにとって面白いようでしたので、ここでそのハイライトを与えます。

はじめに:DDOSとは

- 「それを反映させるサービスへの分散攻撃」は、さまざまな情報源からのトラフィックを犠牲にすることで、任意のサービス、通常はアクセスできないWebサイトを作成しようとする試みです。 その結果、それをサービスするサーバーは、オーバーロードに対処することなく、単に正常に機能しなくなります。

このビジネスの標準図は、ネットワークがストリームに対処するのに停止するように、このような数の新しい接続と要求によってシステムを「拷問」することです。

DDOS攻撃の仕様

アプリケーションレベルでは、DDOS攻撃は特定のシステムで脆弱性を使用できる特別なプログラム(BOT)によって行われます。 例えば、多数のそのような「コネクタ」を作成することによって、多数の並列化合物を制御することによって鮮鋭化されないシステムを無効にすることができる。 積極的な状態では、随時から維持することができ、それらをそれらを通して少量のトラフィックを通して座ります。 もう1つの選択肢は、システムを多数の要求で埋めること、またはこれらの要求を十分に重くすることです。 それは実際の接続ではないので、ボットを通して、膨大な数のクエリを送信し、多くの新しい接続を迅速に作成することは非常に簡単です。

以下は、それらが認識できるDDOS攻撃の技術的特徴、およびそれらに対処することを考える。

  • トラフィックは通常、攻撃を目的とした固定数のIPアドレスから来ています。 その結果、そのような各アドレスは、実際のユーザに典型的な異常な数とクエリを照会する。 参考のため:それは常に同様の配置ではありませんDDOS攻撃を示します。 サーバー上のIPアドレスを使用してユーザーの識別に使用されているため、前方(匿名)プロキシを使用するときに同様のアクションが見られます。 ただし、匿名プロキシからの機会や要求は、攻撃時の場合よりも少なくなります。
  • ボットはトラフィックを生成することです。「オーバーヘイミング」サーバーは、このトラフィックの強度は実際のユーザーよりもはるかに高いです。
  • User-Agentクライアントアプリケーションヘッダーは、標準以外の構成で表示されることがあります。
  • 攻撃は参照ヘッダーによって認識されることがあります。

DDOS攻撃と戦うためのNginxとNginx Plusの機能

NGINXとNGINX PLUSの多くの特性は、DDOS攻撃に対処する方法の質問の解決に貴重な支援を提供できます。 それは2つの方向に機能します:着信トラフィックの管理と内部サーバーによるその分布の制御を通して。
クエリ周波数制限
NginxとNginx Plusを介して受信要求頻度を調整できます。 たとえば、2秒ごとにメインページを入力していると思います。 このリクエストの頻度を1分あたり30ページに設定できます。

LIMIT_REQ_ZONE $ BINARY_REMOTE_ADDR ZOON \u003d 1:10M RARATE \u003d 30R / M; server(... location /login.html(limit_req zone \u003d 1; ...))
LIMIT_REQ_ZONEディレクティブは、指定されたキーに対する設定された要求数を格納するための全体的な1つのメモリゾーンを生成します。 この場合、これはクライアントIPアドレス($ BINARY_REMOTE_ADDR)です。 block / login.htmlのlimit_reqディレクティブは、このメモリゾーンを参照しています。

接続数の制限
1つのクライアントのIPアドレスから来ることができる接続数に制限を課すことができます。 やはり、本物のユーザーの値を特徴的に理解する。 たとえば、1つのIPから10の目標を1つのIPにインストールすることができます。

limit_conn_zone $ binary_remote_addr zone \u003d addr:10m; サーバー(...ロケーション/ストア/(limit_conn addr; ...))
前の例と同様に、limit_conn_zoneディレクティブは、特定のキー - $ binary_remote_addrクライアントIPアドレスの要求を格納するための共通の追加メモリゾーンを生成します。 BODY / STOREのlimit_connはこのメモリゾーンを参照して、各クライアントIPから制限10の接続を設定します。

遅い化合物を閉じる
データを送信する接続を区別することはできません。これは、長期間にわたって主な目標を開いて新しい化合物を妨げるという兆候になる可能性があります。 このタイプの攻撃プログラムはスローロリアと呼ばれます。 client_body_timeoutディレクティブは、クライアントの本体のレコード間のNginxの待ち時間を制御します。 CLIENT_HEADER_TIMEOUTディレクティブはヘッダーに対して同じです。 デフォルトでは、どちらの場合も60秒です。 次の例では、この間隔は5秒に設定されています。

サーバー(client_body_timeout 5s; client_header_timeout 5s; ...)

「ブラックリスト」でIPアドレスを作成する
攻撃に使用されるIPを認識した場合は、拒否、NGINX、NGINX PLUSディレクティブを使用してそれらを「ブラックリスト」に追加できます。ディレクティブはこれらのアドレスからの要求に応答しなくなります。 たとえば、アドレス123.123.123.16を介して攻撃が地域123.123.123.1から来ていることがわかった場合

場所/(Deny 123.123.123.0/28; ...)
そのようなアドレスがいくつかある場合

場所/(Deny 123.123.123.3;否定123.123.123.5; Deny 123.123.123.7; ...)

IPアドレスの許可リストを作成します
サイトまたはアプリケーションへのアクセスが既知のIPアドレスの範囲で開かれているとします。 許可および拒否ディレクティブを使用して登録できます。 たとえば、ローカルネットワークアドレスによってのみアクセスを提供できます。

場所/(192.168.1.0/24を許可します。すべて否定します。...)
インストール範囲の条件を満たさないIPアドレスがブロックされます。

トラフィックのジャンプを防ぐためのキャッシング
キャッシュをキャッシュしてパラメータを渡すと、トラフィックジャンプを吸収するように、NginxとNginx Plusを設定できます。 これは、次のオプションで実行できます。

PROXY_CACHE_USE_STALEの更新パラメータは、NGINXをレポートします.NGINXは、キャッシュ内の古いオブジェクトを更新する必要があるときに、それは1つの要求のみを送信し、内部サーバーからの更新が受信されるまで顧客のためにそのようなオブジェクトへのオープンアクセスを保持する必要があります。

Proxy_Cache_Keyによって定義された鍵は通常、組み込みのバリエーションで構成されています(デフォルトキー、$ SQUINAL $ PROXY_HOST $ REQUEST_URIには3つのバリエーションがあります)。 値に$ QUERY_STRINGが含まれている場合、希少クエリ回線を送信する攻撃は過剰なキャッシングにつながる可能性があります。 緊急の必要性がない場合は、このオプションをキーに含めることはお勧めできません。

ロッククエリ
次の種類のリクエストをブロックするには、NGINXとNGINX PLUSを構成できます。
  • 特定のURLへのお問い合わせは危険にさらされる可能性があります。
  • ユーザーエージェントヘッダーに通常のクライアントトラフィックと一致しない値がある場合の要求。
  • リファレータヘッダを攻撃に関連するものとして定義できる要求。
  • 他の見出しが疑われるような要求。
たとえば、攻撃がurl /foo.phpを対象としていると判断した場合は、ページへのすべての要求をブロックできます。

location /foo.php(すべて否定;)
DDOS攻撃がユーザーエージェントヘッダーにFooまたはBar値があることがわかった場合は、それらをブロックできます。

場所/($ HTTP_USER_AGENT ~FOO |の場合)(Return 403;)...)
同じ原則によって、あなたは攻撃の脅威を示す値を持つ他の見出しと協力することができます。

内部サーバーへの接続を接続します
NGINXとNGINX PLUSは、内部サーバーよりも多数の接続で同時に制御できます。 Nginx Plusを使用すると、各内部サーバーへの接続数を制限できます。 サイトを提供するグループの2つの内部サーバーへの接続数を制限したいとします。

アップストリームのWebサイト(サーバー192.168.100.1:80 MAX_CONNS \u003d 200; Server 192.168.100.2:80 MAX_CONNS \u003d 200;キュー10タイムアウト\u003d 30S;)
max_connsパラメータは、サーバーごとにNginx Plusによって開く最大接続数を設定します。 すべてのグループサーバーが制限を超えると、キューディレクティブはキュー内の要求数を制限します。 同じ行で、時間はキュー - 30秒のキューに登録されます。

範囲ベースの攻撃
範囲関数ヘッダが非常に大きな値で送信される攻撃オプションがあり、それはバッファオーバーフローをもたらす可能性があります。 NginxとNginx Plusを使用してこのタイプの攻撃に対処する方法を調べるために、読み取ることをお勧めします。
大きなダウンロードで管理する方法
DDOS攻撃は通常、重大な起動レベルにつながります。 NginxとNginx Plusを教える方法について読み、この問題に対処することができます。

DDOS攻撃検出

これまでのところ、DDOS攻撃の影響を和らげるためにNginxとNginx Plusを使用する方法について説明しました。 しかし、これらのサーバーを使用して攻撃自体を検出することは可能ですか? NGINX Plus Statusモジュールは、内部サーバーを介して分散された詳細なメトリックトラフィックレコードを提供します。 このツールを使用すると、異常なトラフィックステータスを認識できます。 NGINX Plusはサイト管理パネル機能の関数を持っています。ここで、システムの現在のステータスのグラフが表示されます(例はここで視聴できます.demo.nginx.com/status.html)。 同じインジケータがAPIを介して入手可能であり、それらは独自またはサードパーティの監視システムに埋め込まれ、時間内にトラフィックを追跡することができます。

概要

NGINXとNGINX PLUSは、DDOS攻撃を停止する方法の解決に貴重な支援を提供できます。 同時に、Nginx Plusには、この種の攻撃から外観を警告するための追加のプロパティがあります。

あなたはサイト開発にいくらかのお金を助けて翻訳することができます。



Ubuntuオペレーティングシステム上で実行されているNGIX Webサーバーの保護(原則として任意のLinux)を検討してください。

洪水の考え、つまり膨大な数のパッケージを持つ被害者の犠牲者の犠牲者に基づくDOS / DDos-攻撃には、2種類あります。

洪水は異なります.ICMPの洪水、SYN-Flood、UDP - フラッドおよびHTTPフラッド。 現代のDOSボットは、これらすべての攻撃を同時に使用することができるので、それぞれから適切な保護を大事にする必要があります。

  • ICMP - 洪水
  • ICMPエコー(PING)のための要求の単調区画を介してネットワークスタック上の帯域幅の原始的な方法およびネットワークスタック上の負荷を作成する。 両方向のトラフィックフローを分析することによって検出されます.ICMPフラッド攻撃の間、それらはほぼ同じです。 実質的に痛みのない絶対保護方法は、ICMPエコー要求に対する応答を無効にすることに基づいています。

    保存して適用:

    sudo sysctl -p。
  • シンフラム。
  • 一般的な方法の1つは、通信チャネルをスコアするだけでなく、オペレーティングシステムネットワークスタックを新しい接続要求を受信できなくなる状態に入ることもできます。
    存在しないリターンアドレスを持つSYNパッケージを介して多数の同時TCP接続を初期化しようとしました。 応答ACKパッケージをアクセス不能アドレスに送信しようとすると、ほとんどのシステムはキューへの正確な接続を設定します。 n番目の後にのみ、接続は閉じられます。
    ACKパケットストリームは非常に大きいので、キューは完全に完了し、カーネルは新しい接続を開こうとする拒否を与えます。
    最もインテリジェントなDOSボットはまた、攻撃を開始する前にシステムを分析して、重要なポートを開くためだけに要求を送信します。 私は単にそのような攻撃を識別します:それはいずれかのサービスに接続しようとするのに十分です。

    防御イベントは通常次のものを含みます。
    キューの「セミオープン」TCP接続の増加、
    控除時間「セミオープン」化合物を縮小する
    TCP Syncookiesメカニズムをオンにする、
    あるIPから特定のポートへの「セミオープン」接続の最大数の制限

  • UDPフラッド
  • 通常の帯域幅登り法 さまざまなUDPサービスのポート上のUDPパケットの無限の前提に基づきます。 外部の世界からそのようなサービスを削減し、ゲートウェイ側のDNSサーバーに単位時間当たりの接続数に制限を設定してください。

    iptables -i入力-p udp --dport 53 -j drop -m iplimit --plimit-1

    おそらくあなたはコアを逆転させなければなりません。 しかし、それはすでに.......

  • http-flood.
  • 洪水の最も一般的な方法の1つ。 他のすべての要求を処理できないように、Webサーバーをアップロードするために、80thポートへのGETリクエストの無限の送信に基づいています。
    洪水の目的がWebサーバーのルートではなく、リソース集約型のタスクを実行するか、データベースを操作するスクリプトの1つが発生します。 いずれにせよ、開始攻撃の指標は、Webサーバーのログの異常に急速な成長を果たします。
    HTTP-Flood Controlメソッドには、攻撃の影響を少なくするため、およびさまざまな技術を使用してDOS-BOTSをスクリーニングするために、Webサーバーとデータベースを設定することがあります。

    まず、データベースへの最大接続数を同時に増やす必要があります。
    第二に、Apache Webサーバーに簡単で生産的なNGINXをインストールするには、リクエストをキャッシュして静的にします。 これは「必須の」リストからの解決策です。これはDOS攻撃の影響を減らすだけでなく、サーバーが巨大な負荷に耐えることができます。
    例えば:

    nano /etc/nginx/nginx.conf。
    #使用されるファイルの最大数を増やします
    worker_rlimit_nofile 8192;
    ##ワークフローの数、コアの数を入れることをお勧めします
    worker_processes 1;
    #生産性の向上につながるGetTimeOfDayシステムコール()の数を減らす
    timer_resolution 100ms
    #ディレクティブは、-20から20のワークフローの優先順位を設定します(負の数はより高い優先順位を意味します)。
    worker_priority -5;

    イベント(
    #接続数を増やします
    worker_connections 2048。
    #複合処理に効果的なePoll法を使用してください
    epollを使う
    }
    HTTP(
    #sendfile()を有効にします。 sendFile()を使用するシステムコールを保存し、データコピー数を減らす
    sendfile on;
    output_buffers 2 64k;

    gzip on;
    gzip_min_length 1100;
    gzip_buffers 64 8k。
    gzip_comp_level 3;
    gzip_http_version 1.1;
    gzip_proxied any;
    gzip_typesテキスト/プレーンアプリケーション/ XMLアプリケーション/ X-JavaScriptテキスト/ CSS;
    #キープアライブ接続の閉鎖上のタイムアウトをオフにする
    KeepAlive_Timeout 0;
    #応答ヘッダーにnginxのバージョンを与えないでください
    server_tokens off;
    #時代をドロップします
    reset_timedout_connection on;
    ディレクティブは、セッションの状態が格納されているゾーンを記述します。 セッション値は指定された変数によって決まります。
    LIMIT_REQ_ZONE $ BINARY_REMOTE_ADDR ZOON \u003d 1:10Mレート\u003d 1R / S。

    サーバー(
    デフォルトを聞いてください。
    server_name localhost;

    access_log /var/log/nginx/localhost.access.log;

    場所/(
    ルート/ var / www /;
    index index.html index.htm index.php;
    open_file_cache max \u003d 1024 inactive \u003d 600s;
    Open_File_Cache_Valid 2000S;
    Open_file_cache_min_uses 1;
    Open_File_Cache_Errors ON
    }
    場所〜\\ .php $(
    limit_req zone \u003d 1バースト\u003d 5。
    fastcgi_pass unix://tmp/php5-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param script_filename / var / www $ fastcgi_script_name;
    fastcgi_paramsを含めます。
    FASTCGI_HIDE_HEADER「キャッシュコントロール」;
    }
    場所〜/ ht(
    すべてを否定する。
    }
    最大限の期限切れ #注意! この文字列は期限切れになります。
    ADD_HEADER最終修正$ $ SENT_HTTP_EXPIRES;
    }


    必要に応じて、NGNXモジュールNGX_HTTP_LIMIT_REQ_MODULEを使用できます。これにより、あるアドレスからの同時接続数が制限されます。 リソース集約型のスクリプトは、遅延を使用してボットから保護できます。ボタン「クリック」、クッキーやその他のテクニックを作成することができます。

    システム上のDDOS-STORMの崩壊中に絶望的な立場に入らないようにするためには、そのような状況に徹底的に準備する必要があります。

    1.外部ネットワークに直接アクセスできるサーバーは、シンプルで生のリモートの再起動のために準備する必要があります(SSHDはロシアの民主主義の父親を救う)。 大きな利点は、メインチャネルのスタビングバードの場合にサーバーにアクセスできる2番目の管理上、ネットワークインタフェースが存在します。
    2.サーバーで使用されているソフトウェア(ソフトウェア)は常に最新のものです。 すべての穴は検査され、更新はインストールされています(ところで、多くの人が続かない単純なアドバイス)。 DOS攻撃からサービスの事業バグを保護します。
    3.管理用途向けのすべてのリスニングネットワークサービスは、それらにアクセスできないすべての人からファイアウォールによって非表示にする必要があります。 それから攻撃者はDoS攻撃やgrutforsのためにそれらを使うことができません。
    4.サーバー(最寄りのルータ)へのアプローチで、トラフィック分析システムをインストールする必要があります(ヘルプのためにNetFlow)、これにより、開始攻撃について学び、時間内に防止するための対策を講じることができます。

    10秒でサンプルを繰り返します

    保存して適用:

    sudo sysctl -p。

    このトピックに示されているすべてのテクニックは、機械のリソースを使うつもりのあるDDOS攻撃の有効性を低下させることを目的としています。
    洪水から、運河のゴミを獲得することは、それ自身を守ることはほとんど不可能であり、そして唯一の適切なことは、「意味の攻撃を奪う」ということは必ずしも実行可能な方法ではありません。
    あなたがあなたの処分で本当に広いチャンネルを持っているなら、それは簡単に小さなボットネットのトラフィックを見逃すでしょう、そしてそれから90%の攻撃からサーバーが保護されていると考える。 保護するためのより洗練された方法があります。
    それは分散コンピューティングネットワークの構成に基づいており、それは異なるメインチャネルに接続されている多くの複製サーバを含む。
    電源またはチャネル帯域幅を計算するとき、すべての新しいクライアントは別のサーバー(またはラウンドロビンの原則のサーバー上で徐々に "Smear" "にリダイレクトされます。
    これは非常に高価であり、非常に永続的な構造で、ほとんど非現実的です。
    もう一つの有効な決定は、高価なシスコのトラフィック異常検出器とCisco Guardを購入することです。
    バンドルで作業すると、開始攻撃を抑制することができますが、学習と分析条件に基づく他のほとんどのソリューションと同様に、故障です。
    したがって、このような保護に何万ドルのドルをノックアウトするかどうかを考えるべきです。

    「検閲されました。それは何をすべきか?」

    主なものはパニックではありません。 ボットの攻撃の即時の始まり「加熱」された」、攻撃された機械へのパケットの流れを徐々に増加させる。 瞬間を捉えて積極的な行動を開始することが重要です。 これは、外部ネットワークに接続されているルータのこの恒久的な監視(NetFlow Graph Analysis)に役立ちます。 サーバー被害者では、適切な手段による攻撃の開始を決定することが可能です。

    SYN-Floodの存在は簡単に設定されます - 「ハーフオープン」TCP接続の数をカウントすることによって。

    値、平均より数倍高い、考えるために根拠を与えます。 次に、接続要求が実行されるIPアドレスのリストを表示します。

    eth1インターフェースが存在することを確認してください。 簡単にチェックしてください - ifconfig。 その場合あなたは置き換えます。

    インジケータは、1つのポート/サービス(Webサーバーのルートまたは特定のCGIスクリプトなど)を目的としたさまざまなIPSからのパケットの単調な(そして有用な情報を含まない)ストリームです。
    最後に、IPアドレスを削除し始めて決定しました(ルータで実行するとはるかに効果があります)。

    これにより、プロバイダ/ホストに連絡するために使用する必要があります(ログ、カーネル、ファイアウォール、およびIPのリストに添付されているログサーバーログを使用して、頻繁に送信元IPアドレスが設定されています)いくつかのオッズが表示されます。識別されたアドレス。
    それらのほとんどは、もちろん、このメッセージを無視する(そして、トラフィックの支払いを持つホスティングも幸せになるでしょう - DOS攻撃は彼らの利益をもたらす)または単にサーバーの電源を切ってください。 しかしいずれにせよ、それは必ずしも行われるべきです - DDOに対する効果的な保護はトランクチャンネルでのみ可能です。 一人で、あなたはサーバーリソースの枯渇を目的とした小さな攻撃に対処しますが、より多くの深刻なDDOS "OHMの前に無防備になるでしょう。

    ここからすべてをコピーしてconfigに挿入する必要はありません。 最初にチェックし、パラメータはすでに定義されており、再定義する価値があります。 例えば

    cat /etc/sysctl.conf | grep net.ipv6.conf.lo.disable_ipv6

    1つのサーバーを送信します。フロントエンド(Nginx、Iptables、NaxSi \\ Moduction、Fail2Banなど)とバックエンド(保護Webアプリケーション)のロールを実行します。 この記事では、フロントエンドサーバによる悪意のあるトラフィックフィルタリングの実質的に例を説明する。

    OSを最適化する

    最初のことは、重い負荷のためにフロントエンドサーバー上のOSを最適化しています。 /etc/sysctl.confファイルを編集します。

    ## RAMの最適化
    kernel.shmmax \u003d xxx.
    kernel.shmall \u003d xxx.

    ##メッセージ出力サブシステムの最適化
    kernel.msgmnb \u003d 65536。
    kernel.msgmax \u003d 65536。

    ##スワップでの作業の最適化
    vm.swappiness \u003d 10。
    vm.dirty_ratio \u003d 40。
    vm.dirty_background_ratio \u003d 5。

    ##ファイルを使用して作業のサブシステムの最適化(「Open Files Fixは多すぎる」)
    fs.file-max \u003d 2097152

    ネットワークサブシステムの最適化
    net.ipv4.ip_forward \u003d 1。
    Net.CORE.SOMAXCONNN \u003d 65535
    net.netfilter.nf_conntrack_max \u003d 10000000。
    net.netfilter.nf_conntrack_tcp_loose \u003d 0。
    net.netfilter.nf_conntrack_tcp_timeout_established \u003d 1800。
    net.netfilter.nf_conntrack_tcp_timeout_close \u003d 10。
    net.netfilter.nf_conntrack_tcp_timeout_close_wait \u003d 10。
    net.netfilter.nf_conntrack_tcp_timeout_fin_wait \u003d 20。
    net.netfilter.nf_conntrack_tcp_timeout_last_ack \u003d 20。
    net.netfilter.nf_conntrack_tcp_timeout_syn_recv \u003d 20。
    net.netfilter.nf_conntrack_tcp_timeout_syn_sent \u003d 20。
    net.netfilter.nf_conntrack_tcp_timeout_time_wait \u003d 10。
    net.ipv4.tcp_congestion_control \u003dハイブラ
    net.ipv4.tcp_slow_start_after_idle \u003d 0。
    net.ipv4.ip_local_port_range \u003d 1024 65000
    net.ipv4.ip_no_pmtu_disc \u003d 1。
    net.ipv4.route.flush \u003d 1。
    net.ipv4.route.max_size \u003d 8048576。
    net.ipv4.icmp_echo_ignore_broadcasts \u003d 1。
    net.ipv4.icmp_ignore_bogus_error_responses \u003d 1。
    Net.ipv4.tcp_mem \u003d 65536 131072 262144
    Net.ipv4.udp_mem \u003d 65536 131072 262144
    Net.ipv4.tcp_rmem \u003d 4096 87380 33554432
    net.ipv4.udp_rmem_min \u003d 16384。
    Net.ipv4.tcp_wmem \u003d 4096 87380 33554432
    net.ipv4.udp_wmem_min \u003d 16384。
    net.ipv4.tcp_max_tw_buckets \u003d 1440000。
    net.ipv4.tcp_tw_recycle \u003d 0。
    net.ipv4.tcp_tw_reuse \u003d 1。
    net.ipv4.tcp_max_orphans \u003d 400000
    net.ipv4.tcp_window_scaling \u003d 1。
    net.ipv4.tcp_rfc1337 \u003d 1。
    net.ipv4.tcp_syncookies \u003d 1。
    net.ipv4.tcp_synack_retries \u003d 1。
    net.ipv4.tcp_syn_retries \u003d 2。
    net.ipv4.tcp_max_syn_backlog \u003d 16384。
    net.ipv4.tcp_timestamps \u003d 1。
    net.ipv4.tcp_sack \u003d 1。
    net.ipv4.tcp_fack \u003d 1。
    net.ipv4.tcp_ecn \u003d 2。
    net.ipv4.tcp_fin_timeout \u003d 10。
    net.ipv4.tcp_keepalive_time \u003d 600。
    net.ipv4.tcp_keepalive_intvl \u003d 60。
    net.ipv4.tcp_keepalive_probes \u003d 10。
    net.ipv4.tcp_no_metrics_save \u003d 1。
    net.ipv4.conf.all.accept_redirects \u003d 0。
    net.ipv4.conf.all.send_redrects \u003d 0。
    net.ipv4.conf.all.accept_source_route \u003d 0。
    net.ipv4.conf.all.rp_filter \u003d 1。

    kernel.shmmaxおよびkernel.shmallパラメータの値は、RAMのボリュームに基づいて計算されます。 カウントするには、スクリプトを使用できます。

    #!/ bin / bash#単純なshmsetupスクリプトPage_Size \u003d `getconf page_size` phys_pages \u003d` getconf _phys_pages `shmall \u003d` expr $ phys_pages / 2 'shmmax \u003d `expr $ shmall \\ * $ page_size`エコーkernel.shmmax \u003d $ shmmaxエコーkernel.shmall \u003d $ Shmall.

    これらのパラメータは、高負荷のためのシステムの動作を最適化します。 変更の適用は、 "systl -p"コマンドまたは再起動システムによって行われます。

    2.Iptables。

    iptablesを使用してネットワーク\\トランスポートレベルで攻撃をフィルタリングします。

    ##無効なパッケージをブロックする
    iptables -a入力-i eth0 -m conntrack - utstate無効-Jドロップ
    ## Synフラグを持たない新しいパッケージをブロックする
    iptables -a入力-i eth0 -p tcp! --syn -m conntrack - cctstate new -j prod.
    ※非標準のMSS値をブロックする
    iptables -a入力-i eth0 -p tcp -m conntrack - uctState新しい-m TCPMS! --mss 536:65535-Jドロップ
    断片化パッケージをブロックする
    iptables -a入力-i eth0 -f -jドロップ
    【数2】誤ったTCPフラグを持つパッケージをブロックする
    iptables -a入力-i eth0 -p tcp --tcp-flags fin、syn、RST、PSH、ACK、urgなし-Jドロップ
    iptables -a入力-i eth0 -p tcp --tcp-flags fin、syn fin、syn -j drop
    iptables -a入力-i eth0 -p tcp --tcp-flags syn、RST SYN、RST-Jドロップ
    iptables -a入力-i eth0 -p tcp --tcp-flags syn、FIN SYN、fin -j drop
    iptables -a入力-i eth0 -p tcp --tcp-flags fin、RST FIN、RST-Jドロップ
    iptables -a入力-i eth0 -p tcp --tcp-flags fin、ack fin -j drop
    iptables -a入力-i eth0 -p tcp --tcp-flags ack、urg urg -j drop
    iptables -a入力-i eth0 -p tcp --tcp-flags ack、fin fin -j drop
    iptables -a入力-i eth0 -p tcp --tcp-flags ack、psh psh -j drop
    iptables -a入力-i eth0 -p tcp --tcp-flagsすべてのすべての-j drop
    iptables -a入力-i eth0 -p tcp --tcp-flags allなし-j drop
    iptables -a入力-i eth0 -p tcp --tcp-flagsすべてのFIN、PSH、urg -j drop
    iptables -a入力-i eth0 -p tcp --tcp-flagsすべてのsyn、fin、psh、urg -j drop
    iptables -a入力-i eth0 -p tcp --tcp-flagsすべてのSYN、RST、ACK、FIN、urg -j drop
    ##ショッピングポート
    iptables -nポートスキャン
    iptables -aポートスキャン-p tcp --tcp-flags syn、ACK、FIN、RST RST -M LIMIT --LIMIT 1 / S --LIMIT-BURST 2 -J RETURN
    iptablesaポートスキャン-Jドロップ

    Webサーバーとの接続数を制限します。

    iptables -a入力-i eth0 -o eth1 -p tcp - syn -m multiport --dports 80,443 -m connlimit --connlimit - 30 - connlimit-mask 32 -j drop
    iptables -a入力-i eth0 -o eth1 -p tcp -m multiport --dports 80,443 -j

    規則は、外部アドレスごとに1秒あたり最大30秒まで設定されたセッション数を制限します。 Webアプリケーションの種類に応じて、値は個別に選択されます。 原則として、上記のConnlimit-上の30の値が十分になります。

    3. Nginx.

    3.1ブロック冗長魅力

    サーバーへの過剰なアクセスを制限するように、フロントエンドサーバー上のNGINXを設定します。 vhostファイルを編集します。

    #ナノ/ etc / nginx / sit-enabled / frontend

    LIMIT_REQ_ZONE $ BINARY_REMOTE_ADDRZONE \u003dサイト:10Mレート\u003d 10R / S。
    サーバー(
    リスン80;
    server_nameサイト。
    ...
    }
    場所/(
    proxy_pass ...
    ...
    LIMIT_REQ ZONE \u003dサイトBURST \u003d 20;
    limit_req_log_levelエラー;
    limit_req_status 503;
    ...
    }

    したがって、NGINXは、バックエンドサーバへの顧客アクセスを毎秒10秒あたり10回以上続きます(パラメータレート)。 上訴の「プール」が解放されるにつれて、余分な控訴はキューとプロキシに蓄積されます。 上訴の数が値20(Burst Parameter)を超える場合、フロントエンド上のNginxはプールが解放され始めるまで503エラーを与え始めます。

    3.2疑わしいユーザーをブロックします

    UserRagentsをブロックします。これは、ルールとして、正当なユーザーを使用しないでください。

    #nano /etc/nginx/nginx.conf。

    地図$ http_user_agent $ bad_useragent(
    / etc / nginx / bad_useragentsを含めます。
    }

    #ナノ/ etc / nginx / bad_useragents

    〜* NMAP 1;
    〜* nikto1 1;
    〜* wikto 1;
    〜* SF 1;
    〜* SQLMAP 1;
    〜* BSQLBF 1;
    〜* acunetix 1;
    〜* havij 1;
    〜* AppScan 1;
    〜* wpscan 1;
    ~MJ12BOT 1〜* MJ12BOT;
    〜* apachebench 1;
    〜* WordPress 1;
    〜* Dirbuster 1;
    〜* Perl 1;
    〜* phpstorm 1;
    〜* Python 1;
    〜* W3AF 1;
    〜*何があるのか
    〜* Arachni 1;
    〜* Xspider 1;
    ~Hydra 1。
    ~verasion 1;
    〜* openvas 1;
    ~Visionatils 1;
    〜*シナプス1;
    〜* http_request2 1;
    〜* guzzettp 1;
    〜*パロス1;
    〜*シナプス1;
    〜* Python-urllib 1;

    別々に、ユーザーエージェントの「WordPress」に注意を払う価値があります。 保護されたWebアプリケーションがCMS WordPressを使用しない、または「トラックバック」および「Ping-Back」機能が使用されていない場合(最も可能性が高い)、ユーザーエージェントへの要求をブロックすると攻撃をブロックすることができます。 WordPressのそのような機能の実装の機能を使用します。 そのような攻撃の機能を研究することはできます。

    そのような単純な規則の実施は、最小限のコストでウェブサイトのDDOS - 攻撃に対する高品質の保護を確実にするでしょう。

    P.: 他のフロントエンドサーバーサービスが十分に保護されていることを確認し、攻撃者がリモートアクセスを取得できません(たとえば、SSHまたはFTPなど)。

    UPD: あるいは、Nemesida WAFをフリー - 完全に無料で試すことができます。ダイナミックNGINXモジュールの形式で表示され、リポジトリからインストールされ更新されている、コンパイルを必要とせず、すでにインストールされているNginxに数分で接続します。 WAF.PENESTIT.RU/ABOUT / 2511

    あなたはこのように座ることができます、あなたは誰にも触れないでください、そしてあなたはサービスがゆっくりと働くと言う、2~3分間開いているサイトは504のエラーを生み出すことができます。
    キャッチで動揺して、そしてあります:

    以下は、何が起こったのか理解するのに役立つコマンドであり、正確にDDOです。

    まず、この記事を詳細に読むことをお勧めします。この記事は、トップコマンドの出力とPSチームの使い方の読み方に興味があるのを説明しました。 それらのすべてが私たちが攻撃を受けたホストとサーバー上にどのボトルネックがあるかを理解するために私たちに役立ちます。

    どんなチーム、そして何を決定することができますか?

    起動するには、実行中のApacheプロセスの数を確認できます。 20-30を超えると20-30を超えると、何かがそうではありません。

    DebianのApacheプロセスの数を調べます。

    PS AUX | grep Apache | WC -L。

    CentOSのApacheプロセスの数を調べます。

    PS AUX | grep httpd | WC -L。

    このコマンドは、サーバーへの接続数を見ることができます。

    CAT / PROC / NET / IP_CONNTRACK | WC -L。

    サーバーがサーバーにやってくる標識は、80または443ポートの接続数として機能します。 この番号を示すことができるチームは次のとおりです。

    NetStat -na.. grep:80 | WC -L NetStat -na... grep:443 | WC -L。

    SYNと同じようなさまざまなDDODがあります。 以下は、同じ80および443ポートのSYNリクエストの数を決定できるようにするコマンドです。

    NetStat -na.. grep:80 | grep syn | sort -u | その他のNetStat -na.. grep:443 | grep syn | sort -u | もっと

    そしてこのコマンドはSYN要求の数を示します。

    netstat -n -t | grep syn_recv | WC -L。

    次のコマンドは、どのドメインがすべての要求のほとんどのものであるかを理解することを可能にします。

    tcpdump -npi eth0 portドメイン

    それでは、各IPからの要求数がいくつか見てみましょう。 このコマンドはすべてのポートを表示します。

    netstat -ntu | awk "(印刷$ 5)" | .. CUT-D:-F1 | ソート| UNIQ -C | sort -nr | もっと

    同様のコマンド

    NetStat -Anp | grep "TCP \\ | udp" | | awk "(印刷$ 5)" | .. CUT-D:-F1 | ソート| UNIQ -C | sort -n netstat -antu | .. AWK "$ 5~ /:/(分割($ 5、a、": "); IPS [A] ++)終了(IPの場合(IPの場合)印刷IPS、IP |「sort -k1 -nr」)」

    このコマンドは、80ポートにのみ要求の数を表示します。

    netstat -ntu | grep ":80 \\" | awk "(印刷$ 5)" | .. CUT-D:-F1 | ソート| UNIQ -C | sort -nr | もっと

    このコマンドは、それらをカウントしていない80ポートのすべての要求を示しています。 「単純化された」が「最も完全な」出力オプション:

    NetStat -na.. grep:80 | ソート| UNIQ -C | sort -nr | もっと

    最もアクティブなIPを計算すると、どのポートがITリクエストから行くかを調べることができます。 ここでは、IP 127.0.0.1が置き換えられています。

    NetStat -na.. grep 127.0.0.1

    ちなみに、Apacheのserver-statusによって設定されていない場合、このサーバーのステータスはCLIで表示できます。

    Apachectlのステータス。

    ログファイル

    Global Apacheログ、Debianは通常あります。

    • /var/log/apache2/error.log。
    • /var/log/apache2/access.log。
    • /var/log/httpd/error.log。
    • /var/log/httpd/access.log。

    グローバルなNGINXログがあります。

    /var/log/nginx/error.log。
    /var/log/nginx/access.log。

    また、ホストが設定されている場合は、仮想ホストのログを表示することを忘れないでください。 私たちはその前に「成長する」という最大のログに興味があります。

    これらのログを検索する必要があります。これらのログは、ユーザーエージェントのない(または同じ)、同じIPからの要求、仮想ホストなどを指定せずに要求する要求など、同じ種類の要求が必要です。

    サイトへの要求の数で特定のIPを識別するには、次のコマンドができます。

    cat access.log | .. awk "(印刷$ 1)" | .. ソート| UNIQ -C。

    ログトップユーティリティを使用してIPグループ化の要求に統計を取得することもできます。

    まず最初にこのユーティリティをインストールします。

    apt-get git git git git libncurses5-dev uthash-dev gcc#正しい操作のためのパッケージを持っていない場合はgit git git https://github.com/julienpalard/logtop.git

    そして今、統計を取得します。

    alet -f access.log | .. awk( "1ドル; fflush();")| ログトップ。

    次のコマンドは、一般的なユーザーエージェントを識別するのに役立ちます。

    cat access.log | .. awk -f \\ "(印刷$ 6)" |並べ替え| -nを並べ替える

    ブロックする方法

    とにかく、あなたはiptablesを立てる必要があります。 特にあなたがそれが何であるかわからない場合、それは構成されない可能性があります。 以前、私はすでにそれを使用する方法についての記事を書いています。 ""では、ここで問題を解決するために必要なコマンドしか与えません。

    これが可能な限りです 特定のIPから80ポートのTCP要求をブロックする:

    iptables -a入力-p tcp --dport 80-s 12.34.56.78 -j drop

    それは私たちの方法です 特定のIPからのすべてのポートのブロッククエリ:

    iptables -s 12.34.56.78 -Jドロップ

    ビューリストはすでにブロックされています 私たちはこれらのチームを与えることができます:

    iptables -l -n

    iptables -l -n -line-numbers.

    必要な場合 特定のIPをブロックすることから削除します、このコマンドを使用できます

    iptables -d input -s 1.2.3.4 -j drop

    またはそれは可能です ルールをその数で削除します彼のiptablesを確認した後、-l -n-nloge-numbersコマンド:

    iptables -d入力6

    すべてのルールを削除するには、チームを使用することができます。

    iptables -f。

    DDosから保護するために、いくつかの防止...

    思慮深いボットから私たちを保護することができるより多くの規則があります。

    次のコマンドをインストールします 80ポートの1つのIPからの最大接続数:

    iptables -a入力-p tcp --dport 80 -m connlimit --connlimit - 128 -Jドロップiptables -a入力-p tcp --dport 80 -j accept

    同じ あなたは私を作ることができます。 dNSの場合。:

    iptables -a入力-p udp --dport 53 -m connlimit --connlimit上16-j drop iptables -a入力-p udp --dport 53 -j accept

    iptablesの次の規則は、ヒントを私たちの名前から防止します。 ルールとして、DDOの間に、開いていない接続でインストールされたSYNとACKフラグを持つパッケージを取得します(このフラグの組み合わせはSYNパッケージに対する答えだけです)。 これは、誰かが私たちの名前から別のSYNホストホストを送信しましたが、答えが私たちにやって来ました。
    この規則によると、私たちのホストはRSTパッケージで応答し、攻撃したホストを受信した後に接続を閉じます。

    iptables -i入力-m conntrack - cctState new、無効 - p tcp --tcp-flags syn、ack syn、ack -j reject - Reject - Reject-Rected-Rected-Reture

    iptables-save\u003e /etc/iptables.rules.

    他に何ができますか?

    カーネルの「常時」のビットが妨げられない場合は、ApacheとNginx(価値がある場合)の細かい設定を行い、FAIL2BAN、MOD_EVASIVE、MODSECURITYなどの攻撃から保護するために追加のモジュールとパッケージを置きます。

    しかし、これらすべてはすぐに書かれる他の記事のトピックです...

    トピックを続ける:
    インターネット

    Windowsブートディスクを作成する最も一般的な方法の1つは、この記事で説明されている方法です。 そしてより正確に創造の中で、それは遠い世界で私たちを助けるでしょう...