Registo de regras de firewall

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:

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 projeto example-proj é considerado.
  • As duas instâncias de VM são:
    • VM1 na zona us-west1-a com o endereço IP 10.10.0.99 na west-subnet (região us-west1).
    • VM2 na zona us-east1-b com o endereço IP 10.20.0.99 na east-subnet (região us-east1).
  • 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 TCP 80.
    • 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 TCP 80.
    • 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, destino 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
    
  • Regra B: regra de permissão de entrada para a porta TCP 80, aplicável a todas as instâncias, origem 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
    
Ligação da VM1 à VM2.
Ligação da VM1 à VM2 (clique para aumentar).

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 projeto example-proj é considerado.
  • As duas instâncias de VM são:
    • VM1 na zona us-west1-a com o endereço IP 10.10.0.99 na west-subnet (região us-west1).
    • VM2 na zona us-east1-b com o endereço IP 10.20.0.99 na east-subnet (região us-east1).
  • 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 TCP 80.
    • 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 TCP 80.
    • 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, destino 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
    
  • Regra B: regra de permissão de entrada para a porta TCP 80, aplicável a todas as instâncias, origem 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
    
Ligação da VM1 à VM2.
Ligação da VM1 à VM2 (clique para aumentar).

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 projeto example-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 IP 10.10.0.99 na west-subnet (região us-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 TCP 80.
    • 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
    
Ligação da Internet à VM.
Ligação da Internet à VM (clique para aumentar).

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?