Предотвращение спуфинга X-Forwarded-For с помощью ELB и Node

Я анализирую стек общедоступного маршрута, основанного на Elastic Load Balancer, который открывает порт, предоставляемый PM2, который запускает приложение узла с помощью модуля koa. На данный момент IP-адрес регистрируется, и это зависит исключительно от заголовка X-Forwarded-For. Если этот заголовок создается вручную с помощью curl, то приложение запишет его как IP-адрес.

Есть ли простой способ предотвратить подделку этого заголовка или настроить ELB AWS, чтобы он игнорировал вставленные вручную заголовки, или есть лучший способ, чем поддельный заголовок, для получения реального IP-адреса посетителя?


person SomeGuyOnAComputer    schedule 02.11.2017    source источник


Ответы (1)


Согласно документу :

Если запрос от клиента уже содержит заголовок X-Forwarded-For, Elastic Load Balancing добавляет IP-адрес клиента в конец значения заголовка. В этом случае последний IP-адрес в списке является IP-адресом клиента.

Таким образом, последний IP-адрес всегда является реальным IP-адресом.

person Gabriel Bleu    schedule 02.11.2017
comment
В случае компании последний IP-адрес — это поддельный IP-адрес, который возвращается при вызове ctx.request.ip коа. Это заполняется ELB AWS, который, я думаю, может устанавливать последний X-Forwarded-IP (в данном случае он подделан) в конце массива. - person SomeGuyOnAComputer; 02.11.2017
comment
Может коа обратный порядок? an array of these ips is returned, ordered from upstream -> downstream ref - person Gabriel Bleu; 02.11.2017
comment
@SomeGuyOnAComputer Это стандартное поведение X-Forwarded-for для добавления балансировщиками нагрузки и прокси. Крайний правый неизвестный (для вас) адрес — это тот, которому вы всегда хотите доверять как IP-адрес клиента, а все, что находится слева от него, следует считать информационным (т. , но могут быть подделаны). - person Michael - sqlbot; 02.11.2017
comment
Это немного сбивает с толку, не так ли? Если запрос не содержит заголовка XFF = реальный IP-адрес клиента является первой записью (крайняя слева; есть IP-адреса ELB, CF, ...); Если запрос содержит заголовок XFF = реальный IP-адрес клиента является последней записью (самая правая). Это правда? - person Zdeněk; 11.03.2018
comment
Для X-Forwarded-For не существует универсального согласованного стандарта, nginx делает противоположное ELB. См.: github.com/koajs/koa/issues/1094#issuecomment-345861282 - person Ming; 15.01.2019
comment
Похоже, что этот текст был удален из текущей версии документов ELB. - person Eric; 06.01.2021