Codelab do proxy TCP: limitação de taxa e lista de negação de IP com o balanceador de carga de proxy TCP

1. Introdução

O balanceamento de carga do Google Cloud é implantado na borda da rede do Google nos pontos de presença (POP) do Google no mundo todo. O tráfego de usuários direcionado para um balanceador de carga do proxy TCP entra no POP mais próximo ao usuário e a carga dele é balanceada na rede global do Google no primeiro back-end que tiver capacidade suficiente disponível.

O Cloud Armor é o sistema de detecção de ataque distribuído de negação de serviço e firewall de aplicativos da Web (WAF) do Google. O Cloud Armor está intimamente associado ao balanceador de carga de proxy TCP do Google Cloud e permite que você investigue o tráfego de entrada em busca de solicitações indesejadas. O recurso de limitação de taxa desse serviço permite que você restrinja o tráfego para recursos de back-end com base no volume de solicitações e evita que o tráfego indesejado consuma recursos na sua rede de nuvem privada virtual (VPC).

Os balanceadores de carga de proxy TCP/SSL do Google Cloud permitem que você faça proxy de tráfego do tipo TCP/ SSL entre seus serviços de back-end.

Neste laboratório, você vai criar um balanceador de carga TCP/SSL com um serviço de back-end e limitar o acesso ao balanceador de carga a apenas um conjunto específico de clientes de usuário.

be33dadf836374bb.png

O que você vai aprender

  • Como criar um balanceador de carga de proxy TCP/SSL
  • Como criar uma política de segurança do Cloud Armor
  • Como criar uma regra de lista de negação de IP para o balanceador de carga de proxy TCP/SSL no Cloud Armor
  • Como criar uma regra de limitação de taxa para o balanceador de carga de proxy TCP no Cloud Armor
  • Como adicionar a política de segurança a um serviço de back-end de balanceamento de carga TCP/SSL

O que é necessário

  • Conhecimento básico do Google Compute Engine ( codelab).
  • Conhecimento básico de TCP/IP e redes
  • Conhecimento básico de linha de comando do Unix/Linux
  • É útil ter concluído um tour de rede no GCP com Redes no Google Cloud.

2. Requisitos

Configuração de ambiente personalizada

  1. Faça login no console do Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.

Observação: para acessar facilmente o console do Cloud, basta memorizar o URL, que é console.cloud.google.com.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Lembre-se do código do projeto, um nome exclusivo em todos os projetos do Google Cloud. O nome acima já foi escolhido e não servirá para você. Ele será mencionado mais adiante neste codelab como PROJECT_ID.

Observação: se você estiver usando uma conta do Gmail, deixe o local padrão definido como "Sem organização". Se você estiver usando uma conta do Google Workspace, escolha um local adequado para a organização.

  1. Em seguida, será necessário ativar o faturamento no Console do Cloud para usar os recursos do Google Cloud.

A execução deste codelab não será muito cara, se for o caso. Siga todas as instruções na seção "Limpeza", que orienta você sobre como encerrar recursos para não incorrer em cobranças além deste tutorial. Novos usuários do Google Cloud estão qualificados para o programa de US$300 de avaliação sem custos.

Iniciar o Cloud Shell

Embora o Google Cloud e o Spanner possam ser operados remotamente do seu laptop, neste codelab usaremos o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.

No Console do GCP, clique no ícone do Cloud Shell na barra de ferramentas localizada no canto superior direito:

bce75f34b2c53987.png

O provisionamento e a conexão com o ambiente levarão apenas alguns instantes para serem concluídos: Quando o processamento for concluído, você verá algo como:

f6ef2b5f13479f3a.png

Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Todo o trabalho neste laboratório pode ser feito apenas com um navegador.

Antes de começar

No Cloud Shell, verifique se o ID do projeto está configurado:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
PROJECT_ID=[YOUR-PROJECT-NAME]
echo $PROJECT_ID

Ativar APIs

