TCP-Proxy-Codelab – Ratenbegrenzung und IP-Ablehnungsliste mit TCP-Proxy-Load-Balancer

1. Einführung

Das Google Cloud Load Balancing wird an den weltweiten Edges des Google-Netzwerks in seinen Points of Presence (POPs) implementiert. Der an einen TCP-Proxy-Load-Balancer geleitete Nutzertraffic gelangt in den POP, der dem Nutzer am nächsten liegt, und wird dann über das globale Google-Netzwerk auf das nächstgelegene Backend mit ausreichender Kapazität verteilt.

Cloud Armor ist das System von Google zur Erkennung von Distributed Denial of Service-Angriffen und Web Application Firewalls (WAF). Cloud Armor ist eng mit dem Google Cloud TCP-Proxy-Load Balancer verknüpft und ermöglicht es Ihnen, eingehenden Traffic auf unerwünschte Anfragen zu prüfen. Mit der Ratenbegrenzung dieses Dienstes können Sie den Traffic zu Backend-Ressourcen basierend auf dem Anfragevolumen einschränken und verhindern, dass unerwünschter Traffic Ressourcen in Ihrem VPC-Netzwerk (Virtual Private Cloud) verbraucht.

Mit TCP/SSL-Proxy-Load Balancern von Google Cloud können Sie TCP-/SSL-Traffic zwischen Ihren Backend-Diensten proxyen.

In diesem Lab erstellen Sie einen TCP/SSL-Load Balancer mit einem Back-End-Dienst und beschränken den Zugriff auf den Load Balancer auf eine bestimmte Gruppe von Nutzerclients.

be33dadf836374bb.png

Lerninhalte

  • TCP/SSL-Proxy-Load-Balancer erstellen
  • Cloud Armor-Sicherheitsrichtlinie erstellen
  • IP-Ausschlussliste für TCP/SSL-Proxy-Load Balancer in Cloud Armor erstellen
  • Regel für die Beschränkung der Zugriffsrate für TCP-Proxy-Load Balancer in Cloud Armor erstellen
  • Sicherheitsrichtlinie einem TCP/SSL-Load Balancing-Back-End-Dienst hinzufügen

Voraussetzungen

  • Grundlegende Kenntnisse der Google Compute Engine ( Codelab)
  • Grundkenntnisse in den Bereichen Netzwerk und TCP/IP
  • Grundkenntnisse zu Unix/Linux-Befehlszeilen
  • Es ist hilfreich, sich mit Networking in the Google Cloud (Netzwerktechnik in der Google Cloud) vertraut zu machen.

2. Voraussetzungen

Einrichten der Umgebung im eigenen Tempo

  1. Melden Sie sich in der Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie ein Konto erstellen.

Hinweis: Sie können ganz einfach auf die Cloud Console zugreifen, indem Sie sich die URL merken: console.cloud.google.com.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Notieren Sie sich die Projekt-ID, also den projektübergreifend nur einmal vorkommenden Namen eines Google Cloud-Projekts. Der oben angegebene Name ist bereits vergeben und kann leider nicht mehr verwendet werden. Sie wird später in diesem Codelab als PROJECT_ID bezeichnet.

Hinweis: Wenn Sie ein Gmail-Konto verwenden, können Sie den Standardspeicherort auf „Keine Organisation“ belassen. Wenn Sie ein Google Workspace-Konto verwenden, wählen Sie einen Standort aus, der für Ihre Organisation sinnvoll ist.

  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Google Cloud-Ressourcen verwenden zu können.

Die Ausführung dieses Codelabs sollte nur wenige Kosten verursachen, wenn überhaupt. Folgen Sie unbedingt der Anleitung im Abschnitt „Bereinigen“, um Ressourcen herunterzufahren, damit keine weiteren Kosten anfallen. Neuen Nutzern der Google Cloud Platform steht das kostenlose Testprogramm mit einem Guthaben von 300$ zur Verfügung.

Cloud Shell starten

Sie können Google Cloud zwar per Fernzugriff von Ihrem Laptop aus nutzen, in diesem Codelab verwenden Sie jedoch Google Cloud Shell, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Klicken Sie in der GCP Console oben rechts in der Symbolleiste auf das Cloud Shell-Symbol:

bce75f34b2c53987.png

Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Minuten dauern. Wenn der Vorgang abgeschlossen ist, sollte in etwa Folgendes angezeigt werden:

f6ef2b5f13479f3a.png

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud. Dadurch werden Netzwerkleistung und Authentifizierung erheblich verbessert. Für die Arbeit in diesem Lab benötigen Sie nur einen Browser.

Hinweis

Prüfen Sie in Cloud Shell, ob Ihre Projekt-ID eingerichtet ist.

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

APIs aktivieren

Alle erforderlichen Dienste aktivieren

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

3. Back-End-Dienste erstellen

Erstellen Sie zwei Instanzen: instance1-b1 in der Zone 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"

Instanz 1-b2 in der Zone us-central1-b erstellen

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"

Instanzgruppe „vm-ig1“ erstellen

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

Erstellen Sie einen benannten Port für die Instanzgruppe. In diesem Lab verwenden wir Port 110.

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

Instanzen der Instanzgruppe hinzufügen

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

4. Load-Balancer konfigurieren

Als Nächstes erstellen wir eine Systemdiagnose.

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

Backend-Dienst erstellen

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

Instanzgruppe dem Backend-Dienst hinzufügen

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

Ziel-TCP-Proxy konfigurieren

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

Globale statische IPv4-Adressen reservieren

