Registro de reglas de firewall

El registro de reglas de firewall te permite inspeccionar, verificar y analizar los efectos de tus reglas de firewall. Por ejemplo, puedes determinar si una regla de firewall diseñada para la denegación de tráfico funciona según lo previsto. Este registro también es útil si necesitas determinar cuántas conexiones se ven afectadas por una regla de firewall determinada.

Habilita el registro de las reglas de firewall de forma individual para las reglas cuyas conexiones debas registrar. El registro de las reglas de firewall es una opción que se puede aplicar a cualquier regla de firewall, sin importar la acción (allow o deny) o la dirección (entrada o salida) de la regla.

El registro de reglas de firewall registra el tráfico desde y hacia las instancias de máquina virtual (VM) de Compute Engine. Esto incluye los productos de Google Cloud compilados en las VM de Compute Engine, comoclústeres de Google Kubernetes Engine (GKE) e instancias de entorno flexible de App Engine.

Cuando habilitas el registro para una regla de firewall en Google Cloud, se crea una entrada llamada registro de conexión cada vez que se permite o deniega tráfico en la regla. Puedes ver estos registros en Cloud Logging y exportarlos a cualquier destino que admita la exportación de Cloud Logging.

Cada registro de conexión contiene las direcciones IP de origen y destino, el protocolo y los puertos, la fecha y la hora, y una referencia a la regla de firewall que se aplica al tráfico.

El registro de las reglas de firewall está disponible para las reglas de firewall de VPC y las políticas de firewall jerárquicas.

Para obtener información sobre cómo ver los registros, consulta Usa el registro de las reglas de firewall.

Especificaciones

El registro de las reglas de firewall tiene las siguientes especificaciones:

Ejemplos de registro

Cada vez que una regla de firewall con el registro habilitado se aplica al tráfico, se genera una entrada de registro. Un flujo de paquetes puede generar más de una entrada de registro. Sin embargo, desde la perspectiva de una VM determinada, solo se puede generar una entrada de registro si la regla de firewall que se aplica a ella tiene habilitado el registro.

En los siguientes ejemplos, se muestra cómo funcionan los registros de firewall.

Ejemplo de denegación de salida

En este ejemplo, sucede lo siguiente:

  • Se tiene en cuenta el tráfico entre las instancias de VM en la red de VPC example-net del proyecto example-proj.
  • Estas son las dos instancias de VM:
    • La VM1 en la zona us-west1-a con la dirección IP 10.10.0.99 en west-subnet (región us-west1)
    • La VM2 en la zona us-east1-b con la dirección IP 10.20.0.99 en east-subnet (región us-east1)
  • Regla A: una regla de firewall de denegación de salida se orienta a todas las instancias de la red y se aplica al puerto TCP 80, y su destino es 10.20.0.99 (VM2).
    • El registro está habilitado para esta regla.
  • Regla B: una regla de firewall de permiso de entrada se orienta a todas las instancias de la red y se aplica al puerto TCP 80, y su origen es 10.10.0.99 (VM1).
    • El registro también está habilitado para esta regla.

Se pueden usar los siguientes comandos de gcloud para crear las reglas de firewall:

  • Regla A: regla de denegación de salida para TCP 80, aplicable a todas las instancias y con el destino 10.20.0.99, como se muestra a continuación:

    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
    
  • Regla B: regla de permiso de entrada para TCP 80, aplicable a todas las instancias y con el origen 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
    
Conexión de VM1 a VM2.
Conexión de VM1 a VM2 (haz clic para ampliar).

Supongamos que la VM1 intenta conectarse a la VM2 en el puerto TCP 80. Se registran las siguientes reglas de firewall:

  • Una entrada de registro para la regla A desde la perspectiva de la VM1 se genera cuando, en esta VM, se intenta establecer la conexión con 10.20.0.99 (VM2).
  • Debido a que la regla A realmente bloquea el tráfico, la regla B nunca se tiene en cuenta, por lo que no hay entrada de registro para la regla B desde la perspectiva de la VM2.

En el siguiente ejemplo, se genera el registro de firewall.

Campo Valores
connection src_ip=10.10.0.99
src_port=[EPHEMERAL_PORT]
dest_ip=10.20.0.99
dest_port=80
protocol=6
disposition DENIED
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
instance 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 No hay información. Este campo solo se usa si el destino está fuera de tu red de VPC.

Ejemplo de reglas de permiso de salida y permiso de entrada

En este ejemplo, sucede lo siguiente:

  • Se tiene en cuenta el tráfico entre las instancias de VM en la red de VPC example-net del proyecto example-proj.
  • Estas son las dos instancias de VM:
    • La VM1 en la zona us-west1-a con la dirección IP 10.10.0.99 en west-subnet (región us-west1)
    • La VM2 en la zona us-east1-b con la dirección IP 10.20.0.99 en east-subnet (región us-east1)
  • Regla A: una regla de firewall de permiso de salida se orienta a todas las instancias de la red y se aplica al puerto TCP 80, y su destino es 10.20.0.99 (VM2).
    • El registro está habilitado para esta regla.
  • Regla B: una regla de firewall de permiso de entrada se orienta a todas las instancias de la red y se aplica al puerto TCP 80, y su origen es 10.10.0.99 (VM1).
    • El registro también está habilitado para esta regla.

