TCP Proxy Codelab - TCP Proxy Yük Dengeleyici ile hız sınırlama ve IP Reddetme listesi

1. Giriş

Google Cloud yük dengeleme, Google'ın dünya çapındaki varlık noktalarında (POP) yer alan ağının ucunda dağıtılır. TCP Proxy yük dengeleyiciye yönlendirilen kullanıcı trafiği, kullanıcıya en yakın varlık noktasına girer, ardından Google'ın global ağı üzerinden yeterli kapasiteye sahip en yakın arka uca doğru yük dengelemesi yapılır.

Cloud Armor, Google'ın dağıtılmış hizmet reddi ve web uygulaması güvenlik duvarı (WAF) algılama sistemidir. Cloud Armor, Google Cloud TCP Proxy Load Balancer ile sıkı bir şekilde bağlıdır ve gelen trafiği istenmeyen istekler için sorgulamanıza olanak tanır. Bu hizmetin hız sınırlama özelliği, istek hacmine göre arka uç kaynaklarına giden trafiği azaltmanıza olanak tanır ve istenmeyen trafiğin Sanal Özel Bulut (VPC) ağınızdaki kaynakları tüketmesini engeller.

Google Cloud TCP/SSL proxy yük dengeleyicileri, TCP/ SSL türü trafiği arka uç hizmetleriniz arasında proxy olarak kullanmanıza olanak tanır.

Bu laboratuvarda, arka uç hizmeti içeren bir TCP/SSL yük dengeleyici oluşturacak ve yük dengeleyiciye erişimi yalnızca belirli bir kullanıcı istemcisi grubuyla sınırlayacaksınız.

be33dadf836374bb.png

Neler öğreneceksiniz?

  • TCP/SSL proxy yük dengeleyici oluşturma
  • Cloud Armor güvenlik politikası oluşturma
  • Cloud Armor'da TCP/SSL proxy yük dengeleyici için IP reddedilecekler listesi kuralı oluşturma
  • Cloud Armor'da TCP proxy yük dengeleyici için hız sınırlama kuralı oluşturma
  • Güvenlik politikasını TCP/SSL yük dengeleme arka uç hizmetine ekleme

İhtiyacınız olanlar

  • Google Compute Engine hakkında temel bilgiler ( codelab)
  • Temel ağ ve TCP/IP bilgisi
  • Temel Unix/Linux komut satırı bilgisi
  • Google Cloud'da Ağ İletişimi ile GCP'de ağ oluşturma turu tamamlamanız faydalı olacaktır.

2. Şartlar

Kendi hızınızda ortam kurulumu

  1. Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

Not: Cloud Console'a kolayca erişmek için console.cloud.google.com URL'sini ezberleyebilirsiniz.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Proje kimliğini unutmayın. Bu, tüm Google Cloud projeleri genelinde benzersiz bir addır (yukarıdaki ad zaten alınmış olduğundan kullanılamaz). Bu codelab'de daha sonra PROJECT_ID olarak anılacaktır.

Not: Gmail hesabı kullanıyorsanız varsayılan konumu Kuruluş yok olarak ayarlayabilirsiniz. Google Workspace hesabı kullanıyorsanız kuruluşunuz için uygun bir konum seçin.

  1. Ardından, Google Cloud kaynaklarını kullanabilmek için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.

Bu codelab'i çalıştırmak çok pahalı olmayacaktır. Bu eğiticinin dışında faturalandırılmamak için "Temizleme" bölümündeki kaynakları nasıl kapatacağınıza dair talimatları uyguladığınızdan emin olun. Google Cloud'un yeni kullanıcıları 300 ABD doları değerindeki ücretsiz deneme programına uygundur.

Cloud Shell'i Başlatma

Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir olsa da bu kod laboratuvarında bulutta çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.

GCP Console'da, sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

bce75f34b2c53987.png

Ortam sağlanıp bağlantı kurulabilmesi için birkaç saniye beklemeniz gerekir. İşlem tamamlandığında aşağıdakine benzer bir ekran görürsünüz:

f6ef2b5f13479f3a.png

Bu sanal makinede ihtiyaç duyacağınız tüm geliştirme araçları yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansını ve kimlik doğrulamayı büyük ölçüde iyileştirir. Bu laboratuvardaki tüm çalışmalarınızı yalnızca bir tarayıcı kullanarak yapabilirsiniz.

Başlamadan önce

Cloud Shell'de proje kimliğinizin ayarlandığından emin olun

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

API'leri etkinleştir

Gerekli tüm hizmetleri etkinleştirin

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

3. Arka uç hizmetleri oluşturma

Aşağıdaki gibi 2 örnek oluşturun: us-central1-b bölgesinde instance1-b1 oluşturun

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"

us-central1-b alt bölgesinde 1-b2 örneğini oluşturun

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"

vm-ig1 örnek grubunu oluşturma

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

Örnek grubu için adlandırılmış bir bağlantı noktası oluşturun. Bu laboratuvarda 110 numaralı bağlantı noktasını kullanacağız.

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

Örnekleri örnek grubuna ekleme

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

4. Yük dengeleyiciyi yapılandırma

Ardından bir durum denetimi oluşturacağız.

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

Arka uç hizmeti oluşturma

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

