X-Forwarded-Forヘッダーによるnginxレート制限


23

私はnginxのHttpLimitReqModuleを使用してレート制限を検討しています。ただし、リクエストはすべて同じIP(ロードバランサー)から送信され、ヘッダーに実際のIPアドレスが含まれます。

X-Forwarded-ForソースのIPではなくヘッダーのIPに基づいてnginxレート制限を設定する方法はありますか?

回答:


28

はい、典型的なレート制限構成定義文字列は次のようになります。

 limit_req_zone  $binary_remote_addr zone=zone:16m rate=1r/s;

どこ$binary_remote_addrリミッタの一意のキーです。ヘッダー$http_x_forwarded_forの値を取得する変数に変更してみてくださいX-Forwarded-For。ただし、$binary_remote_addrIPアドレスの保存に圧縮バイナリ形式を使用しているため、メモリ消費量が増加しますが、そうで$http_x_forwarded_forはありません。

 limit_req_zone  $http_x_forwarded_for zone=zone:16m rate=1r/s;

私は同じ結論に達しましたが、簡単なテストではうまくいきました。メモリ使用量の増加を指摘してくれてありがとう。
ジョンブロディ

2
これには深刻なセキュリティ上の懸念があるかもしれないことに注意してください:blog.ircmaxell.com/2012/11/anatomy-of-attack-how-i-hacked.html
ircmaxell

symfonyに関するそのブログ投稿の情報は、次のアドレスであったことに注意してください。symfony.com
doc

5
realipモジュールを使用すると、$binary_remote_addr変数が正しく設定されます。
チェンクアルティ

5

このlimit_req_zoneディレクティブは、リクエストのグループ化のキーとして使用される変数を定義します。
通常は、サイズが小さくスペースを節約するためと$binary_remote_addrいうよりは、が使用され$remote_addrます。

代わりにRealipModuleを使用することもできます。
これにより、リモートアドレス変数がカスタムヘッダーで指定されたアドレスに書き換えられ、ロギングやその他の変数の使用が簡単になります。


1
RealIPモジュールの場合は+1。このモジュールを使用して、する場合$binary_remote_addr$remote_addr一般的に、あなたの構成されたヘッダの値に設定されているX-Forwarded-For-あなたの標準変数は今、「本当のクライアントのIPアドレス」ですので。実行nginx -Vして、NGINXがでビルドされて--with-http_realipいるかどうかを確認します。configは次のように簡単です set_real_ip_from 10.0.0.0/8; real_ip_header X-Forwarded-For; 。CIDRの範囲は、X-Forwarder-Forヘッダーを設定しているアップストリームロードバランサーの範囲です。
マークシーバー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.