Se pueden usar los siguientes comandos de gcloud para crear las siguientes dos reglas de firewall:

  • Regla A: regla de permiso de salida para TCP 80, aplicable a todas las instancias y con el destino 10.20.0.99 (VM2), como se muestra a continuación:

    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
    
  • Regla B: regla de permiso de entrada para TCP 80, aplicable a todas las instancias y con el origen 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
    
Conexión de VM1 a VM2.
Conexión de VM1 a VM2 (haz clic para ampliar).

Supongamos que la VM1 intenta conectarse a la VM2 en el puerto TCP 80. Se registran las siguientes reglas de firewall:

  • Se genera una entrada de registro para la regla A desde la perspectiva de la VM1 cuando, en esta VM, se establece una conexión con 10.20.0.99 (VM2).
  • Se genera una entrada de registro para la regla B desde la perspectiva de la VM2 cuando, en esta VM, se permiten las conexiones entrantes desde 10.10.0.99 (VM1).

El registro de firewall que informa la VM1 se genera en el siguiente ejemplo.

Campo Valores
connection src_ip=10.10.0.99
src_port=[EPHEMERAL_PORT]
dest_ip=10.20.0.99
dest_port=80
protocol=6
disposition ALLOWED
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
instance 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 No hay información. Este campo solo se usa si el destino está fuera de tu red de VPC.

El registro de firewall que informa la VM2 se genera en el siguiente ejemplo.

Campo Valores
connection src_ip=10.10.0.99
src_port=[EPHEMERAL_PORT]
dest_ip=10.20.0.99
dest_port=80
protocol=6
disposition ALLOWED
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
instancia 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 No hay información. Este campo solo se usa si el destino está fuera de tu red de VPC.

Ejemplo de tráfico de entrada de Internet

En este ejemplo, sucede lo siguiente:

  • Se tiene en cuenta el tráfico desde un sistema que se encuentra fuera de la red de VPC example-net hacia una instancia de VM en esa red. La red está en el proyecto example-proj.
  • El sistema en Internet tiene la dirección IP 203.0.113.114.
  • La VM1 de la zona us-west1-a tiene la dirección IP 10.10.0.99 en west-subnet (región us-west1).
  • Regla C: una regla de firewall de permiso de entrada se orienta a todas las instancias de la red, puede tener cualquier dirección IP (0.0.0.0/0) como origen y se aplica al puerto TCP 80.
    • El registro está habilitado para esta regla.
  • Regla D: una regla de firewall de denegación de salida se orienta a todas las instancias de la red, puede tener cualquier dirección IP (0.0.0.0/0) como destino y se aplica a todos los protocolos.
    • El registro también está habilitado para esta regla.

Se pueden usar los siguientes comandos de gcloud para crear las reglas de firewall:

  • Regla C: la siguiente regla de permiso de entrada para TCP 80 es aplicable a todas las instancias y puede tener cualquier origen:

    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
    
  • Regla D: La regla de denegación de salida para todos los protocolos, aplicable a todas las instancias, a cualquier 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
    
Conexión de Internet a VM.
Conexión de Internet a VM (haz clic para agrandar).

Supongamos que, en el sistema con la dirección IP 203.0.113.114, se intenta establecer una conexión con la VM1 en el puerto TCP 80. Sucede lo que se indica a continuación:

  • Se genera una entrada de registro para la regla C desde la perspectiva de la VM1 cuando, en esta VM, se acepta el tráfico proveniente de 203.0.113.114.
  • A pesar de la regla D, en la VM1, se puede responder a la solicitud entrante porque las reglas de firewall de Google Cloud son con estado. Si se permite la solicitud entrante, las respuestas establecidas no pueden bloquearse mediante ninguna regla de salida.
  • Debido a que la regla D no se aplica, nunca se la tiene en cuenta, por lo que no hay entrada de registro para ella.

En el siguiente ejemplo, se genera el registro de firewall.

Campo Valores
connection src_ip=203.0.113.114
src_port=[EPHEMERAL_PORT]
dest_ip=10.10.0.99
dest_port=80
protocol=6
disposition ALLOWED
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
instance 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 de registro de firewall

Según las especificaciones, se crea una entrada de registro en Cloud Logging para cada regla de firewall que tenga habilitado el registro, siempre que esa regla se aplique al tráfico desde o hacia una instancia de VM. Los registros se incluyen en el campo de carga útil de JSON de una LogEntry de Logging.

Los registros contienen campos base, que son los campos principales de cada registro, y campos de metadatos que agregan información adicional. Puedes decidir si se incluyen los campos de metadatos. Si los omites, puedes ahorrar en costos de almacenamiento.

Algunos campos de registro admiten valores que también son campos. Estos campos pueden contener más de un dato en un campo determinado. Por ejemplo, el campo connection tiene el formato IpConnection, que contiene el puerto y la dirección IP de origen y destino, además del protocolo, en un solo campo. En las siguientes tablas, se describen estos campos.

