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 negare il traffico funziona come previsto. Il logging delle regole firewall è utile anche se devi determinare quante connessioni sono interessate da una determinata regola firewall.

Puoi abilitare il logging delle regole firewall singolarmente per ogni regola firewall di cui devi registrare le connessioni. 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) di Compute Engine. Sono inclusi i prodotti Google Cloud basati su VM di Compute Engine, come i cluster Google Kubernetes Engine (GKE) e le istanze dell'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 VPC che per i criteri firewall gerarchici.

Per informazioni sulla visualizzazione dei log, consulta Utilizzare il logging delle regole firewall.

Specifiche

Il logging delle regole firewall ha le seguenti specifiche:

Esempi di logging

Viene generata una voce di log ogni volta che al traffico viene applicata una regola firewall con il logging abilitato. Un determinato flusso di pacchetti può generare più di una voce di log in totale. Tuttavia, dal punto di vista di una determinata VM, è possibile generare al massimo una sola voce di log se per la regola firewall applicabile è abilitato il logging.

I seguenti esempi mostrano come funzionano i log del firewall.

Esempio di rifiuto del traffico in uscita

In questo esempio:

  • Viene preso in considerazione il traffico tra le istanze VM nella rete VPC example-net nel progetto example-proj.
  • Le due istanze VM sono:
    • VM1 nella zona us-west1-a con indirizzo IP 10.10.0.99 nella west-subnet (regione us-west1).
    • VM2 nella zona us-east1-b con indirizzo IP 10.20.0.99 nella east-subnet (regione us-east1).
  • Regola A: una regola firewall di negazione del traffico in uscita ha una destinazione di tutte le istanze nella rete, una destinazione 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 10.10.0.99 (VM1) e si applica alla porta TCP 80.
    • Il logging è abilitato per questa regola.

Per creare le regole firewall è possibile usare i seguenti comandi gcloud:

  • Regola A: regola di negazione del traffico 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.
Connessione da VM1 a VM2 (fai clic per ingrandire).

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

  • Viene generata una voce di log per la regola A dal punto di vista di VM1 quando 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 esistono voce di log per la regola B dal punto di vista di VM2.

Il record di 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
protocol=6
disposizione RIFIUTATA
rule_details riferimento = "network:example-net/firewall:rule-a"
priorità = 10
azione = DENY
destination_range = 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
remote_instance project_id="example-proj"
instance_name=VM2
region=us-east1
zone=us-east1-b
remote_vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=east-subnet
remote_location Nessuna informazione. Questo campo viene utilizzato solo se la destinazione si trova al di fuori della tua rete VPC.

Esempio di autorizzazione in uscita, autorizzazione in entrata

In questo esempio:

  • Viene preso in considerazione il traffico tra le istanze VM nella rete VPC example-net nel progetto example-proj.
  • Le due istanze VM sono:
    • VM1 nella zona us-west1-a con indirizzo IP 10.10.0.99 nella west-subnet (regione us-west1).
    • VM2 nella zona us-east1-b con indirizzo IP 10.20.0.99 nella east-subnet (regione us-east1).
  • Regola A: una regola firewall di autorizzazione in uscita ha una destinazione di tutte le istanze nella rete, una destinazione 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 10.10.0.99 (VM1) e si applica alla porta TCP 80.
    • 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.
Connessione da VM1 a VM2 (fai clic per ingrandire).

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

  • Viene generata una voce di log per la regola A dal punto di vista di VM1 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 entrata da 10.10.0.99 (VM1).

Il record di 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
protocol=6
disposizione CONSENTITA
rule_details riferimento = "network:example-net/firewall:rule-a"
priorità = 10
azione = CONSENTI
destination_range = 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
remote_instance project_id="example-proj"
instance_name=VM2
region=us-east1
zone=us-east1-b
remote_vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=east-subnet
remote_location Nessuna informazione. Questo campo viene utilizzato solo se la destinazione si trova al di fuori della tua rete VPC.

Il record di 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
protocol=6
disposizione CONSENTITA
rule_details riferimento = "network:example-net/firewall:rule-b"
priorità = 10
azione = CONSENTI
intervallo_origine = 10.10.0.99/32
ip_port_info = tcp:80
direzione = in entrata
istanza project_id="example-proj"
instance_name=VM2
region=us-east1
zone=us-east1-b
vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=east-subnet
remote_instance project_id="example-proj"
instance_name=VM1
region=us-west1
zone=us-west1-a
remote_vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=west-subnet
remote_location Nessuna informazione. Questo campo viene utilizzato solo se la destinazione si trova al di fuori della tua rete VPC.

Esempio di traffico in entrata internet