Ativar todos os serviços necessários

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com        
gcloud services enable monitoring.googleapis.com

3. Criar serviços de back-end

Crie duas instâncias da seguinte maneira: Crie a instância1-b1 na zona us-central1-b

gcloud compute instances create vm-1-b1 \
    --image-family debian-9 \
    --image-project debian-cloud \
    --tags tcp-lb \
    --zone us-central1-b \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
      sudo service apache2 restart
      echo '<!doctype html><html><body><h1>This is VM1-b1 in central1-b</h1></body></html>' | tee /var/www/html/index.html
      EOF"

Crie a instância 1-b2 na zona us-central1-b.

gcloud compute instances create vm-1-b2 \
    --image-family debian-9 \
    --image-project debian-cloud \
    --tags tcp-lb \
    --zone us-central1-b \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
      sudo service apache2 restart
      echo '<!doctype html><html><body><h1>This is VM1-b2 in central1-b</h1></body></html>' | tee /var/www/html/index.html
      EOF"

Criar um grupo de instâncias vm-ig1

gcloud compute instance-groups unmanaged create vm-ig1  --zone us-central1-b

Crie uma porta nomeada para o grupo de instâncias. Neste laboratório, vamos usar a porta 110.

    gcloud compute instance-groups set-named-ports vm-ig1 \
--named-ports tcp 110:110 --zone us-central1-b

Adicionar as instâncias ao grupo de instâncias

gcloud compute instance-groups unmanaged add-instances vm-ig1 \
   --instances vm-1-b1,vm-1-b2 --zone us-central1-b

4. Como configurar o balanceador de carga

Em seguida, vamos criar uma verificação de integridade.

gcloud compute health-checks create tcp my-tcp-health-check --port 110

Criar um serviço de back-end

gcloud compute backend-services create my-tcp-lb  --global-health-checks --global \
--protocol TCP --health-checks my-tcp-health-check --timeout 5m --port-name tcp110

Adicionar o grupo de instâncias ao serviço de back-end

gcloud compute backend-services add-backend my-tcp-lb --global --instance-group \ vm-ig1 --instance-group-zone us-central1-b --balancing-mode UTILIZATION \ --max-utilization 0.8

Configurar um proxy TCP de destino

gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy --backend-service \ my-tcp-lb --proxy-header NONE

Reservar endereços IPv4 estáticos globais

Você vai usar esse endereço IP para acessar seu serviço de balanceamento de carga.

gcloud compute addresses create tcp-lb-static-ipv4  --ip-version=IPV4   --global

Configure regras de encaminhamento globais para o endereço IP do LB.

gcloud compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \
    --global --target-tcp-proxy my-tcp-lb-target-proxy --address LB_STATIC_IPV4 \ --ports 110

5. Como criar uma regra de firewall para o balanceador de carga do proxy TCP

gcloud compute firewall-rules create allow-tcplb-and-health \
   --source-ranges 130.211.0.0/22,35.191.0.0/16 \
   --target-tags tcp-lb \
   --allow tcp:110

Depois que o balanceador de carga for criado, teste-o com o seguinte comando:

Curl LB_IP:110

Em seguida, crie VMs para a validação da negação de acesso ao LB.

Crie duas instâncias, cada uma com um endereço IP público e com os nomes "test-server1" e "test-server2".

6. Criar uma política de segurança no Cloud Armor

Nesta seção, você vai criar uma política de segurança de back-end e duas regras na política no Cloud Armor.

A primeira regra vai impedir que um conjunto limitado de IPs acesse o balanceador de carga TCP definindo uma política de segurança para negar determinados IPs, e a segunda vai realizar a limitação de taxa.

  1. No Cloud Shell(consulte "Iniciar o Cloud Shell" em "Configuração e requisitos" para instruções sobre como usar o Cloud Shell), crie uma política de segurança de serviço de back-end chamada rate-limit-and-deny-tcp da seguinte maneira:
gcloud compute security-policies create rate-limit-and-deny-tcp \
    --description "policy for tcp proxy rate limiting and IP deny"

