Ćwiczenie z programowania na serwerze proxy TCP – ograniczanie liczby żądań i lista odrzuconych adresów IP z systemem równoważenia obciążenia serwera proxy TCP

1. Wprowadzenie

Równoważenie obciążenia Google Cloud jest wdrażane na brzegu sieci Google w punktach dostępowych Google na całym świecie. Ruch użytkowników kierowany do systemu równoważenia obciążenia TCP proxy trafia do punktu dostępu najbliższego użytkownikowi, a następnie obciążenie jest równoważone w globalnej sieci Google do najbliższego backendu, który ma wystarczającą wydajność.

Cloud Armor to rozproszony system wykrywania ataków typu DoS i zapora sieciowa aplikacji internetowych (WAF) od Google. Cloud Armor jest ściśle powiązany z Google Cloud TCP Proxy Load Balancer i pozwala na sprawdzanie przychodzącego ruchu pod kątem niechcianych żądań. Funkcja ograniczania szybkości tej usługi umożliwia ograniczanie ruchu do zasobów backendu na podstawie liczby żądań i zapobiega zużywaniu zasobów w sieci VPC (prywatnego środowiska wirtualnego w chmurze) przez niechciany ruch.

Systemy równoważenia obciążenia korzystające z serwera proxy Google Cloud TCP/SSL umożliwiają przekierowywanie ruchu typu TCP/ SSL między usługami backendu.

W tym laboratorium utworzysz system równoważenia obciążenia TCP/SSL z usługą backendową i ograniczysz dostęp do systemu równoważenia obciążenia tylko do określonego zestawu klientów.

be33dadf836374bb.png

Czego się nauczysz

  • Tworzenie systemu równoważenia obciążenia korzystającego z serwera proxy TCP/SSL
  • Jak utworzyć zasadę zabezpieczeń Cloud Armor
  • Jak utworzyć regułę listy zablokowanych adresów IP dla systemu równoważenia obciążenia korzystającego z serwera proxy TCP/SSL w Cloud Armor
  • Jak utworzyć regułę ograniczania szybkości dla systemu równoważenia obciążenia serwera proxy TCP w Cloud Armor
  • Jak dodać zasadę zabezpieczeń do usługi backendowej równoważenia obciążenia TCP/SSL

Czego potrzebujesz

  • podstawowa znajomość Google Compute Engine ( codelab),
  • podstawowa znajomość sieci i protokołu TCP/IP,
  • podstawowa znajomość wiersza poleceń w Unixie/Linuksie;
  • Warto zapoznać się z sieciami w GCP, korzystając z kursu Networking in the Google Cloud (Sieci w Google Cloud).

2. Wymagania

Konfigurowanie środowiska we własnym tempie

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

Uwaga: możesz łatwo uzyskać dostęp do konsoli Cloud, zapamiętując jej adres URL, czyli console.cloud.google.com.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Zapamiętaj identyfikator projektu, który jest unikalną nazwą w ramach wszystkich projektów Google Cloud (podawana powyżej nazwa jest już zajęta i nie będzie działać). W dalszej części tego ćwiczenia będzie on oznaczany jako IDENTYFIKATOR_PROJEKTU.

Uwaga: jeśli korzystasz z konta Gmail, możesz pozostawić domyślną lokalizację ustawioną na „Brak organizacji”. Jeśli używasz konta Google Workspace, wybierz lokalizację odpowiednią dla Twojej organizacji.

  1. Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Google Cloud.

Przejście przez ten moduł Codelab nie powinno wiązać się z wielkimi kosztami, jeśli w ogóle z nimi będzie. Pamiętaj, aby postępować zgodnie z instrukcjami w sekcji „Wyczyszczanie”, które podają, jak wyłączyć zasoby, aby uniknąć opłat po zakończeniu samouczka. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Uruchamianie Cloud Shell

Google Cloud można obsługiwać zdalnie z laptopa, ale w tym ćwiczeniu będziesz używać Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.

W konsoli GCP kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu:

bce75f34b2c53987.png

Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po jego zakończeniu powinno wyświetlić się coś takiego:

f6ef2b5f13479f3a.png

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie poprawia wydajność sieci i uwierzytelnianie. Wszystkie zadania w tym module możesz wykonać w przeglądarce.

Zanim zaczniesz

W Cloud Shell sprawdź, czy identyfikator projektu jest skonfigurowany.

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

Włącz interfejsy API

Włączanie wszystkich niezbędnych usług

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

3. Tworzenie usług backendu

Utwórz 2 instancje w ten sposób: utwórz instance1-b1 w strefie 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"

Utwórz instancję 1-b2 w strefie 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"

Tworzenie grupy instancji vm-ig1

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

Utwórz nazwany port dla grupy instancji. W tym laboratorium użyjemy portu 110.

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

Dodawanie instancji do grupy instancji

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

4. Konfigurowanie systemu równoważenia obciążenia

Następnie utwórz kontrolę stanu.

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

Utwórz usługę backendu

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

Dodawanie grupy instancji do usługi backendu

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

