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 denegar 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 Google Cloud productos compilados en VMs de Compute Engine, como clústeres de Google Kubernetes Engine (GKE) e instancias del entorno flexible de App Engine.
Cuando habilitas el registro para una regla de firewall, Google Cloud crea una entrada llamada registro de conexión cada vez que la regla permite o deniega el tráfico. 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:
El registro de reglas de firewall se puede habilitar para lo siguiente:
Reglas de firewall en políticas de firewall jerárquicas, políticas de firewall de red globales y políticas de firewall de red regionales asociadas con una red de VPC normal.
Reglas de firewall de VPC en una red de VPC normal
Reglas de firewall en políticas de firewall de red regionales asociadas a una red de VPC de RoCE.
El registro de reglas de firewall no admite lo siguiente:
Reglas de firewall de VPC en redes heredadas
Reglas implícitas de rechazo de entrada y permiso de salida de una red de VPC normal.
Reglas de permiso de entrada y salida implícitas de una red de VPC de RoCE.
El registro de las reglas de firewall solo registra las conexiones TCP y UDP. Aunque puedes crear una regla de firewall que se aplique a otros protocolos, no puedes registrar sus conexiones. Si también quieres registrar otros protocolos, considera usar la duplicación de paquetes.
Las entradas de registro se escriben desde la perspectiva de las VM. Estas entradas solo se crean si la regla de firewall tiene el registro habilitado y si se aplica al tráfico enviado hacia o desde la VM. Las entradas se crean según los límites de registro de conexiones en función del criterio del mejor esfuerzo.
Cantidad de conexiones que el registro de reglas de firewall puede registrar por unidad de tiempo:
Es según el tipo de máquina para las redes de VPC normales.
Depende de la acción de supervisión o registro de la regla de firewall para las redes de VPC de RoCE.
Los cambios en las reglas de firewall se pueden ver en los registros de auditoría de VPC.
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 proyectoexample-proj
. - Estas son las dos instancias de VM:
- La VM1 en la zona
us-west1-a
con la dirección IP10.10.0.99
enwest-subnet
(regiónus-west1
) - La VM2 en la zona
us-east1-b
con la dirección IP10.20.0.99
eneast-subnet
(regiónus-east1
)
- La VM1 en la zona
- Regla A: Una regla de firewall de denegación de salida tiene como destino todas las instancias de la red, se aplica al puerto TCP
80
y su destino es10.20.0.99
(VM2).- El registro está habilitado para esta regla.
- Regla B: Una regla de firewall de permiso de entrada está orientada a todas las instancias de la red, se aplica al puerto TCP
80
y su fuente es10.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 el puerto TCP
80
, aplicable a todas las instancias, 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
Regla B: Regla de permiso de entrada para el puerto TCP
80
, aplicable a todas las instancias, fuente10.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
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 mientras esta intenta conectarse a
10.20.0.99
(VM2). - Debido a que la regla A realmente bloquea el tráfico, la regla B no se tiene en cuenta, por lo que no hay entrada de registro para la regla B desde la perspectiva de la VM2.
Se informa el siguiente 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 |
instancia | 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 proyectoexample-proj
. - Estas son las dos instancias de VM:
- La VM1 en la zona
us-west1-a
con la dirección IP10.10.0.99
enwest-subnet
(regiónus-west1
) - La VM2 en la zona
us-east1-b
con la dirección IP10.20.0.99
eneast-subnet
(regiónus-east1
)
- La VM1 en la zona
- Regla A: Una regla de firewall de permiso de salida se orienta a todas las instancias de la red, se aplica al puerto TCP
80
y su destino es10.20.0.99
(VM2).- El registro está habilitado para esta regla.
- Regla B: Una regla de firewall de permiso de entrada está orientada a todas las instancias de la red, se aplica al puerto TCP
80
y su fuente es10.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 el puerto TCP
80
, aplicable a todas las instancias, 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
Regla B: regla de permiso de entrada para el puerto TCP
80
, aplicable a todas las instancias, fuente10.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
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 mientras esta se conecta a
10.20.0.99
(VM2). - Se genera una entrada de registro para la regla B desde la perspectiva de la VM2 mientras esta permite las conexiones entrantes desde
10.10.0.99
(VM1).
La VM1 informa el siguiente 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 | 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 |
instancia | 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. |
VM2 informa el siguiente 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 | 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 |
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 proyectoexample-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 IP10.10.0.99
enwest-subnet
(regiónus-west1
). - Regla C: Una regla de firewall de permiso de entrada está orientada 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 TCP80
.- 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 regla de permiso de entrada para el puerto TCP
80
, aplicable a todas las instancias, 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
Supongamos que el sistema con la dirección IP 203.0.113.114
intenta conectarse a 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 esta acepta el tráfico proveniente de
203.0.113.114
. - A pesar de la regla D, la VM1 puede responder a la solicitud entrante porque las reglas de firewallGoogle Cloud tienen 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, no se la tiene en cuenta, por lo que no hay entrada de registro para ella.
Se informa el siguiente 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 | 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 |
instancia | 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 | |
instancia | 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 |
IpConnection
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 |
---|---|---|
referencia | string | Referencia a la regla de firewall; formato:"network:{network name}/firewall:{firewall_name}" |
prioridad | número entero | La prioridad para la regla de firewall. |
acción | 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. |
dirección | 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 las listas de origen de Google 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 Google 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. |
región | string | Región de la VM |
zona | 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. |
País | string | País de los extremos externos. |
región | string | Región de los extremos externos. |
ciudad | string | Ciudad para los extremos externos. |
¿Qué sigue?
- Para configurar y ver los registros, consulta Usa el registro de las reglas de firewall.
- Para obtener información sobre cómo se usan tus reglas de firewall, consulta Estadísticas de firewall.
- Para almacenar, buscar, analizar, supervisar y generar alertas sobre eventos y datos de registro, consulta Cloud Logging.
- Para enrutar entradas de registro, consulta Configura y administra receptores.