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 genelindeki 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 Yük Dengeleyici ile sıkı bir şekilde bağlantılıdır ve istenmeyen istekler için gelen trafiği sorgulamanıza olanak tanır. Bu hizmetin hız sınırlama özelliği, istek hacmine göre arka uç kaynaklarına olan trafiği azaltmanıza olanak tanır ve istenmeyen trafiğin Sanal Özel Bulut (VPC) ağınızdaki kaynakları tüketmesini önler.

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

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

be33dadf836374bb.png

Neler öğreneceksiniz?

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

Gerekenler

  • Temel Google Compute Engine bilgisi ( codelab)
  • Temel ağ iletişimi ve TCP/IP bilgisi
  • Temel Unix/Linux komut satırı bilgisi
  • Google Cloud'da Ağ İletişimi ile GCP'de ağ iletişimi turuna katılın.

2. Şartlar

Kendi hızınızda ortam kurulumu

  1. Cloud Console'da oturum açıp 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: Console.cloud.google.com URL'sini ezberleyerek Cloud Console'a kolayca erişebilirsiniz.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Tüm Google Cloud projelerinde benzersiz bir ad olan proje kimliğini unutmayın (yukarıdaki ad zaten alınmış ve size uygun olmayacaktır!). Bu kod, bu codelab'in ilerleyen bölümlerinde PROJECT_ID olarak adlandırılacaktır.

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

  1. Sonraki adımda, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.

Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. "Temizleme" bölümündeki talimatları izlediğinizden emin olun. bölümünde, bu eğiticinin dışında faturalandırmayla karşılaşmamanız için kaynakları nasıl kapatacağınız konusunda tavsiyelerde bulunuyoruz. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

Cloud Shell'i Başlatma

Google Cloud dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.

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

bce75f34b2c53987.png

Ortamı sağlamak ve bağlamak yalnızca birkaç dakika sürer. Tamamlandığında şuna benzer bir sonuç görmeniz gerekir:

f6ef2b5f13479f3a.png

İhtiyacınız olan tüm geliştirme araçlarını bu sanal makinede bulabilirsiniz. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu laboratuvardaki tüm çalışmalarınızı yalnızca bir tarayıcıyla 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 alt bölgesinde example1-b1'i 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ği 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 grubu 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 laboratuvar için 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

Şimdi 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 adreslerini ayırtın

Yük dengeli hizmetinize ulaşmak için bu IP adresini kullanacaksı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 bunu test edin

Curl LB_IP:110

Ardından, LB'ye erişim reddinin doğrulanması için sanal makine oluşturun

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

6. Cloud Armor'da Güvenlik Politikası Oluşturma

Bu bölümde Cloud Armor'daki politikada bir arka uç güvenlik politikası ve 2 kural oluşturacaksınız.

İlk kural belirli IP'leri reddedecek bir güvenlik politikası belirleyerek sınırlı bir IP grubunun TCP Yük Dengeleyici'ye erişimini reddeder, ikinci kural da hız sınırlaması uygular.

  1. Cloud Shell'de(Cloud Shell'in nasıl kullanılacağıyla ilgili talimatlar için "Kurulum ve Gereksinimler" bölümündeki "Cloud Shell'i Başlatma" bölümüne bakın) aşağıdaki gibirate-limit-and-deny-tcp adlı bir arka uç hizmeti 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, Cloud Armor politikasına ("rate-limit-and-deny-tcp") bir reddetme 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"

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

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

TCP Proxy arka uç hizmetine politika 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 Dengeleyici'de günlük kaydını etkinleştir

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

7. Reddetme listesi kuralını doğrula

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

Curl LB_IP:110

Anında istekler LB'den yanıt verebilir ancak curl isteği reddedilene veya bırakılana kadar bekleyin ve ardından tetiklenen IP reddetme kuralıyla ilgili günlük girişini doğrulamak için Cloud Logging'deki günlüklere göz atın.

Cloud Logging'e 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şinde 1000 olan PRIORITY değeri üzerinden IP reddetme kuralının yürürlükte olduğunu ve yapılandırılmış "DENY" işleminin, hem reddetme kuralından hem de IP'nin reddedildiğinde belirtildiği gibi yapılandırıldığını doğrulayabiliriz.

db9b835e0360dcaf.png

8. Hız sınırlama kuralını doğrulayın

Hız sınırı kuralının, tanımlanan eşiği aşan (dakikada 5 istek) kısa bir süre içinde çok sayıda istek göndererek etkili olduğunu doğrulayın.

Bu işlem tamamlandığında Cloud Armor hizmetindeki günlükleri görüntüle seçeneğini tıklayın. Bulut günlük kaydına yönlendirilirsiniz. Burada günlükleri, yük dengeleyiciye göre filtreleyerek gelen bulut zırhı günlüklerini görebilirsiniz.

Hız sınırlama girişi aşağıdaki ekran görüntüsüne göre olmalıdır. Hız sınırı kuralının geçerli olduğunu, günlük girişindeki 3000 olan PRIORITY değerinden ve yapılandırılan işlemde "HIZ TABANLI BAN" işleminin, hız sınırlama kuralında belirtildiği şekilde yürürlükte olduğunu doğrulayabiliriz.

37c76e5d7532623.png

9. Çevre Temizliği

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

En hızlı yol, gözetimsiz kalan kaynak kalmadığından emin olmak için Projenin tamamını GCP'den silmektir. Ancak aşağıdaki komutları kullanarak kaynakları tek tek silebilirsiniz.

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