Örnek grubunu arka uç hizmetine ekleme

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

Hedef TCP proxy'si yapılandırma

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

Genel statik IPv4 adresleri ayırma

Yük dengelenmiş hizmetinize ulaşmak için bu IP adresini kullanırsınız.

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

LB IP adresi için genel iletim kurallarını yapılandırın.

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. TCP proxy yük dengeleyici için güvenlik duvarı kuralı oluşturma

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

Yük dengeleyiciniz oluşturulduktan sonra aşağıdaki komutla test edin

Curl LB_IP:110

Ardından, LB'ye erişim reddedilmesinin doğrulanması için sanal makineler oluşturun.

Her biri herkese açık IP adresine sahip ve test-server1 ile test-server2 olarak adlandırılmış 2 örnek oluşturmanız gerekir.

6. Cloud Armor'da güvenlik politikası oluşturma

Bu bölümde, Cloud Armor'da bir arka uç güvenlik politikası ve politikaya 2 kural ekleyeceksiniz.

İlk kural, belirli IP'leri reddetmek için bir güvenlik politikası ayarlayarak sınırlı sayıda IP'nin TCP Yük Dengeleyici'ye erişmesini engeller. İkinci kural ise hız sınırlamasını gerçekleştirir.

  1. Cloud Shell'de(Cloud Shell'in nasıl kullanılacağıyla ilgili talimatlar için "Kurulum ve Şartlar" bölümündeki "Cloud Shell'i başlatma" bölümüne bakın) aşağıdaki gibi rate-limit-and-deny-tcp adlı bir arka uç hizmet güvenlik politikası oluşturun:
gcloud compute security-policies create rate-limit-and-deny-tcp \
    --description "policy for tcp proxy rate limiting and IP deny"

Güvenlik Politikasına Kural Ekleme

Ardından, "rate-limit-and-deny-tcp" adlı Cloud Armor politikasına bir engellenenler listesi kuralı ekleyin.

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"

"rate-limit-and-deny-tcp" adlı Cloud Armor güvenlik politikasına bir hız sınırlama kuralı ekleme

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

Politikayı TCP Proxy arka uç hizmetine ekleyin:

Güvenlik politikasının TCP Proxy arka uç hizmetine eklendiğinden emin olmak için aşağıdaki komutu çalıştırın.

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

TCP Proxy Yük Dengelemede günlük kaydını etkinleştirme

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

7. Engellenenler listesi kuralını doğrulama

IP'si, reddetme listesi kuralında belirtilen test sunucusuna giriş yaparak ve aşağıdaki komutu çalıştırarak reddetme listesi kuralını doğrulayın

Curl LB_IP:110

Anında istek, LB'den yanıt verebilir ancak curl isteğinin reddedilmesini veya bırakılmasını bekleyin ve ardından IP reddetme kuralının tetiklendiğine dair günlük girişini doğrulamak için Cloud Logging'daki günlüklere göz atın.

Cloud Logging'a gidin ve kaynaklar bölümünde kaynak türünü "tcp_ssl_proxy_rule" olarak seçin ve arka uç hedefini "my-tcp-lb" olarak ayarlayın.

Filtreleme için tanımlanan kaynaklarla, günlük girişindeki 1000 PRIORITY değerinden IP reddetme kuralının geçerli olduğunu ve yapılandırılmış "DENY" işleminin, hem reddetme kuralından hem de aşağıda gösterildiği gibi IP'nin reddedilmesinden talimat aldığı için geçerli olduğunu doğrulayabiliriz.

db9b835e0360dcaf.png

8. Hız sınırlaması kuralını doğrulama

Kısa bir zaman aralığında, tanımlanan eşiği (dakikada 5 istek) aşan çok sayıda istek göndererek hız sınırı kuralının geçerli olduğunu doğrulayın.

Bu işlem tamamlandıktan sonra Cloud Armor hizmetinde günlükleri görüntüle'yi tıklayın. Bu işlem sizi Cloud Logging'e yönlendirir. Burada günlükleri yük dengeleyiciye göre filtreleyerek Cloud Armor günlüklerini geldikçe görebilirsiniz.

Hız sınırlama girişi aşağıdaki ekran görüntüsüne göre olmalıdır. Günlük girişindeki 3000 olan ÖNCELİK değerinden ve yapılandırılmış işlemden, "HAREKET TABANLI KISITLAMA" işleminin, eşik sınırlama kuralında belirtildiği şekilde geçerli olduğunu doğrulayabiliriz.

37c76e5d7532623.png

9. Çevre Temizliği

Kullanılmayan altyapının maliyetlerini önlemek için oluşturulan altyapıyı temizlediğinizden emin olun.

En hızlı yol, gözetimsiz bırakılan kaynak kalmadığından emin olmak için GCP'deki projenin tamamını silmektir. Ancak aşağıdaki komutlarla kaynakları tek tek silin.

TCP Proxy yük dengeleyici

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

Örnek grubu

gcloud compute instance-groups unmanaged delete vm-ig1

Oluşturulan 2 test sanal makine örneği

gcloud compute instances delete Instance_name --zone=instance_zone

Arka uç hizmeti

gcloud compute backend-services delete BACKEND_SERVICE_NAME

Politikadaki Cloud Armor kuralları

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 güvenlik politikası

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