In questo esempio:

  • Viene preso in considerazione il traffico da un sistema esterno alla rete VPC example-net verso un'istanza VM nella rete in questione. La rete è nel progetto example-proj.
  • Il sistema su internet ha l'indirizzo IP 203.0.113.114.
  • La VM1 nella zona us-west1-a ha l'indirizzo IP 10.10.0.99 nella west-subnet (regione us-west1).
  • Regola C: una regola firewall di autorizzazione in entrata ha una destinazione di tutte le istanze nella 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 di negazione del traffico in uscita ha una destinazione di tutte le istanze nella rete, una destinazione di qualsiasi indirizzo IP (0.0.0.0/0) e si applica a tutti i protocolli.
    • Il logging è abilitato per questa regola.

Per creare le regole firewall è possibile usare 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 del traffico in uscita per tutti i protocolli, applicabile a tutte le istanze e 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.
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 quando 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 di 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
protocol=6
disposizione CONSENTITA
rule_details referenza = "network:my-vpc/firewall:rule-c"
priorità = 10
azione = CONSENTI
intervallo_origine = 0.0.0.0/0
ip_port_info = tcp:80
direction = in entrata
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
remote_location continente
paese
regione
città

Formato log del firewall

In conformità alle specifiche, in Cloud Logging viene creata una voce di log per ogni regola firewall per cui è abilitato il logging se questa regola si applica al traffico da o verso un'istanza VM. I record di log sono inclusi nel campo payload JSON di una voce LogEntry di Logging.

I record di log contengono campi di base, che sono 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 del log supportano valori che sono anche campi. Questi campi possono contenere più dati in un determinato campo. Ad esempio, il campo connection è nel 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 gli indirizzi IP di origine e di destinazione, le porte di origine e di destinazione e il protocollo IP di questa connessione.
Livelli
disposizione string
Indica se la connessione era ALLOWED o DENIED.
Livelli
rule_details RuleDetails
Dettagli della regola applicata a questa connessione.
Campo rule_details.reference Livelli
Altri campi dei dettagli delle regole Metadati
istanza InstanceDetails
Dettagli istanza VM. In una configurazione di un VPC condiviso, project_id corrisponde a quello del progetto di servizio.
Metadati
vpc VpcDetails
Dettagli della rete VPC. In una configurazione di un VPC condiviso, project_id corrisponde a quello del progetto host.
Metadati
remote_instance InstanceDetails
Se l'endpoint remoto della connessione era una VM in Compute Engine, questo campo viene compilato con i dettagli dell'istanza VM.
Metadati
remote_vpc 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
remote_location GeographicDetails
Se l'endpoint remoto della connessione era esterno alla rete VPC, questo campo viene compilato con i metadati sulla posizione disponibili.
Metadati

IpConnection

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 è visualizzato. Logging mostra l'indirizzo IP della VM così come la VM lo vede nell'intestazione del pacchetto, come se eseguissi il dump TCP sulla VM.
src_port 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 la connessione.
dest_port integer Porta di destinazione
protocollo integer Protocollo IP della connessione

RuleDetails

Campo Tipo Descrizione
reference string Riferimento alla regola firewall; formato:
"network:{network name}/firewall:{firewall_name}"
priorità integer La priorità della regola firewall.
azione string ALLOW o DENY
source_range[ ] 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 degli intervalli di porte applicabili per le regole.
direction string La direzione a cui si applica la regola firewall (in entrata o in uscita).
source_tag[ ] string Elenco di tutti i tag di origine a cui si applica la regola firewall.
target_tag[ ] 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.
account_servizio_target[ ] string Elenco di tutti gli account di servizio di destinazione a cui si applica la regola firewall.
source_region_code[ ] string Elenco di tutti i codici paese di origine a cui si applica la regola firewall.
destination_region_code[ ] string Elenco di tutti i codici paese di destinazione a cui si applica la regola firewall.
source_fqdn[ ] string Elenco di tutti i nomi di dominio di origine a cui si applica la regola firewall.
destination_fqdn[ ] string Elenco di tutti i nomi di dominio di destinazione a cui si applica la regola firewall.
source_threat_intelligence[ ] string Elenco di tutti i nomi degli elenchi di Threat Intelligence di origine a cui si applica la regola firewall.
intelligence_minaccia_destinazione[ ] string Elenco di tutti i nomi degli elenchi di Threat Intelligence di destinazione a cui si applica la regola firewall.
source_address_groups[ ] string Elenco di tutti i gruppi di indirizzi di origine a cui si applica la regola firewall.
destination_address_groups[ ] string Elenco di tutti i gruppi di indirizzi di destinazione a cui si applica la regola firewall.

IpPortDetails

Campo Tipo Descrizione
ip_protocol string Protocollo IP a cui si applica la regola firewall. "ALL" se si applica a tutti i protocolli.
port_range[ ] string Elenco di intervalli di porte applicabili per le regole, ad esempio 8080-9090.

InstanceDetails

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

VpcDetails

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

GeographicDetails

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

Passaggi successivi