Cloud Armor für NLB/VM mit benutzerdefinierten Regeln

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.

7bc9d3ed0c03b54f.png

In diesem Code-Lab zeigen wir Ihnen, wie Sie Cloud Armor-Sicherheitsrichtlinien mit benutzerdefinierten Regeln konfigurieren, um DDoS-Angriffe zu verhindern.

f0a40260147e71b1.png

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.

cbfdaeb93292e07b.png

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.

b11ba15d87f99775.png

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