1. Wprowadzenie
Zasady zabezpieczeń Cloud Armor służą do konfigurowania reguł zdefiniowanych przez użytkownika w celu filtrowania ruchu na brzegu sieci Google, w stosunku do Twojej infrastruktury. Zasady zabezpieczeń brzegu sieci mogą służyć do ochrony i zezwalania na ruch kierowany na te typy punktów końcowych, a także do zezwalania na nie lub do blokowania ruchu kierowanego na te typy punktów końcowych: sieciowy system równoważenia obciążenia, przekierowanie protokołu i maszyny wirtualne z publicznymi adresami IP.
W tym module dotyczącym kodu pokażemy, jak skonfigurować zasady zabezpieczeń Cloud Armor za pomocą reguł zdefiniowanych przez użytkownika, aby zapobiegać atakom DDoS.
Rysunek 1. Cloud Armor do maszyn wirtualnych z publiczną ochroną IP.
Czego się nauczysz
- Zasady zabezpieczeń Cloud Armor z konfiguracją reguł definiowanych przez użytkownika
- Konfiguracje i testowanie przesunięcia UDP.
Czego potrzebujesz
- Wiedza na temat protokołów TCP/IP
- znajomości wiersza poleceń systemu Unix lub Linux;
2. Zanim zaczniesz
Sprawdź w Cloud Shell, czy identyfikator projektu jest skonfigurowany
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
3. Utwórz docelową sieć VPC
W następnej sekcji skonfigurujemy sieci VPC i powiązane z nimi konfiguracje sieci. Zasada zabezpieczeń brzegu sieci Cloud Armor jest oparta na regionach, wszystkie powiązane zasoby zostały skonfigurowane w regionie asia-southeast1.
Sieć VPC
Z Cloud Shell
gcloud compute networks create ca4nlb --project=$prodproject --subnet-mode=custom
Utwórz podsieć
Z Cloud Shell
gcloud compute networks subnets create ca4nlb-asia-southeast1 --project=$prodproject --range=10.0.0.0/24 --network=ca4nlb --region=asia-southeast1
Utwórz reguły zapory sieciowej.
W tej sekcji dodamy regułę zapory sieciowej, która przepuszcza oczekiwany ruch UDP na port 10 000.
W Cloud Shell utwórz regułę zapory sieciowej, aby otworzyć port UDP 10000 na potrzeby poniższych testów.
gcloud compute firewall-rules create ca4nlb-udp10000 --allow udp:10000 --network ca4nlb --source-ranges 0.0.0.0/0 --enable-logging
Utwórz w Cloud Shell regułę zapory sieciowej, która pozwoli IAP na łączenie się z instancjami maszyn wirtualnych.
gcloud compute firewall-rules create ca4nlb-iap-prod --network ca4nlb --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
4. Tworzenie docelowych instancji maszyn wirtualnych
Utwórz docelową maszynę wirtualną do testowania zasad zabezpieczeń. Ta maszyna wirtualna powinna mieć publiczny adres IP i otwarty port UDP 10000.
Utwórz docelową maszynę wirtualną w Cloud Shell
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. Konfigurowanie zaawansowanej ochrony przed atakami typu DDoS w sieci
Z 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. Tworzenie zasad zabezpieczeń brzegu sieci z regułami domyślnymi
Tworzenie zasady zabezpieczeń brzegu sieci
Z Cloud Shell
gcloud alpha compute security-policies create customnetworkedge --type=CLOUD_ARMOR_NETWORK --region=asia-southeast1
Modyfikowanie reguły domyślnej
Z Cloud Shell
gcloud alpha compute security-policies rules update 2147483647 --security-policy=customnetworkedge --action=deny --region=asia-southeast1
7. Tworzenie zasad zabezpieczeń brzegu sieci z używanymi regułami
Użytkownik wstępnie zdefiniował przesunięcie UDP i został skonfigurowany w zasadzie Cloud Armor. Pakiet z tymi „wartościami przesunięcia” przejdzie weryfikację zgodności z zasadami i wyśle ją do maszyny wirtualnej backendu. W poniższym przykładzie zdefiniujemy dwa „przesunięcie” o różnych wartościach.
Pierwsza wartość znajduje się tuż po nagłówku UDP – dokładnie pasuje do 2 bajtów 0x1700
Druga wartość to przesunięcie o 8 bajtów nagłówka UDP – dokładnie pasuje do 4 bajtów 0x12345678
Powyżej wstępnie zdefiniowanej wartości zostanie wyświetlony widok bitów pakietu UDP.
Z 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. Dołącz zasadę zabezpieczeń do docelowej maszyny wirtualnej
Z poziomu Cloud Shell dołączanie zasad zabezpieczeń do chronionej maszyny wirtualnej.
gcloud alpha compute instances network-interfaces update targetvm \ --security-policy=customnetworkedge \ --security-policy-region=asia-southeast1 \ --network-interface=nic0 \ --zone=asia-southeast1-b
W Cloud Shell opisz docelową maszynę wirtualną. Wyświetli się zasada SecurityPolicy. Zarejestruj publiczny adres IP na potrzeby kolejnych testów.
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
Odłączenie zasady zabezpieczeń od chronionej maszyny wirtualnej w Cloud Shell.
gcloud alpha compute instances network-interfaces update targetvm \ --network-interface=nic0 \ --zone=asia-southeast1-b \ --security-policy=
9. Przygotuj zasoby testowe.
Tworzenie testowej sieci VPC
Z Cloud Shell
gcloud compute networks create test --project=$prodproject --subnet-mode=custom
Utwórz podsieć testową
Z Cloud Shell
gcloud compute networks subnets create test-asia-southeast1 --project=$prodproject --range=10.0.1.0/24 --network=test --region=asia-southeast1
Utwórz zaporę sieciową
Utwórz w Cloud Shell regułę zapory sieciowej, która pozwoli IAP na łączenie się z instancjami maszyn wirtualnych.
gcloud compute firewall-rules create test-iap-prod --network test --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
Tworzenie testowej maszyny wirtualnej
Z 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. Weryfikacja
Zaloguj się do testowej konsoli maszyny wirtualnej i zainstaluj generator pakietów packit
.
sudo apt install packit
Zgodnie z projektem przesunięcia UDP użyj polecenia packit do wygenerowania pakietów UDP. Symulujemy pakiet (-t udp) z interfejsu (-s ens4) źródłowego adresu IP (-s 10.0.1.2) z portami źródłowymi (-S 10000) do docelowego adresu IP docelowej maszyny wirtualnej (-d 35.240.148.100) z portami docelowymi (-D 10000). Zawartość pakietu pasuje do wartości (-p ‘0x 17 00 00 00 00 00 00 00 12 34 56 78'). Będziemy wysyłać pakiety (-c 4).
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
W docelowej maszynie wirtualnej uruchom tcpdump, aby przechwycić pakiet UDP.
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
Jeśli zmienimy wzorce ruchu w testowej maszynie wirtualnej, nie będziemy mogli przechwycić żadnych pakietów w docelowej maszynie wirtualnej.
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. Dane telemetryczne
Otwórz wskaźnik Cloud, użyj poniżej MQL, aby wysyłać zapytania dotyczące danych telemetrycznych NetworkSercurityPolicy.
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
Generuj duży ruch, korzystając z polecenia przesunięcia dopasowania.
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
Generuj duży ruch za pomocą polecenia przesunięcia.
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
Dane telemetryczne są filtrowane według nazwy policy_name i grupowane według zablokowanych. Niebieska linia wskazuje ruch dozwolony przez reguły zasad. Zielona linia wskazuje ruch zablokowany przez reguły zasad.
12. Procedura czyszczenia
Z pojedynczej powłoki Cloud Shell w terminalu usuń komponenty modułu
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. Gratulacje!
Gratulujemy ukończenia ćwiczeń z programowania.
Omówione zagadnienia
- Zasady zabezpieczeń Cloud Armor z regułami zdefiniowanymi przez klienta