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

1. Einführung

Google Cloud Load Balancing wird weltweit an den Edge-Punkten des Google-Netzwerks in den Google Points of Presence (POPs) bereitgestellt. 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 Back-End mit ausreichender Kapazität verteilt.

Cloud Armor ist das WAF-Erkennungssystem (Distributed Denial of Service und Web Application Firewall) von Google. Cloud Armor ist eng mit dem TCP-Proxy-Load-Balancer von Google Cloud gekoppelt und ermöglicht es Ihnen, eingehenden Traffic auf unerwünschte Anfragen zu abfragen. Mit der Ratenbegrenzungsfunktion dieses Dienstes können Sie den Traffic zu Back-End-Ressourcen basierend auf dem Anfragevolumen beschränken und verhindern, dass unerwünschter Traffic Ressourcen in Ihrem VPC-Netzwerk (Virtual Private Cloud) verbraucht.

Mit Google Cloud TCP/SSL-Proxy-Load-Balancern können Sie TCP/ SSL-Traffic zwischen Ihren Back-End-Diensten weiterleiten.

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

  • So erstellen Sie einen TCP/SSL-Proxy-Load-Balancer
  • Cloud Armor-Sicherheitsrichtlinie erstellen
  • Anleitung zum Erstellen einer Regel für IP-Ablehnungslisten für den TCP/SSL-Proxy-Load-Balancer in Cloud Armor
  • Anleitung zum Erstellen einer Ratenbegrenzungsregel für den TCP-Proxy-Load-Balancer in Cloud Armor
  • So fügen Sie die Sicherheitsrichtlinie einem Back-End-Dienst für TCP/SSL-Load-Balancing hinzu

Voraussetzungen

  • Grundkenntnisse der Google Compute Engine ( codelab)
  • Grundkenntnisse in den Bereichen Netzwerk und TCP/IP
  • Grundkenntnisse zu Unix/Linux-Befehlszeilen
  • Es ist hilfreich, eine Tour zum Thema Networking in der GCP mit dem Kurs Networking in the Google Cloud zu absolvieren.

2. Voraussetzungen

Umgebung zum selbstbestimmten Lernen einrichten

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

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

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 in diesem Codelab später als PROJECT_ID bezeichnet.

Hinweis: Wenn Sie ein Gmail-Konto verwenden, können Sie die Standardeinstellung „Keine Organisation“ beibehalten. 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 in der Cloud Console die Abrechnung aktivieren, um Google Cloud-Ressourcen nutzen zu können.

Dieses Codelab sollte ohne großen Aufwand betrieben werden. Folgen Sie der Anleitung im Abschnitt „Bereinigen“, . Hier erfahren Sie, wie Sie Ressourcen herunterfahren, damit Ihnen über dieses Tutorial hinaus keine Kosten entstehen. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion von 300$.

Cloud Shell starten

Sie können Google Cloud zwar von Ihrem Laptop aus aus der Ferne bedienen, 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 dauert nur einen Moment. Wenn er abgeschlossen ist, sollten Sie in etwa Folgendes sehen:

f6ef2b5f13479f3a.png

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud, wodurch die Netzwerkleistung und Authentifizierung erheblich verbessert werden. Sie können alle Aufgaben in diesem Lab ganz einfach in einem Browser erledigen.

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. Backend-Dienste erstellen

Erstellen Sie wie folgt 2 Instanzen – erstellen Sie „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 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. Für dieses Lab verwenden wir Port 110.

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

Instanzen zur 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 Back-End-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 erreichen Sie den Dienst mit Load-Balancing.

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

Konfigurieren Sie globale Weiterleitungsregeln für die IP-Adresse des Load-Balancers.

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

Nachdem Ihr Load-Balancer erstellt wurde, testen Sie ihn mit dem folgenden Befehl

Curl LB_IP:110

Erstellen Sie als Nächstes VMs für die Validierung der Zugriffsverweigerung zum Load-Balancer

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

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 einer begrenzten Gruppe von IP-Adressen der Zugriff auf den TCP-Load-Balancer verweigert, indem eine Sicherheitsrichtlinie festgelegt wird, die bestimmte IP-Adressen ablehnt. Die zweite Regel wendet die Ratenbegrenzung an.

  1. Erstellen Sie in Cloud Shell eine Sicherheitsrichtlinie für den Back-End-Dienst namens "rate-limit-and-deny-tcp" unter "Einrichtung und Anforderungen". Gehen Sie dazu so vor:
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 Ablehnungsliste 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"

Fügen Sie der Cloud Armor-Sicherheitsrichtlinie „rate-limit-and-deny-tcp“ eine Ratenbegrenzungsregel hinzu

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

Fügen Sie die Richtlinie an den TCP-Proxy-Back-End-Dienst an:

Führen Sie den folgenden Befehl aus, um sicherzustellen, dass die Sicherheitsrichtlinie an den TCP-Proxy-Back-End-Dienst angehängt wird.

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

Logging für TCP-Proxy-Load-Balancer aktivieren

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

7. Ablehnungslistenregel validieren

Überprüfen Sie die Deny-Listen-Regel, indem Sie sich beim Testserver anmelden, dessen IP-Adresse in der Deny-Listen-Regel angegeben wurde, und führen Sie den folgenden Befehl aus:

Curl LB_IP:110

Sofortige Anfragen können eine Antwort vom Load-Balancer zurückgeben. Warten Sie jedoch, bis die curl-Anfrage abgelehnt oder gelöscht wird. Prüfen Sie dann die Logs in Cloud Logging, 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 und legen Sie als Back-End-Ziel my-tcp-lb" fest.

Wenn die Ressourcen zum Filtern definiert sind, können wir überprüfen, ob die IP-Ablehnungsregel ab dem PRIORITY-Wert 1.000 im Logeintrag wirksam ist und die konfigurierte Aktion "DENY" aktiv ist, da beide von der Ablehnungsregel und der abgelehnten IP-Adresse angewiesen wurden (siehe unten).

db9b835e0360dcaf.png

8. Ratenbegrenzungsregel validieren

Prüfen Sie, ob die Ratenbegrenzungsregel gilt, indem Sie viele Anfragen innerhalb eines kurzen Zeitraums senden, der den definierten Grenzwert (5 Anfragen pro Minute) überschreitet.

Klicken Sie danach auf „Logs ansehen“ im Cloud Armor-Dienst. Sie werden dann zu Cloud Logging weitergeleitet. Dort können Sie die Logs nach dem Load-Balancer filtern, um die eingehenden Cloud Armor-Logs zu sehen.

Ein Eintrag zur Ratenbegrenzung sollte wie im Screenshot unten dargestellt sein. Wir können überprüfen, ob die Ratenbegrenzungsregel ab dem PRIORITY-Wert 3.000 im Logeintrag und ab der konfigurierten Aktion die Aktion RATE BASED BAN (RATE BASED BAN) wie in der Ratenbegrenzungsregel angegeben gilt.

37c76e5d7532623.png

9. Bereinigung der Umgebung

Achten Sie darauf, die erstellte Infrastruktur zu bereinigen, um laufende Kosten für eine ungenutzte Infrastruktur zu vermeiden.

Am schnellsten können Sie das gesamte Projekt in der GCP löschen, um sicherzustellen, dass keine veralteten Ressourcen unbeaufsichtigt bleiben. Löschen Sie jedoch die einzelnen Ressourcen mit den folgenden Befehlen.

TCP-Proxy-Load-Balancer

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

Instanzgruppe

gcloud compute instance-groups unmanaged delete vm-ig1

Die zwei 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 innerhalb 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