Запросы к rails API имеют исходный IP "11.0.2.1" только в этом API - PullRequest
0 голосов
/ 03 апреля 2019

Недавно я добавил протоколирование в API-интерфейс rails, размещенный в Azure, который регистрирует идентификаторы пользователей и IP-адреса, которые Google Recaptcha v3 пометил как подозрительные (v3 присваивает запросам оценку «доверия» от 0,0 до 1,0, не показывая обычного вызова капчи). ). В конечном итоге я хотел бы использовать Recaptcha v3 для ограничения скорости подозрительных пользователей, но я заметил много помеченных запросов с одного и того же странно выглядящего 2 IP.

Я вижу запросы от множества пользователей, исходящие из 11.0.2.1 и меньшего подмножества из 11.0.0.1. Эти пользователи кажутся иначе законными. В журналах нашего стороннего провайдера идентификации я вижу, как пользователи заходят с обычных IP-адресов, соответствующих их общему расположению, но по какой-то причине наш API получает адреса 11.0.2.1.

11.0.2.1 представляется настройкой по умолчанию для некоторых программ F5 и оборудования Cisco. Так как наш Identity Provider, кажется, может получить правильный IP, я предполагаю, что у нас неправильная конфигурация или ошибка в нашем приложении rails. Однако я не могу воспроизвести эту ошибку самостоятельно и не вижу проблем с вызовом request.ip локально или на тестовой машине.

Неправильно ли я получаю IP-адреса или как-то неправильно настроен мой API?

1 Ответ

1 голос
/ 04 апреля 2019

На самом деле, чтобы получить реальный IP-адрес клиента в рельсах, вы должны использовать request.remote_ip вместо request.ip. Они разные, как показано ниже.

enter image description here

enter image description here

А страница API для класса ActionDispatch::RemoteIp показывает более подробную информацию.

Это промежуточное ПО вычисляет IP-адрес удаленного клиента, который делает запрос. Он делает это путем проверки различных заголовков, которые могут содержать адрес, а затем выбирает последний установленный адрес, которого нет в списке доверенных IP-адресов. Это следует прецеденту, установленному, например, сервер Tomcat , с аргументами, подробно объясненными @gingerlime . Более подробное объяснение алгоритма дано по адресу ActionDispatch :: RemoteIp :: GetIp # Calculate_ip .

Некоторые серверы Rack объединяют повторяющиеся заголовки, например, HTTP RFC 2616 . Некоторые серверы Rack просто отбрасывают предыдущие заголовки и сообщают только значение, которое было , указанное в последнем заголовке . Если вы используете несколько прокси-серверов (например, от NGINX до HAProxy и Unicorn), вам следует протестировать сервер Rack, чтобы убедиться, что ваши данные в порядке.

ЕСЛИ ВЫ НЕ ИСПОЛЬЗУЕТЕ ПРОКСИ, ЭТО СДЕЛАЕТ ВАС УЯЗВИМОСТЬ К IP-ОХРАНЕ Это промежуточное программное обеспечение предполагает наличие хотя бы одного прокси-сервера и установку заголовков с удаленным IP-адресом клиента. Если вы не используете прокси, потому что вы размещены на, например, Heroku без SSL, любой клиент может заявить, что имеет любой IP-адрес, установив заголовок X-Forwarded-For. Если вы заботитесь об этом, то вам нужно явно отбросить или игнорировать эти заголовки перед запуском этого промежуточного программного обеспечения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...