Il logging delle regole del firewall consente di controllare, verificare e analizzare gli effetti delle regole del 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.
Devi attivare il logging delle regole firewall singolarmente per ogni regola firewall per le cui connessioni devi generare log. 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 attivi il logging per una regola firewall, Google Cloud crea una voce chiamata 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.
La registrazione delle regole firewall è disponibile sia per le regole firewall VPC sia 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:
- Puoi attivare il Logging delle regole firewall solo per le regole in una rete Virtual Private Cloud (VPC). Le reti legacy non sono supportate.
- Il logging delle regole del firewall registra solo le connessioni TCP e UDP. Sebbene tu possa creare una regola firewall applicabile ad altri protocolli, non puoi registrare le relative connessioni. Se vuoi registrare anche altri protocolli, valuta la possibilità di utilizzare il mirroring dei pacchetti.
- Non puoi attivare il logging delle regole firewall per le regole di negazione del traffico in entrata e di consenso del traffico in uscita implicite.
- Le voci di log vengono scritte dal punto di vista delle VM. Le voci di log vengono create solo se per una regola firewall è abilitato il logging e se la regola si applica al traffico inviato alla o dalla VM. Le voci vengono create in base ai limiti di logging delle connessioni secondo il criterio del best effort.
- Il numero di connessioni che è possibile registrare 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
Viene generata una voce di log ogni volta che una regola firewall con il logging abilitato si applica al traffico. Un determinato flusso di pacchetti può generare più di una voce di log in totale. Tuttavia, dal punto di vista di una determinata VM, può essere generata al massimo una voce di log se la regola firewall che si applica è attivata.
I seguenti esempi mostrano come funzionano i log della firewall.
Esempio di rifiuto in uscita
In questo esempio:
- Viene preso in considerazione il traffico tra le istanze VM nella rete VPC
example-net
nel progettoexample-proj
. - Le due istanze VM sono:
- VM1 nella zona
us-west1-a
con indirizzo IP10.10.0.99
inwest-subnet
(regioneus-west1
). - VM2 nella zona
us-east1-b
con indirizzo IP10.20.0.99
ineast-subnet
(regioneus-east1
).
- VM1 nella zona
- Regola A: una regola firewall di rifiuto in uscita ha come target tutte le istanze della 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 come target tutte le istanze della rete, una sorgente
10.10.0.99
(VM1) e si applica alla porta TCP 80.- Il logging è abilitato anche per questa regola.
Per creare le regole del 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,
10.10.0.99
di origine: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 la VM1 tenti di connettersi alla VM2 sulla porta TCP 80. Vengono registrate le seguenti regole del firewall:
- Quando la VM1 tenta di connettersi a
10.20.0.99
(VM2), viene generata una voce di log per la regola A dal punto di vista della VM1. - Poiché la regola A blocca effettivamente il traffico, la regola B non viene mai presa in considerazione, quindi non esiste una voce di log per la regola B dal punto di vista della VM2.
Il record del log della 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 | RIFIUTATO |
rule_details | reference = "network:example-net/firewall:rule-a" priority = 10 action = DENY destination_range = 10.20.0.99/32 ip_port_info = tcp:80 direction = egress |
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 è al di fuori della rete VPC. |
Esempio di autorizzazione in uscita e autorizzazione in entrata
In questo esempio:
- Viene preso in considerazione il traffico tra le istanze VM nella rete VPC
example-net
nel progettoexample-proj
. - Le due istanze VM sono:
- VM1 nella zona
us-west1-a
con indirizzo IP10.10.0.99
inwest-subnet
(regioneus-west1
). - VM2 nella zona
us-east1-b
con indirizzo IP10.20.0.99
ineast-subnet
(regioneus-east1
).
- VM1 nella zona
- Regola A: una regola firewall di uscita consentita ha come target tutte le istanze della 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 come target tutte le istanze della rete, una sorgente
10.10.0.99
(VM1) e si applica alla porta TCP 80.- Il logging è abilitato anche per questa regola.
Per creare le due regole del firewall, puoi utilizzare i seguenti comandi gcloud
:
Regola A: regola allow 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,
10.10.0.99
di origine (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 la VM1 tenti di connettersi alla VM2 sulla porta TCP 80. Vengono registrate le seguenti regole del firewall:
- Quando la VM1 si connette a
10.20.0.99
(VM2), viene generata una voce di log per la regola A dal punto di vista della VM1. - Viene generata una voce di log per la regola B dal punto di vista della VM2 perché la VM2 consente connessioni in entrata da
10.10.0.99
(VM1).
Il record del log del firewall registrato dalla 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 | reference = "network:example-net/firewall:rule-a" priority = 10 action = ALLOW destination_range = 10.20.0.99/32 ip_port_info = tcp:80 direction = egress |
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 è al di fuori della rete VPC. |
Il record del log del firewall registrato dalla 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 | reference = "network:example-net/firewall:rule-b" priority = 10 action = ALLOW source_range = 10.10.0.99/32 ip_port_info = tcp:80 direction = ingress |
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 è al di fuori della rete VPC. |
Esempio di traffico in entrata da internet
In questo esempio:
- Viene preso in considerazione il traffico da un sistema esterno alla rete VPC
example-net
a un'istanza VM in quella rete. La rete si trova nel progettoexample-proj
. - Il sistema su internet ha l'indirizzo IP
203.0.113.114
. - La VM1 nella zona
us-west1-a
ha l'indirizzo IP10.10.0.99
nellawest-subnet
(regioneus-west1
). - Regola C: una regola firewall di autorizzazione in entrata ha come target tutte le istanze della rete, una sorgente 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 rifiuto in uscita ha come target tutte le istanze della rete, una destinazione di qualsiasi indirizzo IP (
0.0.0.0/0
) e si applica a tutti i protocolli.- Il logging è abilitato anche per questa regola.
Per creare le regole del 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 rifiuto 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
Supponiamo che il sistema con indirizzo IP 203.0.113.114
provi a connettersi alla VM1 sulla porta TCP 80. Si verifica quanto segue:
- Viene generata una voce di log per la regola C dal punto di vista della VM1 quando la VM1 accetta il traffico da
203.0.113.114
. - Nonostante la regola D, la VM1 è autorizzata a 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 alcun tipo di regola di uscita.
- Poiché la regola D non si applica, non viene mai presa in considerazione, quindi non esiste una voce di log per la regola D.
Il record del log della 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 | reference = "network:my-vpc/firewall:rule-c" priority = 10 action = ALLOW source_range = 0.0.0.0/0 ip_port_info = tcp:80 direction = 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 |
remote_location | continent country region city |
Formato dei log del firewall
In base alle specifiche, viene creata una voce di log in Cloud Logging per ogni regola firewall per la quale è attivo il logging se la regola si applica al traffico verso o da 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, che sono i campi principali di ogni record di log, e campi di metadati che aggiungono ulteriori informazioni. Puoi controllare se i campi dei metadati sono inclusi. Se li ometti, puoi risparmiare sui costi di archiviazione.
Alcuni campi di log supportano valori che sono anche campi. Questi campi possono contenere più di un dato in un determinato campo. Ad esempio, il campo connection
è nel formato IpConnection
, che contiene l'indirizzo IP e la porta di origine e di destinazione, 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 Una 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 |
rule_details | RuleDetails Dettagli della regola applicata a questa connessione. |
|
Campo rule_details.reference |
Livelli | |
Altri campi dei dettagli della regola | Metadati | |
istanza | InstanceDetails Dettagli dell'istanza VM. In una configurazione del VPC condiviso, project_id corrisponde a quello del progetto di servizio. |
Metadati |
vpc | VpcDetails Dettagli della rete VPC. In una configurazione del VPC condiviso, project_id corrisponde a quello del progetto host. |
Metadati |
remote_instance | InstanceDetails Se l'endpoint remoto della connessione era una VM situata 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 situata in una rete VPC, questo campo viene compilato 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 della località disponibili. |
Metadati |
IpConnection
Campo | Tipo | Descrizione |
---|---|---|
src_ip | string | Indirizzo IP di origine. Se l'origine è una VM 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. I log mostrano l'indirizzo IP della VM come lo vede la VM nell'intestazione del pacchetto, come se avessi eseguito 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 visualizzato anche se è stato utilizzato per effettuare la connessione. |
dest_port | integer | Porta di destinazione |
protocollo | integer | Protocollo IP della connessione |
RuleDetails
Campo | Tipo | Descrizione |
---|---|---|
riferimento | 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 degli intervalli di origine a cui si applica la regola firewall. |
intervallo_destinazione[ ] | string | Elenco degli intervalli di destinazione a cui si applica la regola firewall. |
ip_port_info[ ] | IpPortDetails | Elenco dei 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. |
target_service_account[ ] | 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 del firewall. |
source_fqdn[ ] | string | Elenco di tutti i nomi di dominio di origine a cui si applica la regola del firewall. |
destination_fqdn[ ] | string | Elenco di tutti i nomi di dominio di destinazione a cui si applica la regola del firewall. |
source_threat_intelligence[ ] | string | Elenco di tutti i nomi degli elenchi di origine di Google Threat Intelligence a cui si applica la regola del firewall. |
destination_threat_intelligence[ ] | string | Elenco di tutti i nomi degli elenchi di Google Threat Intelligence di destinazione a cui si applica la regola del 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 | Il protocollo IP a cui si applica la regola firewall. "ALL" se si applica a tutti i protocolli. |
intervallo_porte[ ] | string | Elenco degli 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 opera la VM |
subnetwork_name | string | Subnet su cui opera la VM |
GeographicDetails
Campo | Tipo | Descrizione |
---|---|---|
continente | string | Continente per gli endpoint esterni |
country | string | Paese per gli endpoint esterni |
regione | string | Regione per gli endpoint esterni |
city | string | Città per gli endpoint esterni |
Passaggi successivi
- Per configurare il logging e visualizzare i log, consulta Utilizzare il logging delle regole firewall.
- Per informazioni sull'utilizzo delle regole firewall, consulta Firewall Insights.
- Per archiviare, cercare, analizzare, monitorare e creare avvisi su dati di log ed eventi, consulta Cloud Logging.
- Per instradare le voci di log, consulta Configurare e gestire i sink.