Apache でレート制限を実装するにはどうすればよいですか?(1 秒あたりのリクエスト数)

StackOverflow https://stackoverflow.com/questions/131681

  •  02-07-2019
  •  | 
  •  

質問

Apache で堅牢なレート制限 (リクエスト|バイト/IP/単位時間) を実装するために利用できる技術やモジュールは何ですか?

役に立ちましたか?

解決

最高の

  • mod_evasive (DoS エクスポージャの削減に重点を置いています)
  • mod_cband (「通常の」帯域幅制御に最適な機能)

そして残りは

他のヒント

に記載されているように、 このブログ 投稿は使えそうです mod_security 1 秒あたりのレート制限を実装します。

構成は次のようなものです。

SecRuleEngine On

<LocationMatch "^/somepath">
  SecAction initcol:ip=%{REMOTE_ADDR},pass,nolog
  SecAction "phase:5,deprecatevar:ip.somepathcounter=1/1,pass,nolog"
  SecRule IP:SOMEPATHCOUNTER "@gt 60" "phase:2,pause:300,deny,status:509,setenv:RATELIMITED,skip:1,nolog"
  SecAction "phase:2,pass,setvar:ip.somepathcounter=+1,nolog"
  Header always set Retry-After "10" env=RATELIMITED
</LocationMatch>

ErrorDocument 509 "Rate Limit Exceeded"

Web アプリケーション ファイアウォールなどの方法は多数ありますが、Apache MOD を使用する場合が最も簡単に実装できます。

私がお勧めしたいMODの1つは、 mod_qos. 。これは、特定の DOS、ブルートフォース、および Slowloris タイプの攻撃に対して非常に効果的な無料モジュールです。これにより、サーバーの負荷がかなり軽減されます。

とても強力です.

現在のリリースでは、 mod_qos モジュールは、以下を管理するための制御メカニズムを実装します。

  • ロケーション/リソース(URL)または仮想ホストへの同時リクエストの最大数。

  • URLに対する最大許可されたリクエスト数などの帯域幅の制限、またはダウンロードされたKBYTESあたりの最大/最小値。

  • 1秒あたりのリクエストイベントの数を制限します(特別リクエスト条件)。

  • 定義された期間内のリクエスト イベントの数を制限します。
  • また、制限が少ない場合もある場合もあれば、Webサーバーにアクセスする可能性のある非常に重要な人(VIP)を検出することもできます。
  • 不正な操作を拒否する汎用要求ラインとヘッダーフィルター。

  • リクエスト本文データの制限とフィルタリング (mod_parp が必要)。

  • 個々のクライアント (IP) のリクエスト イベントの数を制限します。

  • TCP接続レベルの制限、たとえば、単一のIPソースアドレスまたは動的なキープアリブ制御からの許可された接続の最大数。

  • サーバーが無料のTCP接続を実行した場合、既知のIPアドレスを好みます。

これは、それを使用できるサンプル構成です。ニーズに合わせて何百もの構成が可能です。コントロールの詳細については、サイトをご覧ください。

Sample configuration:
# minimum request rate (bytes/sec at request reading):
QS_SrvRequestRate                                 120

# limits the connections for this virtual host:
QS_SrvMaxConn                                     800

# allows keep-alive support till the server reaches 600 connections:
QS_SrvMaxConnClose                                600

# allows max 50 connections from a single ip address:
QS_SrvMaxConnPerIP                                 50

# disables connection restrictions for certain clients:
QS_SrvMaxConnExcludeIP                    172.18.3.32
QS_SrvMaxConnExcludeIP                    192.168.10.

http://opensource.adnovum.ch/mod_qos/

Apache 2.4 には、と呼ばれる新しいストック モジュールがあります。 mod_ratelimit. 。モデム速度をエミュレートするには、次を使用できます。 mod_ダイヤルアップ. 。ただし、なぜすべてに mod_ratelimit を使用できないのかはわかりません。

悲しいことに、 mod_evasive 非プリフォーク構成で使用すると期待どおりに動作しません (最近の Apache セットアップは主に MPM です)

もう 1 つのオプション - mod_qos

設定は簡単ではありませんが、強力です。

http://opensource.adnovum.ch/mod_qos/

レート制限を行う理由によって異なります。

サーバーの過負荷を防ぐためであれば、NGINX をその前に置き、設定するのが実際には理にかなっています。 レート制限 そこには。NGINX が使用するリソースははるかに少なく、1 万接続あたり数 MB 程度であるため、これは当然のことです。そのため、サーバーがフラッディングした場合、NGINX は (わずかな量のリソースを使用して) レート制限を行い、許可されたトラフィックのみを Apache に渡します。

シンプルさだけを求めている場合は、mod_evasive などを使用してください。

いつものように、DDoS または DoS 攻撃から保護する場合は、レート制限もある Cloudflare のようなサービスを使用してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top