web-dev-qa-db-ja.com

Linode.comでノードバランサーを設定した後のIPスプーフィング攻撃エラー

最近、Rails 3.2.12アプリの前にNodeBalancerをセットアップしました。アプリはnginxとUnicornによって提供されます。

すべて正常に動作しているように見えますが、サーバーが1つしかない場合には発生しなかった、このようなエラーが多数発生します。

IP spoofing attack?!HTTP_CLIENT_IP="10.16.81.184"HTTP_X_FORWARDED_FOR="136.160.88.153, 192.168.255.5"
actionpack (3.2.12) lib/action_dispatch/middleware/remote_ip.rb:55:in `calculate_ip'

これがアプリのnginx構成です。

upstream Unicorn {
server unix:/tmp/Unicorn.ahotu-calendars.sock fail_timeout=0;
}

server {
listen 80 default deferred;
root /home/deployer/apps/appdirectory/current/public;
if (-f $document_root/system/maintenance.html) {
return 503;
}
error_page 503 @maintenance;
location @maintenance {
rewrite ^(.*)$ /system/maintenance.html last;
break;
}

location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}

try_files $uri/index.html $uri @Unicorn;
location @Unicorn {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_Host;
proxy_redirect off;
proxy_pass http://Unicorn;
}

error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}

設定ファイルで何か問題がありましたか?

ありがとうございました。

2
jlfenaux

クライアントがプロキシのヘッダーを偽造するのを防ぐには、X-Forwarded-ForClient-Ipの両方がこの種のエラーを発生させないようにする必要があります。

nginx configにClient-Ipヘッダーを設定するだけです。

ログのIPアドレスについて:

  • 192.168.255.5はおそらくNodeBalancerの内部IPです
    (Linodeライブラリの例では、通常どおり192.168.0.0/16サブネットが表示されます。これは静的である必要があります-または少なくともサブネット内に保持されます)
  • 136.160.88.153実際の知りたいリモートアドレスです
  • 10.16.81.184は他の不明なIPアドレスです-おそらく別のプロキシが以前に追加しました
    (リクエストごとに表示されますか、それとも空になることがありますか?)

申し訳ありませんが、どういうわけか(your)nginxNodeBalancerで実行されると信じるようになりました。
次のようにHttpRealIpModuleを使用します。

# trust connections from internal addresses
set_real_ip_from 192.168.0.0/16;
real_ip_header X-Forwarded-For;

または、少なくとも元のX-Forwarded-Forヘッダーをnginxの変更されたヘッダーではなくRails)に渡し、Client-Ipの設定を解除してください。 (どこから来ても):

proxy_set_header X-Forwarded-For $http_x_forwarded_for;
proxy_set_header Client-Ip "";
2
Lukas