1. Einführung
Mit Cloud Armor-Sicherheitsrichtlinien können Sie benutzerdefinierte Regeln konfigurieren, um Traffic am Rand des Google-Netzwerks vor Ihrer Infrastruktur zu filtern. Mit Netzwerk-Edge-Sicherheitsrichtlinien können Sie Traffic auf die folgenden Endpunkttypen schützen und zulassen oder blockieren: Network Load Balancer, Protokollweiterleitung und VMs mit öffentlichen IP-Adressen.
In diesem Code-Lab zeigen wir Ihnen, wie Sie Cloud Armor-Sicherheitsrichtlinien mit benutzerdefinierten Regeln konfigurieren, um DDoS-Angriffe zu verhindern.
Abbildung 1. Cloud Armor für VM mit öffentlichem IP-Schutz.
Aufgaben in diesem Lab
- Cloud Armor-Sicherheitsrichtlinien mit benutzerdefinierter Regelkonfiguration
- UDP-Offset-Konfigurationen und -Tests
Voraussetzungen
- Kenntnisse in TCP/IP
- Kenntnisse der Unix/Linux-Befehlszeile
2. Hinweis
Prüfen Sie in Cloud Shell, ob Ihre Projekt-ID eingerichtet ist
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
3. VPC-Zielnetzwerk erstellen
Im folgenden Abschnitt richten Sie VPC-Netzwerke und zugehörige Netzwerkkonfigurationen ein. Die Sicherheitsrichtlinie des Cloud Armor-Netzwerk-Edges ist regional. Wir richten alle zugehörigen Ressourcen in der Region asia-southeast1 ein.
VPC-Netzwerk
Von Cloud Shell
gcloud compute networks create ca4nlb --project=$prodproject --subnet-mode=custom
Subnetz erstellen
Von Cloud Shell
gcloud compute networks subnets create ca4nlb-asia-southeast1 --project=$prodproject --range=10.0.0.0/24 --network=ca4nlb --region=asia-southeast1
Firewallregeln erstellen.
In diesem Abschnitt fügen wir eine Firewallregel hinzu, die den erwarteten UDP-Traffic an Port 10000 zulässt.
Erstellen Sie in Cloud Shell eine Firewallregel, um UDP-Port 10000 für folgende Tests zu öffnen.
gcloud compute firewall-rules create ca4nlb-udp10000 --allow udp:10000 --network ca4nlb --source-ranges 0.0.0.0/0 --enable-logging
Erstellen Sie in Cloud Shell eine Firewallregel, damit IAP eine Verbindung zu Ihren VM-Instanzen herstellen kann.
gcloud compute firewall-rules create ca4nlb-iap-prod --network ca4nlb --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
4. Ziel-VM-Instanzen erstellen
Ziel-VM zum Testen von Sicherheitsrichtlinien erstellen Diese VM sollte eine öffentliche IP-Adresse haben und den UDP-Port 10000 öffnen.
Ziel-VM-Instanz in Cloud Shell erstellen
gcloud compute instances create targetvm \ --zone=asia-southeast1-b \ --image-family=debian-11 \ --image-project=debian-cloud \ --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=ca4nlb-asia-southeast1 \ --shielded-secure-boot \ --shielded-vtpm \ --shielded-integrity-monitoring
5. Erweiterten DDoS-Schutz für Netzwerke konfigurieren
Von Cloud Shell
gcloud compute security-policies create ca_advanced_ddos \ --type CLOUD_ARMOR_NETWORK \ --region asia-southeast1 gcloud compute security-policies update ca_advanced_ddos \ --network-ddos-protection ADVANCED \ --region asia-southeast1 gcloud compute network-edge-security-services create caedgepolicy \ --security-policy ca_advanced_ddos \ --region asia-southeast1
6. Sicherheitsrichtlinie für Netzwerk-Edge mit Standardregeln erstellen
Sicherheitsrichtlinie für Netzwerk-Edge erstellen
Von Cloud Shell
gcloud alpha compute security-policies create customnetworkedge --type=CLOUD_ARMOR_NETWORK --region=asia-southeast1
Standardregel bearbeiten
Von Cloud Shell
gcloud alpha compute security-policies rules update 2147483647 --security-policy=customnetworkedge --action=deny --region=asia-southeast1
7. Netzwerk-Edge-Sicherheitsrichtlinie mit verwendeten konfigurierten Regeln erstellen
Vom Nutzer vordefiniertes UDP-Offset und in der Cloud Armor-Richtlinie konfiguriert. Paket mit diesen „Offset-Werten“ übergibt die Richtlinienprüfung und sendet sie an die Back-End-VM. Im folgenden Beispiel definieren wir zwei „offset“-Elemente, mit unterschiedlichen Werten.
Der erste Wert befindet sich direkt nach dem UDP-Header, stimmt genau mit 2 Byte überein. 0x1700
Der zweite Wert ist 8 Byte des UDP-Headers verschoben, entspricht genau 4 Byte. 0x12345678
Der über dem vordefinierten Wert wird in eine Bitansicht des UDP-Pakets übersetzt.
Von Cloud Shell
gcloud alpha compute security-policies add-user-defined-field customnetworkedge \ --user-defined-field-name=SIG1_AT_0 \ --base=udp --offset=8 --size=2 --mask=0xFF00 \ --region=asia-southeast1 gcloud alpha compute security-policies add-user-defined-field customnetworkedge \ --user-defined-field-name=SIG2_AT_8 \ --base=udp --offset=16 --size=4 --mask=0xFFFFFFFF \ --region=asia-southeast1 gcloud alpha compute security-policies rules create 1000 \ --security-policy=customnetworkedge \ --network-user-defined-fields="SIG1_AT_0;0x1700,SIG2_AT_8;0x12345678" \ --action=allow --region=asia-southeast1
8. Sicherheitsrichtlinie an Ziel-VM anhängen
Fügen Sie über Cloud Shell die Sicherheitsrichtlinie an die geschützte VM an.
gcloud alpha compute instances network-interfaces update targetvm \ --security-policy=customnetworkedge \ --security-policy-region=asia-southeast1 \ --network-interface=nic0 \ --zone=asia-southeast1-b
In Cloud Shell wird die Ziel-VM beschrieben. Sie sehen, dass securityPolicy angehängt ist. Notieren Sie die öffentliche IP-Adresse für folgende Tests.
gcloud alpha compute instances describe targetvm --zone=asia-southeast1-b networkInterfaces: - accessConfigs: - kind: compute#accessConfig name: External NAT natIP: 35.240.148.100 networkTier: PREMIUM securityPolicy: https://www.googleapis.com/compute/alpha/projects/<project>/regions/asia-southeast1/securityPolicies/customnetworkedge
Trennen Sie die Sicherheitsrichtlinie von der geschützten VM in Cloud Shell.
gcloud alpha compute instances network-interfaces update targetvm \ --network-interface=nic0 \ --zone=asia-southeast1-b \ --security-policy=
9. Bereiten Sie Testressourcen vor.
Test-VPC-Netzwerk erstellen
Von Cloud Shell
gcloud compute networks create test --project=$prodproject --subnet-mode=custom
Testsubnetz erstellen
Von Cloud Shell
gcloud compute networks subnets create test-asia-southeast1 --project=$prodproject --range=10.0.1.0/24 --network=test --region=asia-southeast1
Firewall erstellen
Erstellen Sie in Cloud Shell eine Firewallregel, damit IAP eine Verbindung zu Ihren VM-Instanzen herstellen kann.
gcloud compute firewall-rules create test-iap-prod --network test --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
Test-VM erstellen
Von Cloud Shell
gcloud compute instances create test01 \ --zone=asia-southeast1-b \ --image-family=debian-11 \ --image-project=debian-cloud \ --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=test-asia-southeast1 \ --shielded-secure-boot \ --shielded-vtpm \ --shielded-integrity-monitoring
10. Überprüfung
Melden Sie sich in der Test-VM-Konsole an und installieren Sie den Paketgenerator packit
.
sudo apt install packit
Verwende Packit gemäß dem UDP-Offset-Design, um UDP-Pakete zu generieren. Wir simulieren ein (-t udp)-Paket von Schnittstelle (-s ens4), Quell-IP-Adresse (-s 10.0.1.2) mit Quellports (-S 10000) zur Ziel-VM-Ziel-IP-Adresse (-d 35.240.148.100) mit Zielports (-D 10000). Der Paketinhalt stimmt mit den Werten überein (-p "0x 17 00 00 00 00 00 00 00 12 34 56 78"). Wir senden (-c 4) Pakete.
sudo packit -m inject -t UDP -i ens4 -s 10.0.1.2 -d 35.240.148.100 -S 10000 -D 10000 -p '0x 17 00 00 00 00 00 00 00 12 34 56 78' -c 4
Führen Sie auf der Ziel-VM „tcpdump“ aus, um das UDP-Paket zu erfassen.
sudo tcpdump port 10000 -v -n tcpdump: listening on ens4, link-type EN10MB (Ethernet), snapshot length 262144 bytes 06:36:18.434106 IP (tos 0x0, ttl 128, id 17173, offset 0, flags [none], proto UDP (17), length 40) 35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12 06:36:19.433656 IP (tos 0x0, ttl 128, id 55641, offset 0, flags [none], proto UDP (17), length 40) 35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12 06:36:20.433935 IP (tos 0x0, ttl 128, id 27161, offset 0, flags [none], proto UDP (17), length 40) 35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12 06:36:21.434150 IP (tos 0x0, ttl 128, id 46782, offset 0, flags [none], proto UDP (17), length 40) 35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
Wenn wir die Traffic-Muster in der Test-VM ändern, können wir keine Pakete in der Ziel-VM erfassen.
sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 33 33 00 00 00 00 00 00 12 34 56 78' -c 4
11. Telemetrie
Öffnen Sie den Cloud-Messwert und verwenden Sie den unten angegebenen MQL, um NetworkSercurityPolicy-Telemetriedaten abzufragen.
fetch networksecurity.googleapis.com/RegionalNetworkSecurityPolicy | metric 'networksecurity.googleapis.com/l3/external/packet_count' | filter (resource.policy_name == 'customnetworkedge') | align rate(1m) | every 1m | group_by [metric.blocked], [value_packet_count_mean: mean(value.packet_count)] | group_by 1m, [value_packet_count_mean_mean: mean(value_packet_count_mean)] | every 1m
Generieren Sie Traffic mit hohem Volumen mit dem Befehl „match offset“.
sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 17 00 00 00 00 00 00 00 12 34 56 78' -c 1000000 -w 0.001 [result] Injected: 1000000 Packets/Sec: 10309.27 Bytes/Sec: 412371.13 Errors: 0
Generieren Sie Traffic mit hohem Volumen mit einem Offset-Befehl zum Aufheben der Übereinstimmung.
sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 11 00 00 00 00 00 00 00 12 34 56 78' -c 1000000 -w 0.001 [result] Injected: 1000000 Packets/Sec: 10309.27 Bytes/Sec: 412371.13 Errors: 0
Telemetrie wird nach „policy_name“ gefiltert und nach „blockiert“ gruppiert. Die blaue Linie zeigt den von den Richtlinienregeln zugelassenen Traffic an. Die grüne Linie kennzeichnet den von Richtlinienregeln blockierten Traffic.
12. Bereinigungsschritte
Löschen Sie die Lab-Komponenten in einer einzelnen Cloud Shell im Terminal.
gcloud compute instances delete targetvm --zone=asia-southeast1-b gcloud compute firewall-rules delete ca4nlb-udp10000 gcloud compute firewall-rules delete ca4nlb-iap-prod gcloud compute networks subnets delete ca4nlb-asia-southeast1 --region=asia-southeast1 gcloud compute networks delete ca4nlb gcloud alpha compute security-policies delete customnetworkedge --region=asia-southeast1 gcloud alpha compute network-edge-security-services delete caedgepolicy --region=asia-southeast1 gcloud alpha compute security-policies delete ca_advanced_ddos --region=asia-southeast1 gcloud compute instances delete test01 --zone=asia-southeast1-b gcloud compute firewall-rules delete test-iap-prod gcloud compute networks subnets delete test-asia-southeast1 --region=asia-southeast1 gcloud compute networks delete test
13. Glückwunsch!
Herzlichen Glückwunsch zum Abschluss des Codelabs.
Behandelte Themen
- Cloud Armor-Sicherheitsrichtlinien mit benutzerdefinierten Regeln