Konfigurowanie docelowego serwera proxy TCP

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

Rezerwowanie globalnych statycznych adresów IPv4

Użyjesz tego adresu IP, aby uzyskać dostęp do usługi równoważenia obciążenia.

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

Skonfiguruj globalne reguły przekierowania dla adresu IP 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. Tworzenie reguły zapory sieciowej dla systemu równoważenia obciążenia serwera 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

Po utworzeniu systemu równoważenia obciążenia przetestuj go za pomocą tego polecenia

Curl LB_IP:110

Następnie utwórz maszyny wirtualne do weryfikacji odmowy dostępu do LB.

Należy utworzyć 2 instancji, z których każda ma publiczny adres IP i nazwy test-server1 i test-server2.

6. Tworzenie zasady zabezpieczeń w Cloud Armor

W tej sekcji utworzysz zasadę zabezpieczeń backendu i 2 reguły w Cloud Armor.

Pierwsza reguła zablokuje dostęp do równoważnika obciążenia TCP ograniczonemu zbiorowi adresów IP, ustawiając zasadę bezpieczeństwa, która zablokuje określone adresy IP. Druga reguła będzie ograniczać częstotliwość.

  1. W Cloud Shell(informacje o tym, jak korzystać z Cloud Shell, znajdziesz w sekcji „Uruchom Cloud Shell” w sekcji „Konfiguracja i wymagania”) utwórz zasadę zabezpieczeń usługi backendu o nazwie rate-limit-and-deny-tcp w następujący sposób:
gcloud compute security-policies create rate-limit-and-deny-tcp \
    --description "policy for tcp proxy rate limiting and IP deny"

Dodawanie reguł do zasad zabezpieczeń

Następnie dodaj regułę listy odrzucania do zasady 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"

Dodawanie reguły ograniczania szybkości do zasady zabezpieczeń 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

Dołączanie zasad do usługi backendowej serwera proxy TCP:

Uruchom to polecenie, aby się upewnić, że zasada zabezpieczeń jest dołączona do usługi backendu serwera proxy TCP.

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

Włączanie logowania w systemie równoważenia obciążenia serwera proxy TCP

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

7. Sprawdzanie reguły listy odrzuconych

Sprawdź regułę listy odmowy, logując się na serwer testowy, którego adres IP został podany w regułach listy odmowy, i uruchom to polecenie

Curl LB_IP:110

Bezpośrednie żądania mogą wywołać odpowiedź od LB, ale poczekaj, aż żądanie curl zostanie odrzucone lub odrzucone, a następnie sprawdź w logach Cloud Logging, czy został wywołany wpis w logach dotyczący reguły odrzucania adresów IP.

Otwórz Cloud Logging i w sekcji Zasoby wybierz typ zasobu „tcp_ssl_proxy_rule”, a jako docelowe zaplecze wpisz „my-tcp-lb”.

Dzięki zdefiniowanym zasobom do filtrowania możemy sprawdzić, czy reguła odrzucania adresów IP jest aktywna na podstawie wartości 1000 w polu PRIORITY w rekordzie logowania. Z poziomu reguły odrzucania i adresu IP, który jest odrzucany, możemy też stwierdzić, że skonfigurowana akcja „DENY” jest aktywna.

db9b835e0360dcaf.png

8. Weryfikowanie reguły ograniczania szybkości

Aby sprawdzić, czy reguła dotycząca limitu szybkości jest aktywna, wyślij wiele żądań w krótkim czasie, przekraczając zdefiniowany próg (5 żądań na minutę).

Gdy to zrobisz, kliknij opcję wyświetlania logów w usłudze cloud armor. Przeniesie Cię to do Cloud Logging, gdzie możesz filtrować logi według systemu równoważenia obciążenia, aby wyświetlać logi cloud armor w miarę ich pojawiania się.

Wpis ograniczający szybkość powinien wyglądać jak na zrzucie ekranu poniżej. Możemy potwierdzić, że reguła ograniczania szybkości jest aktywna, ponieważ wartość PRIORITY w rekordzie dziennika wynosi 3000, a z ustawionej akcji wynika, że „RATE BASED BAN” jest aktywna zgodnie z instrukcjami reguły ograniczania szybkości.

37c76e5d7532623.png

9. Czyszczenie środowiska

Aby uniknąć kosztów utrzymania nieużywanej infrastruktury, pamiętaj o usunięciu utworzonej infrastruktury.

Najszybszym sposobem jest usunięcie całego projektu w GCP, aby mieć pewność, że nie ma żadnych nieużywanych zasobów.Możesz jednak usunąć poszczególne zasoby za pomocą tych poleceń

System równoważenia obciążenia serwera proxy TCP

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

Grupa instancji

gcloud compute instance-groups unmanaged delete vm-ig1

Utworzono 2 testowe maszyny wirtualne

gcloud compute instances delete Instance_name --zone=instance_zone

Usługa backendu

gcloud compute backend-services delete BACKEND_SERVICE_NAME

Reguły Cloud Armor w ramach zasady

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

Zasada zabezpieczeń Cloud Armor

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