Über diese IP-Adresse greifen Sie auf Ihren Dienst mit Load Balancing zu.

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

Konfigurieren Sie globale Weiterleitungsregeln für die LB-IP-Adresse.

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. Firewallregel für den TCP-Proxy-Load-Balancer erstellen

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

Testen Sie den Load Balancer mit dem folgenden Befehl:

Curl LB_IP:110

Als Nächstes VM für die Validierung der Zugriffsverweigerung für den LB erstellen

Sie sollten zwei Instanzen mit jeweils einer öffentlichen IP-Adresse erstellen und sie „test-server1“ und „test-server2“ nennen.

6. Sicherheitsrichtlinie in Cloud Armor erstellen

In diesem Abschnitt erstellen Sie eine Back-End-Sicherheitsrichtlinie und zwei Regeln in der Richtlinie in Cloud Armor.

Mit der ersten Regel wird der Zugriff auf den TCP-Load Balancer für eine begrenzte Anzahl von IP-Adressen verhindert, indem eine Sicherheitsrichtlinie festgelegt wird, die bestimmte IP-Adressen ablehnt. Die zweite Regel führt eine Ratenbegrenzung durch.

  1. Erstellen Sie in Cloud Shell(eine Anleitung zur Verwendung von Cloud Shell finden Sie unter „Einrichtung und Anforderungen“ im Abschnitt „Cloud Shell starten“) eine Sicherheitsrichtlinie für Back-End-Dienste mit dem Namen „rate-limit-and-deny-tcp“ folgendermaßen:
gcloud compute security-policies create rate-limit-and-deny-tcp \
    --description "policy for tcp proxy rate limiting and IP deny"

Regeln zur Sicherheitsrichtlinie hinzufügen

Fügen Sie als Nächstes der Cloud Armor-Richtlinie „rate-limit-and-deny-tcp“ eine Regel für die Sperrliste hinzu.

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"

Cloud Armor-Sicherheitsrichtlinie „rate-limit-and-deny-tcp“ eine Ratenbegrenzungsregel hinzufügen

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

Richtlinie an den TCP-Proxy-Back-End-Dienst anhängen:

Führen Sie den folgenden Befehl aus, um sicherzustellen, dass die Sicherheitsrichtlinie mit dem TCP-Proxy-Back-End-Dienst verknüpft ist.

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

Logging auf TCP-Proxy-Load Balancer aktivieren

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

7. Regel für Sperrliste prüfen

Bestätigen Sie die Regel für die Sperrliste, indem Sie sich auf dem Testserver anmelden, dessen IP-Adresse in der Regel für die Sperrliste angegeben wurde, und den folgenden Befehl ausführen:

Curl LB_IP:110

Bei sofortigen Anfragen kann eine Antwort vom Load Balancer zurückgegeben werden. Warten Sie jedoch, bis die Curl-Anfrage abgelehnt oder verworfen wird, und sehen Sie sich dann die Logs in Cloud Logging an, um den Logeintrag für die ausgelöste IP-Ablehnungsregel zu prüfen.

Rufen Sie Cloud Logging auf und wählen Sie unter „Ressourcen“ den Ressourcentyp „tcp_ssl_proxy_rule“ aus. Legen Sie als Backend-Ziel „my-tcp-lb“ fest.

Mit den für die Filterung definierten Ressourcen können wir prüfen, ob die IP-Ausschlussregel aufgrund des PRIORITY-Werts von 1000 im Logeintrag aktiv ist und die konfigurierte Aktion DENY (Ablehnen) aktiv ist, da beide von der Ausschlussregel und der IP-Adresse, die abgelehnt wird, angewiesen wurden, wie unten dargestellt.

db9b835e0360dcaf.png

8. Regel für die Ratenbegrenzung überprüfen

Prüfen Sie, ob die Regel für die Ratenbegrenzung in Kraft ist, indem Sie in kurzer Zeit viele Anfragen senden, die den definierten Grenzwert (5 Anfragen pro Minute) überschreiten.

Klicken Sie dann im Cloud Armor-Dienst auf „Logs ansehen“. Sie gelangen zu Cloud Logging, wo Sie die Logs nach dem Load Balancer filtern können, um die Cloud Armor-Logs in Echtzeit zu sehen.

Ein Eintrag für die Ratenbegrenzung sollte wie im Screenshot unten aussehen. Wir können anhand des PRIORITY-Werts 3000 im Logeintrag und der konfigurierten Aktion prüfen, ob die Regel für die Ratenbegrenzung in Kraft ist. Die Aktion RATE BASED BAN ist gemäß der Regel für die Ratenbegrenzung in Kraft.

37c76e5d7532623.png

9. Umgebung bereinigen

Bereinigen Sie die erstellte Infrastruktur, um Kosten für ungenutzte Infrastruktur zu vermeiden.

Am schnellsten löschen Sie das gesamte Projekt in GCP, damit keine in der Schwebe befindlichen Ressourcen übrig bleiben. Sie können die einzelnen Ressourcen aber auch mit den folgenden Befehlen löschen.

Der TCP-Proxy-Load-Balancer

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

Instanzgruppe

gcloud compute instance-groups unmanaged delete vm-ig1

Die beiden erstellten VM-Testinstanzen

gcloud compute instances delete Instance_name --zone=instance_zone

einen Backend-Dienst

gcloud compute backend-services delete BACKEND_SERVICE_NAME

Die Cloud Armor-Regeln in der Richtlinie

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

Cloud Armor-Sicherheitsrichtlinie

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