ホームページ  >  記事  >  運用・保守  >  フラッド攻撃を防ぐために Nginx サーバーを構成する方法

フラッド攻撃を防ぐために Nginx サーバーを構成する方法

王林
王林転載
2023-05-15 18:52:06767ブラウズ

テスト

nginx の制限付きリクエスト モジュールを構成する方法と、DDoS またはその他の http ベースのサービス拒否攻撃による攻撃から Web サイトを保護する方法を簡単に説明します。

このテストでは、limit_req ディレクティブをテストするためにサンプル ページを blitz.io (現在は無料サービス) に保存し、about.html という名前を付けました。

まず、blitz に保存しました。次のコマンドを使用して、1075 の同時リクエストを開始し、1 分間継続します。応答タイムアウトは 2 分に設定され、地域はカリフォルニアで、ステータス 200 を除く他のすべての州は異常ステータスに設定されます。503 であっても失敗したと見なされます。

-p 1-1075:60 --status 200 -t 2000 -r カリフォルニア http://kbeezie.com/about.html

フラッド攻撃を防ぐために Nginx サーバーを構成する方法

悪くないですよね? しかし、これが php ドキュメントの場合は、一部のユーザーが php プロセスの 502/504 ステータスを引き起こし、サーバーがクラッシュしたり応答しなくなったりする可能性が非常に高くなります。特に、保護された vps などを使用している場合は特にそうです。安価なサーバーは故障率が高くなります。 (元の広告、ここではブロックされています)

もちろん、サーバーのパフォーマンスと応答性を向上させるためにキャッシュやその他のツールを使用することもできます。たとえば、wordpress を使用する場合は、wordpress キャッシュ プラグインを使用する必要があります。これらのタイプの場合は da制限リクエスト モジュールを使用できます。

nginx ではリージョン http { } を作成し、1 秒あたり 5 つのリクエストを設定することをブリッツと呼び、収容できる最大データ量は 10 MB です。私はこれを使用します。 $binary_remote_addr をセッション変数として指定します $remote_addr への通常の訪問者より 10MB を超えるスペースにアクセスできるようにします。

コードをコピーします。コードは次のとおりです:

limit_req_zone $binary_remote_addrzone=blitz: 10m rate=5r/s;

Ran Zhou はサーバーでこれらのルールを定義します。

コードをコピーします。コードは次のとおりです。

location = /about.html {

limit_reqzone=blitz nolay;
}

次に、nginx 設定をリロードして、効果を確認します。

フラッド攻撃を防ぐために Nginx サーバーを構成する方法

現在サーバーにアクセスできるのは 285 人だけで、1 秒あたりのリクエスト数は 4.75 で、設定した 1 秒あたり 5 回を超えていないことがわかります。ログを確認すると、アクセスされていないリクエストは http であることがわかります。 503、アクセスされるリクエストはすべて http 200 です。

このように使用します。この設定は、リージョンへのアクセスを制限する場合に役立ちます。すべての php リクエストに適用することもできます。

php リクエスト制限の適用##すべての PHP アプリケーション制限を制限したい場合は、これを行うことができます:

コードをコピーします コードは次のとおりです:

location ~ \.php {

limit_reqzone=flood;

include php_params.conf;
fastcgi_pass unix:/tmp/php5-fpm.sock;
}
# #突然の要件や遅延のない要件に対処するために、加速や減速などの設定を調整するのに役立ちます。設定項目の詳細は、ここをクリックしてください: httplimitreqmodule.
Note:

上の表は次のとおりです。 1075 件のユーザー リクエストをテストしましたが、すべてのアクセス リクエストがカリフォルニアにある同じサーバーから送信されているため、誤解を招きます。ip(50.18.0.223).

実際の高トラフィック ネットワークを実装するのは困難です。または ddos​​ (分散型サービス拒否攻撃). これが、アクセスに成功したユーザーの数が IP と同じではない理由です. 非常に大きい. サーバーの負荷は、テス​​ト ユーザーのアクセス数や地域にも影響します. 無料版では、アクセスできる同時ユーザーの最大数は 50 です。もちろん、1 日あたり 49 ドルを支払えば、1,000 人のユーザーが Web サイトにアクセスできるようにすることもできます。

十分なメモリと帯域幅があれば、非常に簡単にアクセスできます。単一の IP アドレスを使用してテストします。このツールを使用すると、高い同時実行性、ab、openload などを実現できます。これは、UI を使用せず、ターミナル インターフェイス内で実行されます。それだけです。

もちろん、テストする必要があります。 blitz は約 5 秒後にアクセス要求に応答するため、自分自身でもステータス フラグを使用することを忘れないでください。

より良い代替手段

ここでは詳細は説明しませんが、 DDoS 攻撃やマルチサービス攻撃によるサーバーへの攻撃の防止に真剣に取り組んでいる場合は、iptables (linux)、pf (bsd 用のパケット フィルター) などの優れたソフトウェア ツールが他にもあります。また、サーバーがハードウェアを提供している場合は、ハードウェア ファイアウォールを使用することもできます。上記の制限モジュールは、http リクエストによるフラッド攻撃のみを防止します。ping パケットのフラッド攻撃やその他の脆弱性は防止しません。この場合、不要なサービスや不要なポートを閉じて、他人の侵入を防ぐことができます。

たとえば、サーバーが外部ネットワークに公開するポートは http/https と ssh だけです。mysql のようなサービスの中で、ローカル接続をバインドします。また、一部の共通サービスを、一般的に使用されないポートに設定して、それらが外部ネットワークに公開されないようにすることもできます。 (この状況では iptables/pf が役に立ちます)。

以上がフラッド攻撃を防ぐために Nginx サーバーを構成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。