Назад | Перейти на главную страницу

Ошибки атаки IP-спуфинга после настройки nodebalancer на Linode.com

Недавно я установил NodeBalancer перед приложением Rails 3.2.12. Приложение обслуживается 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;
}

Я что-то не так сделал в конфигурационном файле?

Спасибо.

Чтобы клиенты не подделывали заголовки прокси, оба X-Forwarded-For и Client-Ip должны равняться, чтобы не вызывать такого рода ошибки.

Просто установите Client-Ip заголовок в вашем nginx config:

Что касается IP-адресов в вашем журнале:

  • 192.168.255.5 вероятно, это внутренний IP-адрес NodeBalancer
    (примеры в библиотеке Linode показывают 192.168.0.0/16 подсеть как обычно; это должно быть статично - или, по крайней мере, оставаться внутри подсети)
  • 136.160.88.153 это настоящий удаленный адрес, который вы хотите знать
  • 10.16.81.184 это какой-то другой, неизвестный IP-адрес - возможно, другой прокси добавил его ранее
    (появляется ли он при каждом запросе или иногда бывает пустым?)

Прости, я почему-то поверил (твоему) nginx будет работать на NodeBalancer.
Использовать 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 "";