Как открыть определенный порт, например 9090, в Google Compute Engine

197

У меня есть 2 экземпляра Google Compute Engine, и я хочу открыть порт 9090 в обоих экземплярах. Я думаю, что нам нужно добавить некоторые правила брандмауэра.

Можете ли вы сказать мне, как я могу это сделать?

Субрадип Бозе
источник
7
Я думаю, что на этот вопрос был дан ответ. Не могли бы вы выбрать один из ответов ниже? Это помогло бы будущим читателям легче понять, что эта проблема была решена.
modulitos
Йо, Субрадип, выбери ответ.
oligofren

Ответы:

341

Тебе надо:

  1. Перейдите на cloud.google.com.

  2. Перейти к моей консоли

  3. Выберите свой проект

  4. Выберите «Сеть»> «Сеть VPC».

  5. Выберите «Правила брандмауэров»

  6. Выберите «Создать правило брандмауэра»

  7. Чтобы применить правило для выбора экземпляров ВМ, выберите «Цели»> «Заданные целевые теги» и введите в «Целевые теги» имя тега. Этот тег будет использоваться для применения нового правила брандмауэра к любому экземпляру, который вы хотите. Затем убедитесь, что к экземплярам применен сетевой тег.

  8. Чтобы разрешить входящие TCP-подключения к порту 9090, в поле «Протоколы и порты» введите tcp:9090

  9. Нажмите Создать

Я надеюсь, это поможет вам.

Обновление Пожалуйста, обратитесь к документации, чтобы настроить ваши правила.

Карлос Рохас
источник
4
Вычислитель не имеет опции «сети» (больше?)
AFR
8
Да, сейчас нет опции «Сети», обновленный путь - «Проект» -> «Сеть» -> «Правила брандмауэра»
Caio Vertematti,
1
На моем случае, я только allow httpи allow httpsя добавил новое правило брандмауэра , но я не могу найти его. Я тоже на свободном уровне, если это поможет.
A. L
1
Вам нужно разрешить http открыть 80 порт и позволить https открыть 443. Это ярлык.
Карлос Рохас
4
Путь к меню документов постоянно меняется. Очень важно указать на документ в ответе: cloud.google.com/vpc/docs/using-firewalls
Anupam,
83

Вот подход командной строки, чтобы ответить на этот вопрос:

gcloud compute firewall-rules create <rule-name> --allow tcp:9090 --source-tags=<list-of-your-instances-names> --source-ranges=0.0.0.0/0 --description="<your-description-here>"

Это откроет порт 9090для названных вами экземпляров. Опуская --source-tagsи--source-ranges применив правило ко всем экземплярам. Более подробная информация в документации Gcloud и в firewall-rule createруководстве команды

Предыдущие ответы великолепны, но Google рекомендует использовать более новые gcloudкоманды вместо gcutilкоманд.

PS: Чтобы получить представление о правилах брандмауэра Google, запустите gcloud compute firewall-rules listи просмотрите все правила брандмауэра.

modulitos
источник
Я получаю жалобы, когда использую --descriptionчасть, но в остальном это работает для меня.
Шаббычеф
2
Я не уверен, что они изменили API, но источник и цель, кажется, противоположны ответу @ modulitos. Согласно документации команды firewall-rules , sourceозначает входящий трафик, тогда как targetотносится к экземплярам, ​​к которым применяется правило.
cindyxiaoxiaoli
1
ERROR: (gcloud.compute.firewall-rules.create) Could not fetch resource: - Insufficient Permission@modulitos
ALPER
Каков последующий тест @modulitos? Это telnet :instance_ip :portили nmap -p :port :instance_ip?
Нам G VU
@alper Вы должны выполнить эту команду раньше: «gcloud auth login» и login
Антон Ткачов
10

Вам нужно будет добавить правило брандмауэра, чтобы открыть входящий доступ tcp:9090к вашим экземплярам. Если у вас есть более двух экземпляров, и вы хотите открыть 9090 для этих двух экземпляров, вы должны убедиться, что есть тег, который разделяют эти два экземпляра. Вы можете добавлять или обновлять теги через консоль или командную строку; Я бы рекомендовал использовать графический интерфейс для этого, если это необходимо, потому что он обрабатывает цикл чтения-изменения-записи сsetinstancetags .

