例としてWordPressを使用してNginxまたはHAProxyを使用したログインフォームでのパスワード試行回数の制限

HTTPリクエストの数をパスワードフォームに制限することでセキュリティを強化する方法であるWordPressの例を見てみましょう。 これにより、公開されたブログが総当たり攻撃から保護されます(特定の文字セットから理論的に可能なすべてのオプションを選別するか、辞書の共通パスワードを照合することでパスワードを検索およびクラッキングします)。 この方法は、原則として、他のWebアプリケーションを保護するために使用できます。



タスクは、ApacheまたはFastCGI Webサーバーのフロントエンドとして機能するngx_http_limit_req_module [ 1 ]モジュールを使用して、またはWebサーバーの前でロードバランサーとして機能するHAProxy [ 2、3 ]を使用してNginxに実装できます。



どちらの場合も、アルゴリズムは次のとおりです。 認証中、ブラウザはサブストリング「/wp-login.php」を含むアドレスにアクセスします。 それを追跡し、他のすべてのアドレスへの呼び出しに影響を与えずに、1つのIPからの要求の数を制限する必要があります。 ブロッキングパラメータは、通常のユーザーに不便をもたらさないように選択する必要があります。 1つのIPアドレスからの多数のユーザーが認証フォームを使用する場合は、特にブロッキングを構成する必要があります。



メソッド番号1:Nginx



構成ファイルは、コメントのヒントに従って修正されます。 VBartJ_o_k_e_Rに感謝します!



http { <...> limit_req_zone $binary_remote_addr zone=login:10m rate=15r/m; server { listen 80; server_name frontend.example.org; location ~* /wp-login.php { limit_req zone=login burst=4; proxy_pass http://backend:8080; <...> } location / { proxy_pass http://backend:8080; <...> } }
      
      





ブロックオプション:



limit_req_zone $ binary_remote_addr zone = login:10m rate = 15r / m; さまざまなIPアドレスの状態を保存する共有メモリゾーンのパラメーターを設定します。 この場合、状態は10メガバイトのサイズの「ログイン」ゾーンに保存され、このゾーンの平均リクエスト処理速度は1分あたり15リクエストを超えることはできません。 処理速度は、1秒あたりのリクエスト数(r / s)または1分あたりのリクエスト数(r / m)で設定できます。



limit_req zone =ログインバースト= 4; ログインゾーンとリクエストの最大バーストサイズ(バースト)を設定します。 要求の受信速度がゾーンに記述されている速度を超える場合、要求が所定の速度で処理されるように処理が遅延します。 過剰な要求は、その数が最大バーストサイズを超えるまで遅延されます。 超過した場合、要求はエラー503で終了します。



メソッド番号2:HAProxy



ブログを提供するバックエンドセクションで、次の行を追加します[ 2 ]。

 tcp-request inspect-delay 10s tcp-request content accept if HTTP # brute force protection acl wp_login path_beg -i /wp-login.php stick-table type binary len 20 size 500 store http_req_rate(20s) peers local tcp-request content track-sc2 base32+src if METH_POST wp_login stick store-request base32+src if METH_POST wp_login acl bruteforce_detection sc2_http_req_rate gt 5 acl flag_bruteforce sc1_inc_gpc0 gt 0 http-request deny if bruteforce_detection flag_bruteforce
      
      





/wp-login.phpページへのPOSTリクエストが見つかると、HTTPホストヘッダー、URLパス、ソースIPの3つの要素のハッシュが保存されます。 ハッシュによって識別されるユーザーは、20秒で5つのリクエストを行うことができます。 6番目の要求はブロックされます。



文学

  1. ngx_http_limit_req_module モジュール -nginx.org
  2. ワードプレスCMS HAProxyによるブルートフォース保護 -blog.haproxy.com
  3. HAProxyを使用したすべてのユーザーのレート制限の改善 -blog.serverfault.com



All Articles