在 Linode.com 上设置节点平衡器后出现 IP 欺骗攻击错误

在 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;
}

我在配置文件中做错了什么吗?

谢谢。

答案1

为了防止客户端伪造代理的标头,X-Forwarded-ForClient-Ip必须相等才不会引发此类错误。

只需Client-Ip在您的nginx配置:

至于您日志中的 IP 地址:

  • 192.168.255.5可能是 NodeBalancer 的内部 IP
    (Linode 库中的示例192.168.0.0/16照常显示子网;这应该是静态的 - 或者至少保持在子网内)
  • 136.160.88.153是个真实的你想知道的远程地址
  • 10.16.81.184是其他一些未知的 IP 地址 - 也许另一个代理先前添加了它
    (它是否出现在每个请求中,或者有时是空的?)

对不起,我不知怎的就相信了(你的)nginx将在节点平衡器.
使用HttpRealIpModule如下:

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

或者,至少确保将原始X-Forwarded-For标头传递给 Rails,而不是nginx修改后的,并取消设置Client-Ip(无论它来自哪里):

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

相关内容