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:
- Puoi abilitare il logging delle regole firewall per le regole in una rete Virtual Private Cloud (VPC). Le reti precedenti non sono supportate.
- Il logging delle regole firewall registra solo le connessioni TCP e UDP. Anche se puoi creare una regola firewall applicabile ad altri protocolli, non puoi registrarne le connessioni. Se vuoi registrare anche altri protocolli, valuta la possibilità di utilizzare Mirroring pacchetto.
- Non puoi attivare il logging delle regole firewall per le regole implicite per negare il traffico in entrata e per il traffico implicito in uscita.
- Le voci di log vengono scritte dal punto di vista delle VM. Le voci di log vengono create solo se la regola firewall ha il logging abilitato e se la regola si applica al traffico inviato a o dalla VM. Le voci vengono create in base ai limiti del logging delle connessioni in base al migliore sforzo.
- Il numero di connessioni che possono essere registrate in un determinato intervallo si basa sul tipo di macchina.
- Le modifiche alle regole firewall possono essere visualizzate nei log di controllo VPC.
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 progettoexample-proj
. - Le due istanze VM sono:
- VM 1 nella zona
us-west1-a
con indirizzo IP10.10.0.99
nella regionewest-subnet
(us-west1
). - VM 2 nella zona
us-east1-a
con indirizzo IP10.20.0.99
nella regioneeast-subnet
(us-east1
).
- VM 1 nella zona
- 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
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 progettoexample-proj
. - Le due istanze VM sono:
- VM 1 nella zona
us-west1-a
con indirizzo IP10.10.0.99
nella regionewest-subnet
(us-west1
). - VM 2 nella zona
us-east1-a
con indirizzo IP10.20.0.99
nella regioneeast-subnet
(us-east1
).
- VM 1 nella zona
- 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
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 progettoexample-proj
. - Il sistema su Internet ha un indirizzo IP
203.0.113.114
. - La VM 1 nella zona
us-west1-a
ha l'indirizzo IP10.10.0.99
nella regionewest-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
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
- Per configurare il logging e visualizzarli, vedi Utilizzare il logging delle regole firewall.
- Per archiviare, cercare, analizzare, monitorare e creare avvisi su dati di log ed eventi, vedi Cloud Logging.
- Per eseguire il routing delle voci di log, vedi Configurare e gestire i sink.