Campo Descripción Tipo del campo: base o metadatos opcionales
connection IpConnection
5 tuplas que describen la dirección IP de origen y destino, el puerto de origen y destino, y el protocolo de IP de esta conexión.
Base
disposition string
indica si la conexión fue ALLOWED o DENIED.
Base
rule_details RuleDetails
Detalles de la regla que se aplicó a esta conexión.
Campo rule_details.reference Base
Otros campos de detalles de la regla Metadatos
instance InstanceDetails
Detalles de la instancia de VM. En una configuración de VPC compartida, project_id corresponde a la del proyecto de servicio.
Metadatos
vpc VpcDetails
Detalles de la red de VPC. En una configuración de VPC compartida, project_id corresponde a la del proyecto host.
Metadatos
remote_instance InstanceDetails
Si el extremo remoto de la conexión es una VM ubicada en Compute Engine, este campo se propaga con los detalles de la instancia de VM.
Metadatos
remote_vpc VpcDetails
Si el extremo remoto de la conexión es una VM ubicada en una red de VPC, este campo se propaga con los detalles de la red.
Metadatos
remote_location GeographicDetails
Si el extremo remoto de la conexión es externo a la red de VPC, este campo se propaga con los metadatos de ubicación disponibles.
Metadatos

Conexión IP

Campo Tipo Descripción
src_ip string Dirección IP de origen. Si el origen es una VM de Compute Engine, src_ip es la dirección IP interna principal o una dirección en un rango de alias de IP de la interfaz de red de la VM. No se muestra la dirección IP externa. En el registro, se muestra la dirección IP de la VM tal como se presenta a la VM en el encabezado del paquete, de la misma manera que si ejecutaras el volcado de TCP en la VM.
src_port número entero Puerto de origen.
dest_ip string Dirección IP de destino. Si el destino es una VM de Google Cloud, dest_ip es la dirección IP interna principal o una dirección en un rango de alias de IP de la interfaz de red de la VM. La dirección IP externa no se muestra aunque se haya usado para establecer la conexión.
dest_port número entero Puerto de destino.
protocol número entero Protocolo IP de la conexión.

RuleDetails

Campo Tipo Descripción
reference string Referencia a la regla de firewall; formato:
"network:{network name}/firewall:{firewall_name}"
priority número entero La prioridad para la regla de firewall.
action string PERMITIR o RECHAZAR
source_range[ ] string Lista de los rangos de origen a los que se aplica la regla de firewall.
destination_range[ ] string Lista de los rangos de destino a los que se aplica la regla de firewall.
ip_port_info[ ] IpPortDetails Lista de los protocolos IP y rangos de puertos aplicables a las reglas.
direction string La dirección a la que se aplica la regla de firewall (entrada o salida).
source_tag[ ] string Lista de todas las etiquetas de origen a las que se aplica la regla de firewall.
target_tag[ ] string Lista de todas las etiquetas de destino a las que se aplica la regla de firewall.
source_service_account[ ] string Lista de todas las cuentas de servicio de origen a las que se aplica la regla de firewall.
target_service_account[ ] string Lista de todas las cuentas de servicio de destino a las que se aplica la regla de firewall.
source_region_code[ ] string Lista de todos los códigos de país de origen a los que se aplica la regla de firewall.
destination_region_code[ ] string Lista de todos los códigos de país de destino a los que se aplica la regla de firewall.
source_fqdn[ ] string Lista de todos los nombres de dominio de origen a los que se aplica la regla de firewall.
destination_fqdn[ ] string Lista de todos los nombres de dominio de destino a los que se aplica la regla de firewall.
source_threat_intelligence[ ] string Lista de todos los nombres de la lista de origen de Threat Intelligence a los que se aplica la regla de firewall.
destination_threat_intelligence[ ] string Lista de todos los nombres de las listas de destinos de Threat Intelligence a los que se aplica la regla de firewall.
source_address_groups[ ] string Lista de todos los grupos de direcciones de origen a los que se aplica la regla de firewall.
destination_address_groups[ ] string Lista de todos los grupos de direcciones de destino a los que se aplica la regla de firewall.

IpPortDetails

Campo Tipo Descripción
ip_protocol string El protocolo IP al que se aplica la regla de firewall. Especifica “ALL” si se aplica a todos los protocolos.
port_range[ ] string Lista de los rangos de puertos aplicables a las reglas; por ejemplo, 8080-9090.

InstanceDetails

Campo Tipo Descripción
project_id string ID del proyecto que contiene la VM.
vm_name string Nombre de la instancia de la VM.
region string Región de la VM
zone string Zona de la VM

Detalles de VPC

Campo Tipo Descripción
project_id string ID del proyecto que contiene la red.
vpc_name string Red en la que opera la VM.
subnetwork_name string Subred en la que opera la VM.

GeographicDetails

Campo Tipo Descripción
continent string Continente de los extremos externos.
country string País de los extremos externos.
region string Región de los extremos externos.
city string Ciudad para los extremos externos.

¿Qué sigue?