Если вы хотите открыть порт 9090 для всех экземпляров, вы можете создать правило брандмауэра, например:

gcutil addfirewall allow-9090 --allowed=tcp:9090

который будет применяться ко всем вашим экземплярам.

Если вы хотите открыть порт 9090 только для двух экземпляров, обслуживающих ваше приложение, убедитесь, что у них есть тег, подобный этому my-app, а затем добавьте брандмауэр, например, так:

gcutil addfirewall my-app-9090 --allowed=tcp:9090 --target_tags=my-app

Подробнее о создании и управлении межсетевыми экранами в GCE вы можете прочитать здесь .

Э. Андерсон
источник
10
gcutilбольше недоступно; пожалуйста, перепишите ваши командные строки, используя gcloud.
Миша Брукман
10

Этот вопрос старый, и ответ Карлоса Рохаса хороший, но я думаю, что я должен опубликовать несколько вещей, которые следует учитывать при попытке открыть порты.

Первое, что нужно запомнить, это то, что раздел Networking переименован в VPC Networking . Так что, если вы пытаетесь выяснить, где доступна опция « Правила межсетевого экрана» , посмотрите на VPC Networking .

Во-вторых, если вы пытаетесь открыть порты на виртуальной машине Linux, ни в коем случае не пытайтесь открыть порт с помощью ufwкоманды. Я попытался использовать это и потерял доступ SSH к виртуальной машине. Так что не повторяй мою ошибку.

В-третьих, если вы пытаетесь открыть порты на виртуальной машине Windows, вам необходимо создать правила брандмауэра внутри виртуальной машины также в брандмауэре Windows вместе с сетью VPC -> Правила брандмауэра . Порт должен быть открыт в обоих правилах брандмауэра, в отличие от виртуальной машины Linux. Поэтому, если вы не получаете доступ к порту извне виртуальной машины, проверьте, открыли ли вы порт в консоли GCP и брандмауэре Windows.

Последнее (очевидное), что не открывайте порты без необходимости. Закройте порты, как только они вам больше не понадобятся.

Я надеюсь, что этот ответ полезен.

новичек
источник
Хорошие советы, за исключением того, что я открыл некоторые конкретные порты с помощью ufwкоманды, и у меня все еще есть доступ по ssh.
stackErr
7

У меня была та же проблема, что и у вас, и я мог ее решить, следуя инструкциям @CarlosRojas, с небольшой разницей. Вместо того, чтобы создавать новое правило брандмауэра, я отредактировал правило, default-allow-internalпринимающее трафик из любой точки, поскольку создание новых правил не имело никакого значения.

Nevershowmyface
источник
За создание нового правила брандмауэра взимается плата. Вам удалось избежать этого, отредактировав это правило?
killjoy
@killjoy Я не уверен в этом. В настоящее время я не использую Google Compute Engine. Сожалею.
Nevershowmyface
2
Хотя это может работать, есть проблемы безопасности с этим методом. То, что я нашел, работало для меня, использовало метки брандмауэра в моих экземплярах. Когда вы создаете правило брандмауэра, вы можете создать «целевой тег» для этого правила. Затем вы можете применить этот тег к вашему экземпляру виртуальной машины, который будет применять правило к вашему конкретному экземпляру. Для получения дополнительной информации см. Принятый ответ здесь: stackoverflow.com/questions/31509722/…
k00k
7

Создание правил брандмауэра

Пожалуйста, просмотрите компоненты правил брандмауэра [1], если вы не знакомы с правилами брандмауэра в GCP. Правила брандмауэра определяются на уровне сети и применяются только к сети, в которой они созданы; однако имя, которое вы выбираете для каждого из них, должно быть уникальным для проекта.

Для облачной консоли:

  1. Перейдите на страницу правил брандмауэра в консоли облачной платформы Google.
  2. Нажмите Создать правило брандмауэра.
  3. Введите имя для правила брандмауэра. Это имя должно быть уникальным для проекта.
  4. Укажите Сеть, в которой будет реализовано правило брандмауэра.
  5. Укажите Приоритет правила. Чем меньше число, тем выше приоритет.
  6. Для направления движения выберите вход или выход.
  7. Для действия на матч выберите разрешить или запретить.
  8. Укажите Цели правила.

    • Если вы хотите, чтобы правило применялось ко всем экземплярам в сети, выберите Все экземпляры в сети.
    • Если вы хотите, чтобы правило применялось для выбора экземпляров по сетевым (целевым) тегам, выберите «Заданные целевые теги», затем введите теги, к которым правило должно применяться, в поле «Целевые теги».
    • Если вы хотите, чтобы правило применялось для выбора экземпляров по связанной учетной записи службы, выберите «Указанная учетная запись службы», укажите, находится ли учетная запись службы в текущем проекте или другую в области «Учетная запись службы», и выберите или введите имя учетной записи службы в целевой службе. поле аккаунта.
  9. Для правила входа укажите фильтр источника:

    • Выберите диапазоны IP-адресов и введите блоки CIDR в поле «Диапазоны IP-адресов источника», чтобы определить источник входящего трафика по диапазонам IP-адресов. Используйте 0.0.0.0/0 для источника из любой сети.
    • Выберите «Подсети», затем отметьте те, которые вам нужны, во всплывающей кнопке «Подсети», чтобы определить источник входящего трафика по имени подсети.
    • Чтобы ограничить источник по сетевому тегу, выберите «Исходные теги», затем введите сетевые теги в поле «Исходные теги». Для ограничения количества исходных тегов см. Квоты и ограничения VPC. Фильтрация по тегу источника доступна только в том случае, если цель не указана учетной записью службы. Дополнительные сведения см. В разделе «Фильтрация по учетной записи службы и тегу сети».
    • Чтобы ограничить источник учетной записью службы, выберите «Учетная запись службы», укажите, входит ли учетная запись службы в текущий проект или другую в область действия учетной записи службы, и выберите или введите имя учетной записи службы в поле «Исходная учетная запись службы». Фильтрация по исходной учетной записи службы доступна только в том случае, если цель не указана сетевым тегом. Для получения дополнительной информации см. Раздел Фильтрация по учетной записи службы и сетевому тегу.
    • Укажите фильтр второго источника, если это необходимо. Фильтры вторичного источника не могут использовать те же критерии фильтра, что и первичный.
  10. Для выходного правила укажите фильтр назначения:

    • Выберите диапазоны IP-адресов и введите блоки CIDR в поле «Диапазоны IP-адресов назначения», чтобы определить назначение для исходящего трафика по диапазонам IP-адресов. Используйте 0.0.0.0/0, чтобы значить везде.
    • Выберите «Подсети», затем отметьте те, которые вам нужны, во всплывающей кнопке «Подсети», чтобы определить назначение для исходящего трафика по имени подсети.
  11. Определите протоколы и порты, к которым будет применяться правило:

    • Выберите Разрешить все или Запретить все, в зависимости от действия, чтобы правило применялось ко всем протоколам и портам.

    • Определите конкретные протоколы и порты:

      • Выберите tcp, чтобы включить протокол TCP и порты. Введите все или список портов через запятую, например 20-22, 80, 8080.
      • Выберите udp, чтобы включить протокол UDP и порты. Введите все или список портов через запятую, например 67-69, 123.
      • Выберите Другие протоколы, чтобы включить протоколы, такие как icmp или sctp.
  12. (Необязательно) Вы можете создать правило брандмауэра, но не применять его, установив для него состояние принудительного отключения отключенным. Нажмите Отключить правило, затем выберите Отключено.

  13. (Необязательно) Вы можете включить ведение журнала правил брандмауэра:

    • Нажмите Журналы> Вкл.
    • Нажмите Включить.
  14. Нажмите Создать.

Ссылка: [1] https://cloud.google.com/vpc/docs/firewalls#firewall_rule_components

Кервин Л
источник
0

Мне пришлось исправить это, уменьшив приоритет (сделав его выше). Это вызвало немедленный ответ. Не то, что я ожидал, но это сработало.

JustBob
источник
0

console.cloud.google.com >> выберите проект >> Сеть> Сеть VPC >> брандмауэры >> создать брандмауэр.

Чтобы применить правило к экземплярам виртуальной машины, выберите «Цели», «Заданные целевые теги» и введите в «Целевые теги» имя тега. Этот тег будет использоваться для применения нового правила брандмауэра к любому экземпляру, который вы хотите.

в "Протоколы и порты" введите tcp: 9090

Нажмите Сохранить.

Тринад Кумпатла
источник