Adicionar regras à política de segurança

Em seguida, adicione uma regra de lista de negações à política do Cloud Armor "rate-limit-and-deny-tcp".

gcloud compute security-policies rules create 1000 --action deny --security-policy \ rate-limit-and-deny-tcp --description "deny test-server1" --src-ip-ranges \ "enter-test-server-1ip-here"

Adicione uma regra de limitação de taxa à política de segurança do Cloud Armor "rate-limit-and-deny-tcp".

gcloud compute security-policies rules create 3000   \ --security-policy=rate-limit-and-deny-tcp  \       
--expression="true"  --action=rate-based-ban  --rate-limit-threshold-count=5  \          
--rate-limit-threshold-interval-sec=60  --ban-duration-sec=300      \         
--conform-action=allow  --exceed-action=deny-404  --enforce-on-key=IP

Anexar a política ao serviço de back-end do proxy TCP:

Execute o seguinte comando para garantir que a política de segurança esteja anexada ao serviço de back-end do proxy TCP.

gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp

Ativar o registro no balanceador de carga de proxy TCP

gcloud beta compute backend-services update my-tcp-lb \ 
--enable-logging --logging-sample-rate=1

7. Validar regra de lista de bloqueio

Para validar a regra da lista de bloqueio, faça login no servidor de teste cujo IP foi especificado na regra e execute o comando a seguir:

Curl LB_IP:110

As solicitações imediatas podem gerar uma resposta do LB, mas aguarde até que a solicitação do curl seja negada ou descartada e confira os registros no Cloud Logging para verificar a entrada de registro da regra de negação de IP que está sendo acionada.

Acesse o Cloud Logging e, em "Recursos", selecione o tipo de recurso como "tcp_ssl_proxy_rule" e defina o destino de back-end como "my-tcp-lb".

Com os recursos definidos para filtragem, podemos validar se a regra de negação de IP está em vigor pelo valor de PRIORIDADE 1000 na entrada de registro e se a ação configurada "DENY" está em vigor, já que ambas foram instruídas pela regra de negação e pelo IP negado, conforme mostrado abaixo.

db9b835e0360dcaf.png

8. Validar a regra de limitação de taxa

Valide se a regra de limite de taxa está em vigor enviando muitas solicitações em um curto período que exceda o limite definido (cinco solicitações por minuto).

Depois disso, clique em "Ver registros" no serviço do Cloud Armor e acesse o Cloud Logging, onde é possível filtrar os registros pelo balanceador de carga para conferir os registros do Cloud Armor conforme eles chegam.

Uma entrada de limitação de taxa deve ser como a captura de tela abaixo. Podemos validar que a regra de limitação de taxa está em vigor com o valor PRIORITY de 3000 na entrada de registro e com a ação configurada. A ação "RATE BASED BAN" está em vigor conforme instruído pela regra de limitação de taxa.

37c76e5d7532623.png

9. Limpeza do ambiente

Limpe a infraestrutura criada para evitar custos de execução de infraestrutura ociosa.

A maneira mais rápida é excluir todo o projeto no GCP para garantir que não haja recursos pendentes.No entanto, exclua os recursos individuais com os seguintes comandos:

O balanceador de carga de proxy TCP

gcloud compute target-tcp-proxies delete my-tcp-lb

O grupo de instâncias

gcloud compute instance-groups unmanaged delete vm-ig1

As duas instâncias de VM de teste criadas

gcloud compute instances delete Instance_name --zone=instance_zone

O serviço de back-end

gcloud compute backend-services delete BACKEND_SERVICE_NAME

As regras do Cloud Armor na política

gcloud compute security-policies rules delete 1000  \ --security-policy=rate-limit-and-deny-tcp && 
gcloud compute security-policies rules delete 3000  \ --security-policy=rate-limit-and-deny-tcp

A política de segurança do Cloud Armor

gcloud compute security-policies delete rate-limit-and-deny-tcp