Ć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 serwera proxy TCP 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 opracowany przez Google system wykrywania rozproszonej odmowy usługi i zapory sieciowej aplikacji internetowej (WAF). Usługa Cloud Armor jest ściśle połączona z systemem równoważenia obciążenia serwera proxy Google Cloud TCP i umożliwia wykrywanie niechcianych żądań. Funkcja ograniczania liczby żądań w tej usłudze pozwala ograniczać ruch do zasobów backendu na podstawie liczby żądań i zapobiega wykorzystywaniu zasobów w sieci prywatnego środowiska wirtualnego w chmurze (VPC) przez niechciany ruch.

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

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

be33dadf836374bb.png

Czego się nauczysz

  • Jak utworzyć system równoważenia obciążenia serwera proxy TCP/SSL
  • Jak utworzyć zasadę zabezpieczeń Cloud Armor
  • Jak utworzyć regułę listy odrzuconych adresów IP dla systemu równoważenia obciążenia serwera proxy TCP/SSL w Cloud Armor
  • Jak utworzyć regułę ograniczania liczby żądań dla systemu równoważenia obciążenia serwera proxy TCP w Cloud Armor
  • Jak dodać zasadę zabezpieczeń do usługi backendu równoważenia obciążenia TCP/SSL

Czego potrzebujesz

  • Podstawowa znajomość Google Compute Engine ( codelab)
  • Podstawowa wiedza o sieciach i TCP/IP
  • Podstawowa wiedza na temat wiersza poleceń systemu Unix/Linux.
  • Warto zapoznać się z prezentacją sieci w GCP w temacie Networking in the Google Cloud (Sieć w Google Cloud).

2. Wymagania

Samodzielne konfigurowanie środowiska

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Zapamiętaj identyfikator projektu, unikalną nazwę we wszystkich projektach Google Cloud (powyższa nazwa jest już zajęta i nie będzie Ci odpowiadać). W dalszej części tego ćwiczenia z programowania będzie on określany jako PROJECT_ID.

Uwaga: jeśli używasz konta Gmail, możesz pozostawić domyślną lokalizację ustawioną na Brak organizacji. Jeśli używasz konta Google Workspace, wybierz lokalizację, która będzie odpowiednia dla Twojej organizacji.

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

Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Postępuj zgodnie z instrukcjami podanymi w sekcji „Czyszczenie” W tym samouczku znajdziesz wskazówki, jak wyłączyć zasoby, aby uniknąć naliczania opłat. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

Uruchamianie Cloud Shell

Google Cloud można obsługiwać zdalnie z laptopa, ale w ramach tego ćwiczenia z programowania wykorzystasz Google Cloud Shell – środowisko wiersza poleceń działające w chmurze.

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

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

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

Zanim zaczniesz

Sprawdź w Cloud Shell, 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łącz wszystkie niezbędne usługi

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 następujący sposób – utwórz instancję 1-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 w maszynie wirtualnej vm-ig1

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

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

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

Dodaj instancje 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 utworzymy 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

Dodaj grupę 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

Zarezerwuj globalne statyczne adresy IPv4

Ten adres IP będzie używany, aby połączyć się z usługą 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 systemu równoważenia obciążenia.

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 systemu równoważenia obciążenia

Utwórz 2 instancje, każdą z publicznym adresem IP oraz nazwami „test-server1” i „test-server2”.

6. Tworzenie zasady zabezpieczeń w Cloud Armor

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

Pierwsza reguła blokuje dostęp ograniczony zestaw adresów IP do systemu równoważenia obciążenia TCP przez ustawienie zasady zabezpieczeń, która odrzuca określone adresy IP, a druga ogranicza liczbę żądań.

  1. W Cloud Shell utwórz zasadę zabezpieczeń usługi backendu o nazwie rate-limit-and-deny-tcp w sekcji „Konfiguracja i wymagania” w sekcji „Konfiguracja i wymagania”. Składaj w ten sposób zasadę zabezpieczeń usługi backendu:
gcloud compute security-policies create rate-limit-and-deny-tcp \
    --description "policy for tcp proxy rate limiting and IP deny"

Dodaj reguły do zasady zabezpieczeń

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

Dodaj regułę ograniczającą częstotliwość do zasady zabezpieczeń Cloud Armor „limit-i-odmowa-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łącz zasadę do usługi backendu serwera proxy TCP:

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

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

Włącz logowanie 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. Zweryfikuj regułę listy odrzuconych

Zweryfikuj regułę listy odrzuconych, logując się na serwer testowy, którego adres IP został określony w regule listy odrzuconych, i uruchom następujące polecenie

Curl LB_IP:110

Natychmiastowe żądania mogą zwrócić odpowiedź z systemu równoważenia obciążenia, ale poczekać, aż żądanie curl zostanie odrzucone lub usunięte, a następnie sprawdzić logi w Cloud Logging, aby zweryfikować wpis logu dla aktywowanej reguły odmowy adresu IP.

Otwórz Cloud Logging i w sekcji zasobów wybierz typ zasobu „tcp_ssl_proxy_rule” i ustaw miejsce docelowe backendu na „my-tcp-lb”.

Po zdefiniowaniu zasobów na potrzeby filtrowania możemy sprawdzić, czy reguła odmowy adresu IP działa na podstawie wartości PRIORITY we wpisie logu i że działa skonfigurowane działanie „ODRZUĆ”, ponieważ instrukcje pochodzi z reguły odmowy i odrzuconego adresu IP (jak pokazano poniżej).

db9b835e0360dcaf.png

8. Zweryfikuj regułę ograniczania liczby żądań

Sprawdź, czy reguła limitu liczby żądań działa, wysyłając wiele żądań w krótkim czasie, który przekracza zdefiniowany próg (5 żądań na minutę).

Gdy to zrobisz, kliknij wyświetl logi w usłudze Cloud Armor. Spowoduje to przejście do Cloud Logging, gdzie możesz filtrować logi według systemu równoważenia obciążenia, aby wyświetlać logi Cloud Armor na bieżąco.

Wpis ograniczający częstotliwość powinien wyglądać tak jak na zrzucie ekranu poniżej. Możemy sprawdzić, czy reguła limitu liczby żądań działa na podstawie wartości PRIORITY wynoszącej 3000 we wpisie logu, a po skonfigurowaniu działania „RATE BASED BAN” działa zgodnie z instrukcjami w regule ograniczania liczby żądań.

37c76e5d7532623.png

9. Czyszczenie środowiska

Pamiętaj, aby oczyścić utworzoną infrastrukturę, aby uniknąć kosztów nieużywanej infrastruktury.

Najszybszym sposobem jest usunięcie całego projektu w GCP, aby mieć pewność, że nie pozostaną nienadzorowane zasoby.Możesz jednak usunąć poszczególne zasoby, korzystając z 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

2 testowe instancje maszyn wirtualnych zostały utworzone

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 zasadzie

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