Il logging delle regole firewall consente di controllare, verificare e analizzare gli effetti delle regole firewall. Ad esempio, puoi determinare se un firewall progettata per negare il traffico funziona come previsto. Il logging delle regole firewall è utile anche se devi determinare come molte 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 Compute Engine di macchine virtuali (VM). Sono inclusi Prodotti Google Cloud basati su Compute Engine VM, ad esempio Google Kubernetes Engine (GKE) cluster e dell'ambiente flessibile di App Engine.
Quando abiliti il logging per una regola firewall, Google Cloud crea una voce denominato record di connessione ogni volta che la regola consente o nega il traffico. Tu possono visualizzare questi record in Cloud Logging ed esportare i log in qualsiasi destinazione supportata dall'esportazione di Cloud Logging.
Ogni record di connessione contiene gli indirizzi IP di origine e di destinazione, il protocollo e le porte, nonché la data e l'ora, nonché un riferimento alla regola firewall applicati al traffico.
Il logging delle regole firewall è disponibile sia per i VPC regole firewall e criteri firewall gerarchici.
Per informazioni sulla visualizzazione dei log, consulta Utilizzare Logging delle regole firewall.
Specifiche
Il logging delle regole firewall ha le seguenti specifiche:
- Puoi abilitare 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 firewall registra solo le connessioni TCP e UDP. Sebbene sia possibile 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 Mirroring pacchetto.
- Non puoi abilitare il logging delle regole firewall per regole di negazione in entrata e di autorizzazione implicita in uscita.
- Le voci di log vengono scritte dal punto di vista delle VM. Voci di log vengono create solo se una regola firewall ha il logging abilitato e se la regola si applica al traffico inviato alla o dalla VM. Le voci vengono create in base i limiti di logging delle connessioni con il massimo sforzo.
- Il numero di connessioni che è possibile registrare in una determinata media si basa sul tipo di macchina.
- Le modifiche alle regole firewall possono essere visualizzate in Audit log VPC.
Esempi di logging
Ogni volta che viene applicata una regola firewall con logging abilitato viene generata una voce di log al traffico. Un dato flusso di pacchetti può generare in totale più di una voce di log. Tuttavia, dal punto di vista di una determinata VM, può essere eseguita al massimo una sola voce di log generato se la regola firewall che si applica ha il logging abilitato.
I seguenti esempi mostrano come funzionano i log del firewall.
Esempio di negazione in uscita
In questo esempio:
- Traffico tra istanze VM nella rete VPC
example-net
in Progettoexample-proj
preso in considerazione. - Le due istanze VM sono:
- VM1 nella zona
us-west1-a
con indirizzo IP10.10.0.99
nellawest-subnet
(us-west1
regione). - VM2 nella zona
us-east1-b
con indirizzo IP10.20.0.99
nellaeast-subnet
(us-east1
regione).
- VM1 nella zona
- Regola A: una regola firewall di negazione in uscita ha la destinazione di tutte le istanze
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 la destinazione di tutte le istanze
rete, un'origine di
10.10.0.99
(VM1) e si applica alla porta TCP 80.- Per questa regola è abilitato anche il logging.
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 fonte
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 provi a connettersi alla VM 2 sulla porta TCP 80. Il firewall che segue vengono registrate:
- 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, non esiste una voce di log per la regola B dal punto di vista della 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 protocollo=6 |
disposizione | RIFIUTATO |
rule_details | riferimento = "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 regione=us-west1 zona=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 regione=us-east1 zona=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 all'esterno alla tua rete VPC. |
Esempio di autorizzazione in uscita e di autorizzazione in entrata
In questo esempio:
- Traffico tra istanze VM nella rete VPC
example-net
in Progettoexample-proj
preso in considerazione. - Le due istanze VM sono:
- VM1 nella zona
us-west1-a
con indirizzo IP10.10.0.99
nellawest-subnet
(us-west1
regione). - VM2 nella zona
us-east1-b
con indirizzo IP10.20.0.99
nellaeast-subnet
(us-east1
regione).
- VM1 nella zona
- Regola A: una regola firewall di autorizzazione in uscita ha la destinazione di tutte le istanze nel
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 la destinazione di tutte le istanze
rete, un'origine di
10.10.0.99
(VM1) e si applica alla porta TCP 80.- Per questa regola è abilitato anche il logging.
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 provi a connettersi alla VM 2 sulla porta TCP 80. Il firewall che segue vengono registrate:
- Una voce di log per la regola A dal punto di vista di VM1 viene generata come VM1
si connette a
10.20.0.99
(VM2). - Viene generata una voce di log per la regola B dal punto di vista della VM 2 mentre VM2 consente
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 protocollo=6 |
disposizione | CONSENTITA |
rule_details | riferimento = "network:example-net/firewall:rule-a" priorità = 10 azione = ALLOW intervallo_destinazione = 10.20.0.99/32 ip_port_info = tcp:80 direzione = in uscita |
istanza | project_id="example-proj" instance_name=VM1 regione=us-west1 zona=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 regione=us-east1 zona=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 all'esterno alla 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 protocollo=6 |
disposizione | CONSENTITA |
rule_details | riferimento = "network:example-net/firewall:rule-b" priorità = 10 azione = ALLOW intervallo_origine = 10.10.0.99/32 ip_port_info = tcp:80 direzione = in entrata |
istanza | project_id="example-proj" instance_name=VM2 regione=us-east1 zona=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 regione=us-west1 zona=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 all'esterno alla tua rete VPC. |
Esempio di traffico in entrata da internet
In questo esempio:
- Traffico da un sistema esterno alla rete VPC
example-net
verso una VM in questa rete. La rete è inexample-proj
progetto. - L'indirizzo IP del sistema su internet è
203.0.113.114
. - La VM1 nella zona
us-west1-a
ha l'indirizzo IP10.10.0.99
inwest-subnet
(us-west1
regione). - Regola C: una regola firewall di autorizzazione in entrata ha una destinazione di tutte le istanze in
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 negazione in uscita ha la destinazione di tutte le istanze
rete, una destinazione di qualsiasi indirizzo IP (
0.0.0.0/0
) e si applica a tutte protocolli.- Per questa regola è abilitato anche il logging.
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 fonte:
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 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
provi a connettersi alla VM1
sulla porta TCP 80. Si verifica quanto segue:
- Una voce di log per la regola C dal punto di vista di VM1 viene generata man mano che VM1 accetta
traffico proveniente da
203.0.113.114
. - Nonostante la regola D, VM1 è autorizzato a rispondere alla richiesta in entrata perché Le regole firewall di Google Cloud sono stateful. Se la richiesta in entrata è consentite, le risposte stabilite non possono essere bloccate da alcun tipo di regola in uscita.
- Poiché la regola D non è applicabile, non viene mai considerata, quindi non è presente alcuna 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 protocollo=6 |
disposizione | CONSENTITA |
rule_details | riferimento = "network:my-vpc/firewall:rule-c" priorità = 10 azione = ALLOW intervallo_origine = 0.0.0.0/0 ip_port_info = tcp:80 direzione = in entrata |
istanza | project_id="example-proj" instance_name=VM1 regione=us-west1 zona=us-west1-a |
vpc | project_id="example-proj" vpc_name=example-net subnetwork_name=west-subnet |
remote_location | continente paese regione città |
Formato log firewall
Fatte salve le specifiche, viene creata una voce di log in Cloud Logging per ogni regola firewall che logging abilitato se questa regola si applica al traffico da o verso un'istanza VM. Registra sono inclusi nel campo del payload JSON di un file LogEntry.
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 e campi dei metadati. Se le ometti, puoi risparmiare sui costi di archiviazione.
Alcuni campi del log supportano valori che sono anche campi. Questi campi possono contenere
di un dato in un determinato campo. Ad esempio, il campo connection
è
nel formato IpConnection
, che contiene l'IP di origine e quello di destinazione
e la porta, più il protocollo, in un unico campo. Questi campi sono
descritti nelle seguenti tabelle.
Campo | Descrizione | Tipo di campo: metadati di base o facoltativi |
---|---|---|
connessione | IpConnection 5-Tupla che descrive l'indirizzo IP di origine e di destinazione, l'origine e 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 di dettagli delle regole | 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 Compute Engine, questo campo viene compilato con un'istanza VM i dettagli. |
Metadati |
remote_vpc | VpcDetails Se l'endpoint remoto della connessione era una VM situata in una rete VPC, questo campo viene compilato con la rete i dettagli. |
Metadati |
remote_location | GeographicDetails Se l'endpoint remoto della connessione era esterno alla rete VPC, questo campo viene compilato con i valori metadati sulla posizione. |
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'IP esterno
l'indirizzo non viene visualizzato. Logging mostra l'indirizzo IP della VM 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'IP esterno
non viene mostrato nemmeno 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 | CONSENTI o DENY |
intervallo_origine[ ] | 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 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). |
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 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 di origine di Threat Intelligence che la regola firewall a cui si applica. |
destination_threat_intelligence[ ] | string | Elenco di tutti i nomi di destinazione Threat Intelligence che la regola firewall a cui si applica. |
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. "TUTTI" 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 è operativa la VM |
subnetwork_name | string | Subnet su cui è operativa la VM |
GeographicDetails
Campo | Tipo | Descrizione |
---|---|---|
continente | string | Continente per endpoint esterni |
country | string | Paese per endpoint esterni |
regione | string | Regione per endpoint esterni |
city | string | Città per endpoint esterni |
Passaggi successivi
- Per configurare il logging e visualizzare i log, consulta Utilizzare il logging delle regole firewall.
- Per ottenere insight su come vengono utilizzate le regole firewall: consulta Firewall Insights.
- Per archiviare, cercare, analizzare, monitorare e creare avvisi su dati di log ed eventi, consulta Cloud Logging.
- Per eseguire il routing delle voci di log, consulta Configurare e gestire i sink.