Как узнать ip приложения heroku
Есть ли способ получить один статический адрес IP для сервера Heroku? Я пытаюсь интегрировать различные API, которые запрашивают адрес IP. Из - за настройки сервера Heroku у вас никогда не будет ни одного сервера со статическим IP-вместо этого ваш IP является динамическим.
Я изучал такие дополнения, как Proximo, однако это, по-видимому, платное решение. Есть ли решение, когда у вас есть статический IP, за который вам не нужно платить?
3 ответа
Я установил надстройку Proximo на Heroku и, добавляя команду к моей существующей команде, получаю BindException от Java. Вот как выглядит моя добавленная команда: web: bin/proximo sh target/bin/webapp , и как только я удаляю часть Proximo ( bin/proximo ), приложение запускается без ошибок. Это.
Вы можете использовать надстройку QuotaGuard Static Heroku.
QuotaGuard может быть присоединен к приложению Heroku через командную строку:
После установки приложение должно быть настроено на полную интеграцию с надстройкой. При регистрации вам будет предоставлено уникальное имя пользователя и пароль, которые вы можете использовать при настройке прокси-сервиса в своем приложении
Параметр QUOTAGUARDSTATIC_URL будет доступен в конфигурации приложения и будет содержать полный URL, который вы должны использовать для прокси-сервера ваших API запросов. Это можно подтвердить с помощью следующей команды:
Все запросы, которые вы делаете через этот прокси-сервер, будут появляться на целевом сервере, чтобы исходить от одного из двух статических IPs, которые вам будут назначены при регистрации.
Затем вы можете запустить приведенный ниже пример в сеансе IRB и убедиться, что окончательный возвращаемый IP является одним из ваших двух статических IPs.
Фикси -это еще один вариант. Fixie-это надстройка, которая предоставляет приложениям Heroku фиксированный набор статических адресов IP для исходящих запросов. Это язык-и фреймворк-агностик.
Fixie прост в настройке и имеет документацию "get started" (аналогичную приведенной ниже для Python) для Ruby, Node, Java, перейдите сюда . Вот тот, что для Python.
Сначала вам нужно зарегистрироваться на бесплатный план:
При использовании urllib2 та же функциональность будет выглядеть следующим образом:
В обоих случаях эти запросы будут поступать через известный адрес IP, назначенный Fixie.
Вы можете использовать Nginx в качестве резервного прокси-сервера. Отредактируйте свой nginx.conf и установите proxy_pass. Убедитесь в том, чтобы установить proxy_set_header на свой herokuapp
У меня есть приложение, развернутое на Heroku. Я использую сервис, который требует от меня доступа к их серверу SFTP по статическому ip-адресу. Я знаю, что Heroku Динамо в этом отношении ненадежны. Я успешно добился этого с помощью аддона Proximo, однако он слишком дорог для того объема.
У меня есть приложение Java, которое работает на Heroku, которое должно получить доступ к Salesforce, что позволяет получить доступ только к API из IPs, который вы включили в белый список. Proximo -это надстройка Heroku, которая позволяет вам проксировать все запросы, которые ваше приложение.
Похожие вопросы:
Мне нужно, чтобы машина в моей домашней сети использовала статический ip-адрес. Это коробка linux. Мой вопрос заключается в том, Могу ли я сделать так, чтобы только мой ящик linux использовал.
Проще говоря, мне нужно удалить и заново создать свое приложение Heroku. Если я добавлю proximo addon в новое приложение и установлю там свой старый PROXIMO_URL env var PROXIMO_URL.
Я установил надстройку Proximo на Heroku и, добавляя команду к моей существующей команде, получаю BindException от Java. Вот как выглядит моя добавленная команда: web: bin/proximo sh.
У меня есть приложение, развернутое на Heroku. Я использую сервис, который требует от меня доступа к их серверу SFTP по статическому ip-адресу. Я знаю, что Heroku Динамо в этом отношении ненадежны.
У меня есть приложение Java, которое работает на Heroku, которое должно получить доступ к Salesforce, что позволяет получить доступ только к API из IPs, который вы включили в белый список. Proximo.
Я запускаю приложение Ruby on Rails на Heroku, и моя база данных находится в каком-то другом месте, где она будет доступна только с определенными белыми списками IP, но поскольку heroku не.
Я пытаюсь развернуть приложение Python/Django на Heroku,которое должно выполнять запросы только для чтения в кластере Redshift. Основная проблема заключается в том, что приложение имеет динамический.
В настоящее время в соответствии с документацией Microsoft вы можете установить статический адрес IP в группе ресурсов службы kubernetes. Проблема с этим заключается в том, что если вы удалите.
На Heroku Cedar я хотел получить IP-адрес клиента. Первая попытка:
Конечно, это не работает, потому что все запросы передаются через прокси. Поэтому альтернативой было использовать:
Но это не совсем безопасно, не так ли?
Если оно содержит только одно значение, я беру это. Если оно содержит более одного значения (через запятую), я мог бы взять первое.
Но должен быть какой-то способ , чтобы всегда надежно получать IP-адрес клиента. Вы знаете один?
В своих документах Героку описывает это X-Forwarded-For - это «исходный IP-адрес клиента, подключающегося к маршрутизатору Heroku».
Звучит так, как будто Heroku может перезаписать X-Forwarded-For исходным удаленным IP-адресом. Это предотвратит подделку, верно? Может кто-нибудь это проверить?
3 ответа
От Джейкоба, директора по безопасности Heroku в то время:
Маршрутизатор не перезаписывает X-Forwarded-For , но он гарантирует, что реальное происхождение всегда будет последним элемент в списке.
Это означает, что если вы обращаетесь к приложению Heroku обычным способом, вы просто увидите свой IP-адрес в заголовке X-Forwarded-For
Если вы попытаетесь подделать IP-адрес, ваше предполагаемое происхождение будет отражено, но, что особенно важно, ваш реальный IP-адрес тоже. Очевидно, это все, что нам нужно, поэтому есть ясное и безопасное решение для получения IP-адреса клиента на Heroku:
Это полная противоположность тому, что описано в Википедии кстати.
Реализация PHP:
Я работаю в отделе поддержки Heroku и провел некоторое время, обсуждая это с нашими инженерами маршрутизации. Я хотел опубликовать дополнительную информацию, чтобы уточнить кое-что о том, что здесь происходит.
В примере, приведенном в ответе выше, клиентский IP отображался в последний раз по совпадению, и это не гарантировано Причина, по которой он не был первым, заключается в том, что исходящий запрос утверждал, что он перенаправлял IP-адрес, указанный в заголовке X-Forwarded-For . Когда маршрутизатор Heroku получил запрос, он просто добавил IP-адрес, который непосредственно подключался к списку X-Forwarded-For после того, который был введен в запрос. Наш маршрутизатор всегда добавляет IP-адрес, подключенный к AWS ELB перед нашей платформой, как последний IP-адрес в списке. Этот IP-адрес может быть исходным (и в случае, когда есть только один IP-адрес, он почти наверняка есть), но в тот момент, когда несколько IP-адресов соединены в цепочку, все ставки отключены. Соглашение всегда заключается в добавлении последнего IP-адреса в цепочке в конец списка (что мы и делаем), но в любой точке цепочки эта цепочка может быть изменена и могут быть добавлены разные IP-адреса. Таким образом, единственный надежный IP-адрес (с точки зрения нашей платформы) - это последний IP-адрес в списке.
Для иллюстрации, скажем, кто-то инициирует запрос и произвольно добавляет 3 дополнительных IP-адреса в заголовок X-Forwarded-For:
Представьте, что IP-адрес этой машины был 9.9.9.9, и что он должен был проходить через прокси (например, прокси-сервер университета). Допустим, у прокси был IP 2.2.2.2. Предполагая, что он не настроен на удаление заголовков X-Forwarded-For (что, скорее всего, не будет), он просто подключит IP 9.9.9.9. в конец списка и передайте запрос в Google. На этом этапе заголовок будет выглядеть следующим образом:
Затем этот запрос будет проходить через конечную точку Google, которая добавит IP-адрес университетского прокси-сервера 2.2.2.2, поэтому заголовок в журналах Google будет выглядеть следующим образом:
Итак, какой у клиента IP? Это невозможно сказать с точки зрения Google. На самом деле IP-адрес клиента - 9.9.9.9. Последний из перечисленных IP-адресов - 2.2.2.2, а первый - 12.12.12.12. Все, что Google знал бы, - это то, что IP 2.2.2.2 определенно правильный, потому что это был IP, который фактически подключался к их сервису - но они не знали бы, был ли это первоначальный клиент для запроса или нет из доступных данных. Точно так же, когда в этом заголовке есть только один IP-адрес - это IP-адрес, напрямую связанный с нашим сервисом, поэтому мы знаем, что он надежный.
С практической точки зрения этот IP, скорее всего, будет надежным большую часть времени (потому что большинство людей не будут пытаться подделать свой IP). К сожалению, такого рода спуфинг невозможно предотвратить, и к тому времени, когда запрос поступит на маршрутизатор Heroku, мы не сможем определить, есть ли IP-адреса в X-Forwarded-For была подделана или нет.
Помимо всех проблем с надежностью, эти цепочки IP всегда должны читаться слева направо. IP-адрес клиента должен всегда быть крайним левым IP-адресом.
Лучший ответ здесь будет зависеть от того, что вы пытаетесь сделать. Если вы пытаетесь проверить своих клиентов, сертификат на стороне клиента может быть более подходящим решением. Если все, что вам нужно для IP-адреса, это географическое местоположение, то доверие к данным может быть достаточно хорошим. В худшем случае, кто-то подделает местоположение и получит неправильный контент . Если у вас другой вариант использования, между этими двумя крайностями может быть много других решений.
На Heroku Cedar я хотел получить IP клиента. Первая попытка:
Конечно, это не работает, потому что все запросы передаются через прокси. Таким образом, альтернативой было использовать:
Но это не совсем безопасно, не так ли?
Если он содержит только одно значение, я беру это. Если он содержит более одного значения (через запятую), я мог бы взять первое.
Но всегда должен быть надежный способ получить IP-адрес клиента. Вы знаете один?
В своих документах Heroku описывает, что X-Forwarded-For это "исходный IP-адрес клиента, подключающегося к маршрутизатору Heroku".
Это звучит так, как будто Heroku может переписать X-Forwarded-For с исходящим удаленным IP. Это предотвратит подделку, верно? Кто-нибудь может это проверить?
3 ответа
От Джейкоба, директора по безопасности Heroku в то время:
Роутер не перезаписывает X-Forwarded-For , но это гарантирует, что реальное происхождение всегда будет последним элементом в списке.
Это означает, что, если вы получите доступ к приложению Heroku обычным способом, вы просто увидите свой IP-адрес в X-Forwarded-For заголовок:
Если вы попытаетесь подделать IP-адрес, ваше предполагаемое происхождение будет отражено, но, что особенно важно, ваш реальный IP-адрес тоже. Очевидно, это все, что нам нужно, поэтому есть ясное и безопасное решение для получения IP-адреса клиента на Heroku:
Кстати, это полная противоположность тому, что описано в Википедии.
Реализация PHP:
Я работаю в отделе поддержки Heroku и провел некоторое время, обсуждая это с нашими инженерами по маршрутизации. Я хотел опубликовать дополнительную информацию, чтобы уточнить некоторые вещи о том, что здесь происходит.
В примере, приведенном в ответе выше, только что IP-адрес клиента отображался в последний раз по совпадению, и это не гарантировано. Причина, по которой он не был первым, заключается в том, что исходящий запрос утверждал, что он переадресовал IP, указанный в X-Forwarded-For заголовок. Когда маршрутизатор Heroku получил запрос, он просто добавил IP-адрес, напрямую подключенный к X-Forwarded-For список после того, который был введен в запрос. Наш маршрутизатор всегда добавляет IP-адрес, подключенный к AWS ELB перед нашей платформой, как последний IP-адрес в списке. Этот IP-адрес может быть исходным (и в случае, когда есть только один IP-адрес, он почти наверняка есть), но в тот момент, когда несколько IP-адресов соединены в цепочку, все ставки отключены. Общепринятым всегда является добавление последнего IP-адреса в цепочке в конец списка (что мы и делаем), но в любой точке цепочки эта цепочка может быть изменена и могут быть добавлены разные IP-адреса. Таким образом, единственный надежный IP-адрес (с точки зрения нашей платформы) - последний IP-адрес в списке.
Для иллюстрации, скажем, кто-то инициирует запрос и произвольно добавляет 3 дополнительных IP-адреса в заголовок X-Forwarded-For:
Представьте, что IP-адрес этой машины был 9.9.9.9, и что он должен был проходить через прокси (например, прокси-сервер университета). Допустим, у прокси был IP 2.2.2.2. Предполагая, что он не настроен на раздевание X-Forwarded-For Заголовки (которые, скорее всего, не будут), он просто прикрепит IP 9.9.9.9 к концу списка и передаст запрос в Google. На этом этапе заголовок будет выглядеть так:
Затем этот запрос пройдет через конечную точку Google, которая добавит IP-адрес университетского прокси-сервера 2.2.2.2, поэтому заголовок в журналах Google будет выглядеть следующим образом:
Итак, какой IP-адрес клиента? Это невозможно сказать с точки зрения Google. На самом деле IP-адрес клиента - 9.9.9.9. Последний из перечисленных IP-адресов - 2.2.2.2, а первый - 12.12.12.12. Все, что Google знал бы, - это то, что IP 2.2.2.2 определенно правильный, потому что это был IP, который фактически подключался к их сервису - но они не знали бы, был ли это первоначальный клиент для запроса или нет из доступных данных. Точно так же, когда в этом заголовке есть только один IP-адрес - это IP-адрес, напрямую связанный с нашим сервисом, поэтому мы знаем, что он надежный.
С практической точки зрения этот IP, скорее всего, будет надежным большую часть времени (потому что большинство людей не будут пытаться подделать свой IP). К сожалению, такого рода спуфинг невозможно предотвратить, и к тому времени, когда запрос поступит на маршрутизатор Heroku, мы не сможем определить, находятся ли IP-адреса в X-Forwarded-For цепь была подделана или нет.
За исключением всех вопросов надежности, эти цепочки IP-адресов всегда должны читаться слева направо. IP-адрес клиента всегда должен быть крайним левым.
В Heroku Cedar я хотел получить IP-адрес клиента. Первая попытка:
Это не работает, конечно, потому что все запросы передаются через прокси. Поэтому альтернативой было использование:
Но это не совсем безопасно, не так ли?
Если он содержит только одно значение, я беру это. Если он содержит более одного значения (разделенный запятой), я мог бы взять первый.
Но должен быть какой-то способ надежно получить IP-адрес клиента, всегда. Вы знаете кого-то?
В их документы, Heroku описывает, что X-Forwarded-For - это "исходный IP-адрес клиента, подключающегося к маршрутизатору Heroku".
Звучит так, как если бы Heroku мог переписывать X-Forwarded-For исходящим удаленным IP-адресом. Это предотвратит спуфинг, не так ли? Кто-нибудь может это подтвердить?
ОТВЕТЫ
Ответ 1
От Иакова, Героку, директора по безопасности в то время:
Маршрутизатор не перезаписывает X-Forwarded-For , но гарантирует, что реальное происхождение всегда будет последним элементом в списке.
Это означает, что при обычном доступе к приложению Heroku вы просто увидите свой IP-адрес в заголовке X-Forwarded-For :
Если вы попытаетесь подделать IP-адрес, ваше предполагаемое происхождение будет отражено, но - критически - так ваш IP-адрес. Очевидно, что это все, что нам нужно, поэтому есть четкое и безопасное решение для получения IP-адреса клиента на Heroku:
Это как раз противоположно то, что описано в Википедии, кстати.
Реализация PHP:
Ответ 2
Я работаю в отделе поддержки Heroku и некоторое время обсуждал это с нашими инженерами по маршрутизации. Я хотел бы опубликовать дополнительную информацию, чтобы прояснить некоторые вещи о том, что происходит здесь.
Пример, приведенный в ответе выше, просто показал IP-адрес клиента последним по совпадению и не гарантирован. Причина не в том, что исходный запрос утверждал, что он пересылал IP-адрес, указанный в заголовке X-Forwarded-For . Когда маршрутизатор Heroku получил запрос, он просто добавил IP-адрес, который напрямую подключался к списку X-Forwarded-For после того, который был введен в запрос. Наш маршрутизатор всегда добавляет IP-адрес, подключенный к AWS ELB перед нашей платформой в качестве последнего IP-адреса в списке. Этот IP-адрес может быть оригинальным (и в случае, когда есть только один IP-адрес, это почти наверняка есть), но в тот момент, когда есть несколько IP-ключей, все ставки отключены. Конвенция всегда должна добавлять последний IP-адрес в цепочку в конец списка (это то, что мы делаем), но в любой точке цепи, цепочка которой может быть изменена, и могут быть вставлены различные IP-адреса. Таким образом, единственным надежным IP-адресом (с точки зрения нашей платформы) является последний IP-адрес в списке.
Чтобы проиллюстрировать, скажем, кто-то инициирует запрос и произвольно добавляет 3 дополнительных IP-адреса в заголовок X-Forwarded-For:
Представьте, что этот IP-адрес машины был 9.9.9.9 и что он должен был пройти через прокси-сервер (например, прокси-сервер университетского городка). Скажем, что у прокси-сервера был IP-адрес 2.2.2.2. Предполагая, что он не настроен на разделение заголовков X-Forwarded-For (чего, скорее всего, не будет), он просто поместит 9.9.9.9 IP в конец списка и передаст запрос Google. На этом этапе заголовок будет выглядеть так:
Затем этот запрос будет передаваться через конечную точку Google, которая добавит IP-адрес прокси-сервера университета версии 2.2.2.2, поэтому заголовок, наконец, будет выглядеть в журналах Google:
Итак, это IP-адрес клиента? С точки зрения Google это невозможно. На самом деле клиентский IP-адрес составляет 9.9.9.9. Последний IP-адрес равен 2.2.2.2, а первый - 12.12.12.12. Все, что Google будет знать, это то, что IP-адрес 2.2.2.2 определенно правильный, потому что это был IP-адрес, фактически связанный с их сервисом, - но они не знали бы, был ли это первоначальный клиент для запроса или нет из доступных данных. Точно так же, когда в этом заголовке есть только один IP-адрес - это IP-адрес, который напрямую связан с нашим сервисом, поэтому мы знаем его достоверно.
С практической точки зрения, этот IP, скорее всего, будет надежным большую часть времени (потому что большинство людей не будет пытаться подделать их IP). К сожалению, невозможно предотвратить подобную подделку, и к тому времени, когда запрос дойдет до маршрутизатора Heroku, нам не удалось определить, были ли изменены IP-адреса в цепочке X-Forwarded-For или нет.
Все проблемы с безопасностью, эти IP-цепи всегда должны читаться слева направо. IP-адрес клиента всегда должен быть самым левым IP-адресом.
Ответ 3
Лучший ответ здесь будет зависеть от того, что вы пытаетесь сделать. Если вы пытаетесь проверить своих клиентов, сертификация на стороне клиента может быть более подходящим решением. Если все, что вам нужно для IP-адреса, это геолокация, доверие к вводу может быть достаточно хорошим. В худшем случае кто-то подделает место и получит неправильный контент. Если у вас другой вариант использования, между этими двумя крайностями есть много других решений.
Читайте также: