Logging delle regole firewall

Il logging delle regole firewall consente di controllare, verificare e analizzare gli effetti delle regole firewall. Ad esempio, puoi determinare se una regola firewall progettata per rifiutare il traffico funziona come previsto. Il logging delle regole firewall è utile anche per determinare quante connessioni sono interessate da una determinata regola firewall.

Puoi abilitare il logging delle regole firewall singolarmente per ogni regola firewall le cui connessioni devi registrare. Il logging delle regole firewall è un'opzione per qualsiasi regola firewall, indipendentemente dall'azione (allow o deny) o dalla direzione (in entrata o in uscita) della regola.

Il logging delle regole firewall registra il traffico da e verso le istanze di macchine virtuali (VM) Compute Engine. Sono inclusi i prodotti Google Cloud basati su VM di Compute Engine, come i cluster Google Kubernetes Engine (GKE) e l'ambiente flessibile di App Engine.

Quando abiliti il logging per una regola firewall, Google Cloud crea una voce denominata record di connessione ogni volta che la regola consente o nega il traffico. Puoi visualizzare questi record in Cloud Logging ed esportare i log in qualsiasi destinazione supportata dalle funzionalità di esportazione di Cloud Logging.

Ogni record di connessione contiene gli indirizzi IP di origine e di destinazione, il protocollo e le porte, la data e l'ora e un riferimento alla regola firewall applicata al traffico.

Il logging delle regole firewall è disponibile sia per le regole firewall firewall sia per i criteri firewall gerarchici.

Per informazioni sulla visualizzazione dei log, consulta la pagina relativa all'utilizzo del logging delle regole firewall.

Specifiche

Il logging delle regole firewall ha le seguenti specifiche:

Esempi di logging

Ogni volta che una regola firewall con il logging abilitato si applica al traffico, viene generata una voce di log. Un determinato flusso di pacchetti può generare più voci di log in totale. Tuttavia, dal punto di vista di una determinata VM, può essere generata al massimo una sola voce di log se la regola firewall che si applica ha attivato il logging.

I seguenti esempi mostrano come funzionano i log del firewall

Esempio di traffico in uscita in uscita

In questo esempio:

  • Viene considerato il traffico tra le istanze VM nella rete VPC example-net nel progetto example-proj.
  • Le due istanze VM sono:
    • VM 1 nella zona us-west1-a con indirizzo IP 10.10.0.99 nella regione west-subnet (us-west1).
    • VM 2 nella zona us-east1-a con indirizzo IP 10.20.0.99 nella regione east-subnet (us-east1).
  • Regola A: una regola firewall in nega in uscita ha un target per tutte le istanze nella rete, una destinazione di 10.20.0.99 (VM2) e si applica alla porta TCP 80.
    • Il logging è abilitato per questa regola.
  • Regola B: una regola firewall di autorizzazione in entrata ha una destinazione di tutte le istanze nella rete, un'origine di 10.10.0.99 (VM1) e si applica alla porta TCP 80.
    • Anche il logging è abilitato per questa regola.

Per creare le regole firewall puoi utilizzare i seguenti comandi gcloud:

  • Regola A: regola di negazione in uscita per TCP 80, applicabile a tutte le istanze, destinazione 10.20.0.99:

    gcloud compute firewall-rules create rule-a \
        --network example-net \
        --action deny \
        --direction egress \
        --rules tcp:80 \
        --destination-ranges 10.20.0.99/32 \
        --priority 10 \
        --enable-logging
    
  • Regola B: regola di autorizzazione in entrata per TCP 80, applicabile a tutte le istanze, origine 10.10.0.99:

    gcloud compute firewall-rules create rule-b \
        --network example-net \
        --action allow \
        --direction ingress \
        --rules tcp:80 \
        --source-ranges 10.10.0.99/32 \
        --priority 10 \
        --enable-logging
    
Connessione da VM1 a VM2 (fai clic per ingrandire)
Connessione da VM a VM2 (fai clic per ingrandire)

Supponiamo che VM1 tenti di connettersi a VM2 sulla porta TCP 80. Vengono registrate le seguenti regole firewall:

  • Una voce di log per la regola A dal punto di vista di VM1 viene generata come VM1 tenta di connettersi a 10.20.0.99 (VM2).
  • Poiché la regola A blocca effettivamente il traffico, la regola B non viene mai considerata, quindi non esiste una voce di log per la regola B dal punto di vista della VM2.

Il record del log del firewall viene generato nell'esempio seguente.

Campo Valori
connessione src_ip=10.10.0.99
src_port=[EPHEMERAL_PORT]
dest_ip=10.20.0.99
dest_port=80
protocollo=6
disposizione RIFIUTATA
dettagli_regola riferimenti = "network:example-net/firewall:rule-a"
priorità = 10
azione = DENY
intervallo_destinazione = 10.20.0.99/32
ip_port_info = tcp:80
direzione = in uscita
istanza project_id="example-proj"
instance_name=VM1
region=us-west1
zone=us-west1-a
vpc, project_id="example-proj"
vpc_name=example-net
subnetwork_name=west-subnet
istanza_remota project_id="example-proj"
instance_name=VM2
region=us-east1
zone=us-east1-a
vpc remoto project_id="example-proj"
vpc_name=example-net
subnetwork_name=east-subnet
località_remota Nessuna informazione. Questo campo viene utilizzato solo se la destinazione non si trova nella rete VPC.

Esempio di autorizzazione in uscita e autorizzazione in entrata

In questo esempio:

  • Viene considerato il traffico tra le istanze VM nella rete VPC example-net nel progetto example-proj.
  • Le due istanze VM sono:
    • VM 1 nella zona us-west1-a con indirizzo IP 10.10.0.99 nella regione west-subnet (us-west1).
    • VM 2 nella zona us-east1-a con indirizzo IP 10.20.0.99 nella regione east-subnet (us-east1).
  • Regola A: una regola firewall di autorizzazione in uscita ha una destinazione di tutte le istanze nella rete, una destinazione di 10.20.0.99 (VM2) e si applica alla porta TCP 80.
    • Il logging è abilitato per questa regola.
  • Regola B: una regola firewall di autorizzazione in entrata ha una destinazione di tutte le istanze nella rete, un'origine di 10.10.0.99 (VM1) e si applica alla porta TCP 80.
    • Anche il logging è abilitato per questa regola.

I seguenti comandi gcloud possono essere utilizzati per creare le due regole firewall:

  • Regola A: regola di autorizzazione in uscita per TCP 80, applicabile a tutte le istanze, destinazione 10.20.0.99 (VM2):

    gcloud compute firewall-rules create rule-a \
        --network example-net \
        --action allow \
        --direction egress \
        --rules tcp:80 \
        --destination-ranges 10.20.0.99/32 \
        --priority 10 \
        --enable-logging
    
  • Regola B: regola di autorizzazione in entrata per TCP 80, applicabile a tutte le istanze, origine 10.10.0.99 (VM1):

    gcloud compute firewall-rules create rule-b \
        --network example-net \
        --action allow \
        --direction ingress \
        --rules tcp:80 \
        --source-ranges 10.10.0.99/32 \
        --priority 10 \
        --enable-logging
    
Connessione da VM1 a VM2 (fai clic per ingrandire)
Connessione da VM a VM2 (fai clic per ingrandire)

Supponiamo che VM1 tenti di connettersi a VM2 sulla porta TCP 80. Vengono registrate le seguenti regole firewall:

  • Una voce di log per la regola A dal punto di vista di VM1 viene generata quando VM1 si connette a 10.20.0.99 (VM2).
  • Viene generata una voce di log per la regola B dal punto di vista di VM2 poiché VM2 consente le connessioni in arrivo da 10.10.0.99 (VM1).

Il record del log del firewall segnalato da VM1 viene generato nell'esempio seguente.

Campo Valori
connessione src_ip=10.10.0.99
src_port=[EPHEMERAL_PORT]
dest_ip=10.20.0.99
dest_port=80
protocollo=6
disposizione CONSENTITA
dettagli_regola riferimenti = "network:example-net/firewall:rule-a"
priority = 10
action = ALLOW
destination_range = 10.20.0.99/32
ip_port_info = tcp:80
directing = in uscita
istanza project_id="example-proj"
instance_name=VM1
region=us-west1
zone=us-west1-a
vpc, project_id="example-proj"
vpc_name=example-net
subnetwork_name=west-subnet
istanza_remota project_id="example-proj"
instance_name=VM2
region=us-east1
zone=us-east1-a
vpc remoto project_id="example-proj"
vpc_name=example-net
subnetwork_name=east-subnet
località_remota Nessuna informazione. Questo campo viene utilizzato solo se la destinazione non si trova nella rete VPC.

Il record del log del firewall segnalato da VM2 viene generato nell'esempio seguente.

Campo Valori
connessione src_ip=10.10.0.99
src_port=[EPHEMERAL_PORT]
dest_ip=10.20.0.99
dest_port=80
protocollo=6
disposizione CONSENTITA
dettagli_regola riferimento = "network:example-net/firewall:rule-b"
priority = 10
action = ALLOW
source_range = 10.10.0.99/32
ip_port_info = tcp:80
directing = ingress
istanza project_id="example-proj"
instance_name=VM2
region=us-east1
zone=us-east1-a
vpc, project_id="example-proj"
vpc_name=example-net
subnetwork_name=east-subnet
istanza_remota project_id="example-proj"
instance_name=VM1
region=us-west1
zone=us-west1-a
vpc remoto project_id="example-proj"
vpc_name=example-net
subnetwork_name=west-subnet
località_remota Nessuna informazione. Questo campo viene utilizzato solo se la destinazione non si trova nella rete VPC.

Esempio di traffico Internet in entrata

In questo esempio:

  • Viene considerato il traffico da un sistema esterno alla rete VPC example-net a un'istanza VM di quella rete. La rete è nel progetto example-proj.
  • Il sistema su Internet ha un indirizzo IP 203.0.113.114.
  • La VM 1 nella zona us-west1-a ha l'indirizzo IP 10.10.0.99 nella regione west-subnet (us-west1).
  • Regola C: una regola firewall di autorizzazione in entrata ha come target tutte le istanze della rete, un'origine di qualsiasi indirizzo IP (0.0.0.0/0) e si applica alla porta TCP 80.
    • Il logging è abilitato per questa regola.
  • Regola D: una regola firewall in nega in uscita ha un target di tutte le istanze nella rete, una destinazione di qualsiasi indirizzo IP (0.0.0.0/0) e si applica a tutti i protocolli.
    • Anche il logging è abilitato per questa regola.

Per creare le regole firewall puoi utilizzare i seguenti comandi gcloud:

  • Regola C: regola di autorizzazione in entrata per TCP 80, applicabile a tutte le istanze, qualsiasi origine:

    gcloud compute firewall-rules create rule-c \
        --network example-net \
        --action allow \
        --direction ingress \
        --rules tcp:80 \
        --source-ranges 0.0.0.0/0 \
        --priority 10 \
        --enable-logging
    
  • Regola D: regola di negazione in uscita per tutti i protocolli, applicabile a tutte le istanze, a qualsiasi destinazione:

    gcloud compute firewall-rules create rule-d \
        --network example-net \
        --action deny \
        --direction egress \
        --rules all \
        --destination-ranges 0.0.0.0/0 \
        --priority 10 \
        --enable-logging
    
Connessione da Internet a VM (fai clic per ingrandire)
Connessione da Internet a VM (fai clic per ingrandire)

Supponiamo che il sistema con l'indirizzo IP 203.0.113.114 tenti di connettersi a VM1 sulla porta TCP 80. Si verifica quanto segue:

  • Viene generata una voce di log per la regola C dal punto di vista di VM1 poiché VM1 accetta il traffico da 203.0.113.114.
  • Nonostante la regola D, VM1 può rispondere alla richiesta in entrata perché le regole firewall di Google Cloud sono stateful. Se la richiesta in entrata è consentita, le risposte stabilite non possono essere bloccate da nessun tipo di regola in uscita.
  • Poiché la regola D non si applica, non viene mai considerata, quindi non esiste una voce di log per la regola D.

Il record del log del firewall viene generato nell'esempio seguente.

Campo Valori
connessione src_ip=203.0.113.114
src_port=[EPHEMERAL_PORT]
dest_ip=10.10.0.99
dest_port=80
protocollo=6
disposizione CONSENTITA
dettagli_regola riferimenti = "network:my-vpc/firewall:rule-c"
priority = 10
action = ALLOW
source_range = 0.0.0.0/0
ip_port_info = tcp:80
directing = ingress
istanza project_id="example-proj"
instance_name=VM1
region=us-west1
zone=us-west1-a
vpc, project_id="example-proj"
vpc_name=example-net
subnetwork_name=west-subnet
località_remota continente
paese
regione
città

Formato log firewall

In base alle specifiche, in Cloud Logging viene creata una voce di log per ogni regola firewall per cui è abilitata la registrazione se tale regola si applica al traffico da o verso un'istanza VM. I record di log sono inclusi nel campo del payload JSON di un LogEntry di logging.

I record di log contengono campi di base, ovvero i campi principali di ogni record di log, e campi di metadati che aggiungono informazioni aggiuntive. Puoi controllare se i campi di metadati sono inclusi. Se le ometti, puoi risparmiare sui costi di archiviazione.

Alcuni campi log supportano valori che sono anche campi. Questi campi possono contenere più di un dato in un determinato campo. Ad esempio, il campo connection è del formato IpConnection, che contiene l'indirizzo IP di origine e di destinazione e la porta, oltre al protocollo, in un unico campo. Questi campi sono descritti nelle tabelle seguenti.

Campo Descrizione Tipo di campo: metadati di base o facoltativi
connessione IpConnection
5-Tuple che descrive l'indirizzo IP di origine e di destinazione, la porta di origine e di destinazione e il protocollo IP di questa connessione.
Livelli
disposizione stringa
Indica se la connessione era ALLOWED o DENIED.
Livelli
dettagli_regola RuleDetails
Dettagli della regola applicata a questa connessione.
Campo rule.reference Livelli
Altri campi dei dettagli delle regole Metadati
istanza InstanceDetails
Dettagli dell'istanza VM. In una configurazione VPC condiviso, project_id corrisponde a quello del progetto di servizio.
Metadati
vpc, VpcDetails
Dettagli della rete VPC. In una configurazione VPC condiviso, project_id corrisponde a quello del progetto host.
Metadati
istanza_remota InstanceDetails
Se l'endpoint remoto della connessione era una VM situata in Compute Engine, questo campo viene completato con i dettagli dell'istanza VM.
Metadati
vpc remoto VpcDetails
Se l'endpoint remoto della connessione era una VM che si trova in una rete VPC, questo campo viene completato con i dettagli della rete.
Metadati
località_remota GeographicDetails
Se l'endpoint remoto della connessione era esterno alla rete VPC, questo campo viene completato con i metadati di posizione disponibili.
Metadati

Connessione IP

Campo Tipo Descrizione
src_ip string Indirizzo IP di origine. Se l'origine è una VM di Compute Engine, src_ip è l'indirizzo IP interno principale o un indirizzo in un intervallo IP alias dell'interfaccia di rete della VM. L'indirizzo IP esterno non viene visualizzato. Logging mostra l'indirizzo IP della VM così come la VM lo vede sull'intestazione del pacchetto, come se eseguissi il dump TCP sulla VM.
porta_src integer Porta di origine
dest_ip string Indirizzo IP di destinazione. Se la destinazione è una VM Google Cloud, dest_ip è l'indirizzo IP interno principale o un indirizzo in un intervallo IP alias dell'interfaccia di rete della VM. L'indirizzo IP esterno non viene mostrato anche se è stato utilizzato per creare la connessione.
dest_port integer Porta di destinazione
protocollo integer Protocollo IP della connessione

Dettagli regola

Campo Tipo Descrizione
reference string Riferimento alla regola firewall; formato:
"network:{network name}/firewall:{firewall_name}"
priority integer La priorità per la regola firewall.
azione string CONSENTI o RIFIUTA
intervallo_origine[ ] string Elenco di intervalli di origine a cui si applica la regola firewall.
intervallo_destinazione[ ] string Elenco di intervalli di destinazione a cui si applica la regola firewall.
ip_port_info[ ] IpPortDetails Elenco di protocolli IP e intervalli di porte applicabili per le regole.
direction string La direzione a cui si applica la regola firewall (in entrata o in uscita).
tag_origine [ ] string Elenco di tutti i tag di origine a cui si applica la regola firewall.
tag_target[ ] string Elenco di tutti i tag di destinazione a cui si applica la regola firewall.
source_service_account[ ] string Elenco di tutti gli account di servizio di origine a cui si applica la regola firewall.
target_service_account[ ] string Elenco di tutti gli account di servizio di destinazione a cui si applica la regola firewall.

IpPortDetails

Campo Tipo Descrizione
protocollo_IP string Protocollo IP di validità della regola firewall. "TUTTI", se applicabile a tutti i protocolli.
intervallo_porta[ ] string Elenco degli intervalli di porte applicabili per le regole, ad esempio 8080-9090.

Dettagli istanza

Campo Tipo Descrizione
project_id string ID del progetto contenente la VM
nome_vm string Nome istanza della VM
regione string Regione della VM
zona string Zona della VM

Dettagli VPC

Campo Tipo Descrizione
project_id string ID del progetto contenente la rete
vpc_name string Rete su cui viene eseguita la VM
subnetwork_name string Subnet su cui è in esecuzione la VM

Dettagli geografici

Campo Tipo Descrizione
continente string Continente per endpoint esterni
paese string Paese per gli endpoint esterni
regione string Regione per endpoint esterni
città string Città per gli endpoint esterni

Passaggi successivi