O registo de regras de firewall permite-lhe auditar, validar e analisar os efeitos das suas regras de firewall. Por exemplo, pode determinar se uma regra de firewall concebida para recusar tráfego está a funcionar como previsto. O registo das regras de firewall também é útil se precisar de determinar quantas ligações são afetadas por uma determinada regra de firewall.
Ativa o registo das regras de firewall individualmente para cada regra de firewall cujas ligações tem de registar. O registo de regras de firewall é uma opção
para qualquer regra de firewall, independentemente da ação (allow
ou deny
) ou da direção
(entrada ou saída) da regra.
O registo de regras de firewall regista o tráfego de e para instâncias de máquinas virtuais (VMs) do Compute Engine. Isto inclui Google Cloud produtos criados em VMs do Compute Engine, como clusters do Google Kubernetes Engine (GKE) e instâncias do ambiente flexível do App Engine.
Quando ativa o registo para uma regra de firewall, Google Cloud cria uma entrada denominada registo de ligação sempre que a regra permite ou nega tráfego. Pode ver estes registos nos Registos na nuvem e exportá-los para qualquer destino suportado pela exportação dos Registos na nuvem.
Cada registo de ligação contém os endereços IP de origem e destino, o protocolo e as portas, a data e a hora, e uma referência à regra da firewall que foi aplicada ao tráfego.
O registo de regras de firewall está disponível para regras de firewall da VPC e políticas de firewall hierárquicas.
Para obter informações sobre a visualização de registos, consulte o artigo Use Firewall Rules Logging.
Especificações
O registo de regras de firewall tem as seguintes especificações:
O registo de regras de firewall pode ser ativado para o seguinte:
Regras de firewall em políticas de firewall hierárquicas, políticas de firewall de rede globais e políticas de firewall de rede regionais associadas a uma rede VPC normal.
Regras de firewall da VPC numa rede VPC normal.
Regras de firewall em políticas de firewall de rede regionais que estão associadas a uma rede da VPC RoCE.
O registo de regras de firewall não suporta o seguinte:
Regras de firewall de VPC em redes antigas.
Regras de recusa implícita de entrada e permissão implícita de saída de uma rede de VPC normal.
Regras de entrada e saída permitidas implícitas de uma rede de VPC RoCE.
O registo das regras de firewall apenas regista ligações TCP e UDP. Embora possa criar uma regra de firewall que se aplique a outros protocolos, não pode registar as respetivas ligações. Se também quiser registar outros protocolos, considere usar a duplicação de pacotes.
As entradas de registo são escritas na perspetiva das VMs. As entradas de registo só são criadas se uma regra de firewall tiver o registo ativado e se a regra se aplicar ao tráfego enviado para ou a partir da VM. As entradas são criadas de acordo com os limites de registo de ligações com base no melhor esforço.
O número de ligações que o registo de regras de firewall pode registar por unidade de tempo:
Baseia-se no tipo de máquina para redes VPC normais.
Depende da ação de monitorização ou registo da regra de firewall para redes da VPC RoCE.
As alterações às regras de firewall podem ser vistas nos registos de auditoria da VPC.
Exemplos de registo
É gerada uma entrada de registo sempre que uma regra de firewall com o registo ativado se aplica ao tráfego. Um determinado fluxo de pacotes pode gerar mais do que uma entrada de registo no total. No entanto, na perspetiva de uma determinada VM, só pode ser gerada, no máximo, uma entrada de registo se a regra de firewall que se aplica à mesma tiver o registo ativado.
Os exemplos seguintes mostram como funcionam os registos da firewall.
Exemplo de negação de saída
Neste exemplo:
- O tráfego entre instâncias de VM na rede VPC
example-net
no projetoexample-proj
é considerado. - As duas instâncias de VM são:
- VM1 na zona
us-west1-a
com o endereço IP10.10.0.99
nawest-subnet
(regiãous-west1
). - VM2 na zona
us-east1-b
com o endereço IP10.20.0.99
naeast-subnet
(regiãous-east1
).
- VM1 na zona
- Regra A: uma regra de firewall de recusa de saída tem como alvo todas as instâncias na rede, um destino de
10.20.0.99
(VM2) e aplica-se à porta TCP80
.- O registo está ativado para esta regra.
- Regra B: uma regra de firewall de permissão de entrada tem como destino todas as instâncias na rede, uma origem de
10.10.0.99
(VM1) e aplica-se à porta TCP80
.- O registo também está ativado para esta regra.
Os seguintes comandos gcloud
podem ser usados para criar as regras de firewall:
Regra A: regra de recusa de saída para a porta TCP
80
, aplicável a todas as instâncias, destino10.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
Regra B: regra de permissão de entrada para a porta TCP
80
, aplicável a todas as instâncias, origem10.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
Suponhamos que a VM1 tenta estabelecer ligação à VM2 na porta TCP 80
. São registadas as seguintes regras de firewall:
- É gerada uma entrada de registo para a regra A na perspetiva da VM1 enquanto a VM1 tenta estabelecer ligação a
10.20.0.99
(VM2). - Como a regra A bloqueia efetivamente o tráfego, a regra B não é considerada. Por isso, não existe nenhuma entrada de registo para a regra B na perspetiva da VM2.
É comunicado o seguinte registo do registo do firewall.
Campo | Valores |
---|---|
ligação | src_ip=10.10.0.99 src_port=[EPHEMERAL_PORT] dest_ip=10.20.0.99 dest_port=80 protocol=6 |
disposição | RECUSADO |
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 |
instância | 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 | Sem informações. Este campo só é usado se o destino estiver fora da sua rede da VPC. |
Exemplo de permissão de saída e entrada
Neste exemplo:
- O tráfego entre instâncias de VM na rede VPC
example-net
no projetoexample-proj
é considerado. - As duas instâncias de VM são:
- VM1 na zona
us-west1-a
com o endereço IP10.10.0.99
nawest-subnet
(regiãous-west1
). - VM2 na zona
us-east1-b
com o endereço IP10.20.0.99
naeast-subnet
(regiãous-east1
).
- VM1 na zona
- Regra A: uma regra de firewall de permissão de saída tem como destino todas as instâncias na rede, um destino de
10.20.0.99
(VM2) e aplica-se à porta TCP80
.- O registo está ativado para esta regra.
- Regra B: uma regra de firewall de permissão de entrada tem como destino todas as instâncias na rede, uma origem de
10.10.0.99
(VM1) e aplica-se à porta TCP80
.- O registo também está ativado para esta regra.
Os seguintes comandos gcloud
podem ser usados para criar as duas regras de firewall:
Regra A: regra de permissão de saída para a porta TCP
80
, aplicável a todas as instâncias, destino10.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
Regra B: regra de permissão de entrada para a porta TCP
80
, aplicável a todas as instâncias, origem10.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
Suponhamos que a VM1 tenta estabelecer ligação à VM2 na porta TCP 80
. São registadas as seguintes regras de firewall:
- É gerada uma entrada de registo para a regra A na perspetiva da VM1 enquanto a VM1 se liga a
10.20.0.99
(VM2). - É gerada uma entrada de registo para a regra B na perspetiva da VM2, enquanto a VM2 permite ligações
recebidas de
10.10.0.99
(VM1).
O seguinte registo do registo do firewall é comunicado pela VM1.
Campo | Valores |
---|---|
ligação | src_ip=10.10.0.99 src_port=[EPHEMERAL_PORT] dest_ip=10.20.0.99 dest_port=80 protocol=6 |
disposição | PERMITIDA |
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 |
instância | 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 | Sem informações. Este campo só é usado se o destino estiver fora da sua rede da VPC. |
O seguinte registo do registo do firewall é comunicado pela VM2.
Campo | Valores |
---|---|
ligação | src_ip=10.10.0.99 src_port=[EPHEMERAL_PORT] dest_ip=10.20.0.99 dest_port=80 protocol=6 |
disposição | PERMITIDA |
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 |
instância | 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 | Sem informações. Este campo só é usado se o destino estiver fora da sua rede da VPC. |
Exemplo de entrada da Internet
Neste exemplo:
- O tráfego de um sistema fora da rede VPC para uma instância de VM nessa rede é considerado.
example-net
A rede está no projetoexample-proj
. - O sistema na Internet tem o endereço IP
203.0.113.114
. - A VM1 na zona
us-west1-a
tem o endereço IP10.10.0.99
nawest-subnet
(regiãous-west1
). - Regra C: uma regra de firewall de permissão de entrada tem como destino todas as instâncias na rede, uma origem de qualquer endereço IP (
0.0.0.0/0
) e aplica-se à porta TCP80
.- O registo está ativado para esta regra.
- Regra D: uma regra de firewall de recusa de saída tem um destino de todas as instâncias na rede, um destino de qualquer endereço IP (
0.0.0.0/0
) e aplica-se a todos os protocolos.- O registo também está ativado para esta regra.
Os seguintes comandos gcloud
podem ser usados para criar as regras de firewall:
Regra C: regra de permissão de entrada para a porta TCP
80
, aplicável a todas as instâncias, qualquer origem: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
Regra D: regra de negação de saída para todos os protocolos, aplicável a todas as instâncias, qualquer destino:
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
Suponhamos que o sistema com o endereço IP 203.0.113.114
tenta estabelecer ligação à VM1 na porta TCP 80
. Acontece o seguinte:
- É gerada uma entrada de registo para a regra C na perspetiva da VM1 enquanto a VM1 aceita o tráfego de
203.0.113.114
. - Apesar da regra D, a VM1 tem autorização para responder ao pedido recebido porque Google Cloud as regras de firewall são com estado. Se o pedido recebido for permitido, as respostas estabelecidas não podem ser bloqueadas por nenhum tipo de regra de saída.
- Como a regra D não se aplica, não é considerada, pelo que não existe nenhuma entrada de registo para a regra D.
É comunicado o seguinte registo do registo do firewall.
Campo | Valores |
---|---|
ligação | src_ip=203.0.113.114 src_port=[EPHEMERAL_PORT] dest_ip=10.10.0.99 dest_port=80 protocol=6 |
disposição | PERMITIDA |
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 |
instância | 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 país região cidade |
Formato do registo da firewall
Sujeito às especificações, é criada uma entrada de registo no Cloud Logging para cada regra de firewall que tenha o registo ativado se essa regra se aplicar ao tráfego para ou a partir de uma instância de VM. Os registos são incluídos no campo de payload JSON de um LogEntry do Logging.
Os registos de registo contêm campos de base, que são os campos principais de cada registo de registo, e campos de metadados que adicionam informações adicionais. Pode controlar se os campos de metadados são incluídos. Se os omitir, pode poupar nos custos de armazenamento.
Alguns campos de registo suportam valores que também são campos. Estes campos podem ter mais do que um elemento de dados num determinado campo. Por exemplo, o campo connection
está no formato IpConnection
, que contém o endereço IP e a porta de origem e destino, além do protocolo, num único campo. Estes campos estão descritos nas tabelas seguintes.
Campo | Descrição | Tipo de campo: metadados básicos ou opcionais |
---|---|---|
ligação | IpConnection 5-Tuple que descreve o endereço IP de origem e destino, a porta de origem e destino, e o protocolo IP desta ligação. |
Base |
disposição | string Indica se a associação foi ALLOWED ou
DENIED . |
Base |
rule_details | RuleDetails Detalhes da regra que foi aplicada a esta associação. |
|
rule_details.reference campo |
Base | |
Outros campos de detalhes da regra | Metadados | |
instância | InstanceDetails Detalhes da instância de VM. Numa configuração de VPC partilhada, project_id corresponde à do projeto de serviço. |
Metadados |
vpc | VpcDetails Detalhes da rede VPC. Numa configuração de VPC partilhada, project_id corresponde à do projeto anfitrião. |
Metadados |
remote_instance | InstanceDetails Se o ponto final remoto da ligação for uma VM localizada no Compute Engine, este campo é preenchido com detalhes da instância da VM. |
Metadados |
remote_vpc | VpcDetails Se o ponto final remoto da ligação for uma VM localizada numa rede VPC, este campo é preenchido com os detalhes da rede. |
Metadados |
remote_location | GeographicDetails Se o ponto final remoto da ligação for externo à rede da VPC, este campo é preenchido com os metadados de localização disponíveis. |
Metadados |
IpConnection
Campo | Tipo | Descrição |
---|---|---|
src_ip | de string | Endereço IP de origem. Se a origem for uma VM do Compute Engine,
src_ip é o endereço IP interno principal ou um endereço
num intervalo de IPs de alias da interface de rede da VM. O endereço IP
externo não é apresentado. O registo mostra o endereço IP da VM, tal como a VM o vê no cabeçalho do pacote, tal como se executasse o TCP dump na VM. |
src_port | número inteiro | Porta de origem |
dest_ip | de string | Endereço IP de destino. Se o destino for uma Google Cloud VM,
dest_ip é o endereço IP interno principal ou um endereço
num intervalo de IPs de alias da interface de rede da VM. O endereço IP externo não é apresentado, mesmo que tenha sido usado para estabelecer a ligação. |
dest_port | número inteiro | Porta de destino |
protocolo | número inteiro | Protocolo IP da ligação |
RuleDetails
Campo | Tipo | Descrição |
---|---|---|
referência | de string | Referência à regra de firewall; formato:"network:{network name}/firewall:{firewall_name}" |
prioridade | número inteiro | A prioridade da regra de firewall. |
ação | de string | PERMITIR ou RECUSAR |
source_range[ ] | de string | Lista de intervalos de origem aos quais a regra de firewall se aplica. |
destination_range[ ] | de string | Lista de intervalos de destino aos quais a regra de firewall se aplica. |
ip_port_info[ ] | IpPortDetails | Lista de protocolos IP e intervalos de portas aplicáveis para regras. |
direção | de string | A direção à qual a regra de firewall se aplica (entrada ou saída). |
source_tag[ ] | de string | Lista de todas as etiquetas de origem às quais a regra de firewall se aplica. |
target_tag[ ] | de string | Lista de todas as etiquetas de destino às quais a regra de firewall se aplica. |
source_service_account[ ] | de string | Lista de todas as contas de serviço de origem às quais a regra de firewall se aplica. |
target_service_account[ ] | de string | Lista de todas as contas de serviço de destino às quais a regra de firewall se aplica. |
source_region_code[ ] | de string | Lista de todos os códigos de países de origem aos quais a regra de firewall se aplica. |
destination_region_code[ ] | de string | Lista de todos os códigos de países de destino aos quais a regra de firewall se aplica. |
source_fqdn[ ] | de string | Lista de todos os nomes de domínios de origem aos quais a regra da firewall se aplica. |
destination_fqdn[ ] | de string | Lista de todos os nomes de domínios de destino aos quais a regra de firewall se aplica. |
source_threat_intelligence[ ] | de string | Lista de todos os nomes das listas de informações sobre ameaças da Google às quais a regra de firewall se aplica. |
destination_threat_intelligence[ ] | de string | Lista de todos os nomes das listas de informações sobre ameaças da Google de destino às quais a regra de firewall se aplica. |
source_address_groups[ ] | de string | Lista de todos os grupos de endereços de origem aos quais a regra de firewall se aplica. |
destination_address_groups[ ] | de string | Lista de todos os grupos de endereços de destino aos quais a regra da firewall se aplica. |
IpPortDetails
Campo | Tipo | Descrição |
---|---|---|
ip_protocol | de string | Protocolo IP ao qual a regra de firewall se aplica. "ALL" se se aplicar a todos os protocolos. |
port_range[ ] | de string | Lista de intervalos de portas aplicáveis para regras; por exemplo, 8080-9090 . |
InstanceDetails
Campo | Tipo | Descrição |
---|---|---|
project_id | de string | ID do projeto que contém a VM |
vm_name | de string | Nome da instância da VM |
região | de string | Região da VM |
zona | de string | Zona da VM |
VpcDetails
Campo | Tipo | Descrição |
---|---|---|
project_id | de string | ID do projeto que contém a rede |
vpc_name | de string | Rede na qual a VM está a funcionar |
subnetwork_name | de string | Sub-rede na qual a VM está a funcionar |
GeographicDetails
Campo | Tipo | Descrição |
---|---|---|
continente | de string | Continente para pontos finais externos |
country | de string | País para pontos finais externos |
região | de string | Região para pontos finais externos |
cidade | de string | Cidade para pontos finais externos |
O que se segue?
- Para configurar o registo e ver os registos, consulte o artigo Use o registo de regras de firewall.
- Para ver estatísticas sobre como as regras de firewall estão a ser usadas, consulte Estatísticas de firewall.
- Para armazenar, pesquisar, analisar, monitorizar e alertar sobre dados de registos e eventos, consulte o Cloud Logging.
- Para encaminhar entradas de registo, consulte o artigo Configure e faça a gestão de destinos.