Limitazione di frequenza con Cloud Armor

1. Introduzione

Il bilanciamento del carico HTTP(S) di Google Cloud viene implementato sul perimetro della rete Google, nei punti di presenza (POP) Google in tutto il mondo. Il traffico utente indirizzato a un bilanciatore del carico HTTP(S) entra nella rete Google attraverso il POP più vicino all'utente. Quindi, il carico viene bilanciato sulla rete Google globale e indirizzato verso il backend più vicino con capacità disponibile sufficiente.

Cloud Armor è il sistema di rilevamento Distributed Denial of Service e WAF (Web Application Firewall) di Google. Cloud Armor è strettamente accoppiato al bilanciatore del carico HTTP di Google Cloud e ti consente di esaminare il traffico in entrata per individuare richieste indesiderate. La funzionalità di limitazione della frequenza di questo servizio ti consente di ridurre il traffico verso le risorse di backend in base al volume delle richieste e impedisce al traffico indesiderato di utilizzare risorse sulla tua rete Virtual Private Cloud (VPC).

In questo lab configurerai un bilanciatore del carico HTTP con backend globali, come illustrato dal diagramma riportato di seguito. Successivamente, sottoporrai il bilanciatore del carico a uno stress test e aggiungerai una policy di limitazione della frequenza di Cloud Armor per limitare il traffico che raggiunge le risorse di backend.

2e1b99d22f4f32a.png

Cosa imparerai a fare

  • Come configurare un bilanciatore del carico HTTP con controlli di integrità appropriati.
  • Come creare una policy di limitazione della frequenza di Cloud Armor.
  • Come verificare che la policy di limitazione della frequenza blocchi il traffico durante l'esecuzione di un test di stress da una VM.

Che cosa ti serve

  • Conoscenza di base del networking e di HTTP
  • Conoscenza di base della riga di comando Unix/Linux

2. Configurazione e requisiti

Configurazione dell'ambiente autonomo

  1. Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google e puoi aggiornarla in qualsiasi momento.
  • L'ID progetto deve essere univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). Cloud Console genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (che in genere è identificato come PROJECT_ID), quindi, se non ti piace, generane un altro casuale oppure puoi provare il tuo e vedere se è disponibile. Viene "congelato" dopo la creazione del progetto.
  • Esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Per arrestare le risorse in modo da non incorrere in costi di fatturazione al termine di questo tutorial, segui le istruzioni di "pulizia" riportate alla fine del codelab. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.

Avvia Cloud Shell

Sebbene Google Cloud possa essere gestito da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.

Nella console GCP, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

bce75f34b2c53987.png

Bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere un risultato simile a questo:

f6ef2b5f13479f3a.png

Questa macchina virtuale è caricata con tutti gli strumenti per sviluppatori di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Tutto il lavoro di questo lab può essere svolto semplicemente con un browser.

Prima di iniziare

In Cloud Shell, assicurati che l'ID progetto sia configurato.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
PROJECT_ID=[YOUR-PROJECT-NAME]
echo $PROJECT_ID

Abilita le API

Attiva tutti i servizi necessari

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com

3. Configura regole firewall per consentire il traffico HTTP verso i backend

Configura regole firewall per consentire il traffico HTTP verso i backend dai controlli di integrità di Google Cloud e dal bilanciatore del carico.

Utilizzeremo la rete VPC predefinita creata nel tuo progetto. Crea una regola firewall per consentire il traffico HTTP verso i backend. I controlli di integrità determinano quali istanze di un bilanciatore del carico possono ricevere nuove connessioni. Per il bilanciamento del carico HTTP, i probe di controllo dell'integrità che verificano le tue istanze con bilanciamento del carico provengono da indirizzi inclusi negli intervalli 130.211.0.0/22 e 35.191.0.0/16. Le regole firewall VPC devono consentire queste connessioni. Inoltre, i bilanciatori del carico comunicano con il backend nello stesso intervallo IP.

  1. Nella console Cloud, vai a Menu di navigazione ( mainmenu.png) > Rete VPC > Firewall.

dbdf491e6d7863f3.png

  1. Osserva le regole firewall ICMP, internal, RDP ed SSH esistenti.Ogni progetto Google Cloud viene avviato con la rete predefinita e queste regole firewall.
  2. Fai clic su Crea regola firewall.
  3. Specifica i valori seguenti e lascia le impostazioni predefinite per gli altri valori:

Proprietà

Valore (digita il valore o seleziona l'opzione come specificato)

Nome

default-allow-health-check

Rete

predefinita

Destinazioni

Tag di destinazione specificati

Tag di destinazione

http-server

Filtro di origine

Intervalli IP

Intervalli IP di origine

130.211.0.0/22, 35.191.0.0/16

Protocolli e porte

Protocolli e porte specificati, quindi seleziona tcp

  1. Fai clic su Crea.

In alternativa, se utilizzi la riga di comando gcloud. Di seguito è riportato il comando:

gcloud compute firewall-rules create default-allow-health-check --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp --source-ranges=130.211.0.0/22,35.191.0.0/16 --target-tags=http-server

4. configura i modelli di istanza e crea i gruppi di istanze gestite

Un gruppo di istanze gestite utilizza un modello di istanza per creare un gruppo di istanze identiche, che puoi utilizzare per creare i backend del bilanciatore del carico HTTP.

Configura i modelli di istanza

Un template di istanza è una risorsa API che puoi utilizzare per creare istanze VM e gruppi di istanze gestite. I modelli di istanza definiscono il tipo di macchina, l'immagine del disco di avvio, la subnet, le etichette e altre proprietà dell'istanza. Crea un modello di istanza per us-east1 un altro per europe-west1.

  1. Nella console Cloud, vai a Menu di navigazione ( mainmenu.png) > Compute Engine > Modelli di istanza e fai clic su Crea modello di istanza.
  2. In corrispondenza di Nome, digita us-east1-template.
  3. In Serie, seleziona N1.
  4. Fai clic su Networking, dischi, sicurezza, gestione , single tenancy.

b60e2a44c3e4d50e.png

  1. Vai alla sezione Gestione:

ee57f20ce55298fd.png

  1. In Metadati, fai clic su Aggiungi elemento e specifica quanto segue:

Key (Chiave)

Valore

startup-script-url

gs://cloud-training/gcpnet/httplb/startup.sh

  1. Fai clic su Networking.
  2. Specifica i valori seguenti e lascia le impostazioni predefinite per gli altri valori:

Proprietà

Valore (digita il valore o seleziona l'opzione come specificato)

Rete (in Interfacce di rete)

predefinito

Subnet (in Interfacce di rete)

predefinita (us-east1)

Tag di rete

http-server

  1. Fai clic su Crea.
  2. Attendi il completamento della creazione del modello di istanza.

Ora crea un altro modello di istanza per subnet-b copiando us-east1-template:

  1. Fai clic su us-east1-template e poi sull'opzione Copia in alto.
  2. In corrispondenza di Nome, digita europe-west1-template.
  3. Fai clic su Networking, dischi, sicurezza, gestione , single tenancy.
  4. Fai clic su Networking.
  5. In Interfacce di rete,modifica l'interfaccia predefinita. Per Subnet, seleziona predefinita (europe-west1).
  6. Fai clic su Crea.

Crea i gruppi di istanze gestite

Crea un gruppo di istanze gestite in us-east1 e uno in europe-west1.

  1. Sempre in Compute Engine, fai clic su Gruppi di istanze nel menu a sinistra.

72319de055de3942.png

  1. Fai clic su Crea gruppo di istanze. Seleziona Nuovo gruppo di istanze gestite (stateless).
  2. Specifica i valori seguenti e lascia le impostazioni predefinite per gli altri valori:

Proprietà

Valore (digita il valore o seleziona l'opzione come specificato)

Nome

us-east1-mig

Posizione

Più zone

Area geografica

us-east1

Modello di istanza

us-east1-template

Scalabilità automatica > Criterio di scalabilità automatica > Fai clic sull'icona a forma di matita > Tipo di metrica

Utilizzo CPU

Utilizzo CPU target

80, fai clic su Fine.

Periodo di raffreddamento

45

Numero minimo di istanze

1

Numero massimo di istanze

5

  1. Fai clic su Crea.

Ora ripeti la stessa procedura per creare un secondo gruppo di istanze per europe-west1-mig in europe-west1:

  1. Fai clic su Crea gruppo di istanze.
  2. Specifica i valori seguenti e lascia le impostazioni predefinite per gli altri valori:

Proprietà

Valore (digita il valore o seleziona l'opzione come specificato)

Nome

europe-west1-mig

Località

Più zone

Regione

europe-west1

Modello di istanza

europe-west1-template

Scalabilità automatica > Criterio di scalabilità automatica > Fai clic sull'icona a forma di matita > Tipo di metrica

Utilizzo CPU

Utilizzo CPU target

80, fai clic su Fine.

Periodo di raffreddamento

45

Numero minimo di istanze

1

Numero massimo di istanze

5

  1. Fai clic su Crea.

5. configura il bilanciatore del carico HTTP

Configura il bilanciatore del carico HTTP per bilanciare il traffico tra i due backend (us-east1-mig in us-east1 e europe-west1-mig in europe-west1), come illustrato in questo diagramma di rete:

2e1b99d22f4f32a.png

Avvia la configurazione

  1. Nella console Cloud, fai clic su Menu di navigazione ( mainmenu.png) > Servizi di rete > Bilanciamento del carico, quindi fai clic su Crea bilanciatore del carico.
  2. In Bilanciamento del carico HTTP(S), fai clic su Avvia configurazione.

8197d8f041e8eafd.png

  1. Seleziona Da internet alle mie VM, Bilanciatore del carico HTTP(S) classico e fai clic su Continua.
  2. Imposta Nome su http-lb.

Configura il backend

I servizi di backend indirizzano il traffico in ingresso a uno o più backend collegati. Ciascun backend è composto da un gruppo di istanze e da metadati aggiuntivi relativi alla capacità di distribuzione.

  1. Fai clic su Configurazione backend.
  2. In Servizi e bucket di backend, fai clic su Crea un servizio di backend.
  3. Specifica i valori seguenti e lascia le impostazioni predefinite per gli altri valori:

Proprietà

Valore (seleziona l'opzione come specificato)

Nome

http-backend

Gruppo di istanze

us-east1-mig

Numeri di porta

80

Modalità di bilanciamento

Frequenza

Massimo RPS

50 (per istanza)

Capacità

100

  1. Fai clic su Fine.
  2. Fai clic su Aggiungi backend.
  3. Specifica i valori seguenti e lascia le impostazioni predefinite per gli altri valori:

Proprietà

Valore (seleziona l'opzione come specificato)

Gruppo di istanze

europe-west1-mig

Numeri di porta

80

Modalità di bilanciamento

Utilizzo

Utilizzo backend massimo

80

Capacità

100

  1. Fai clic su Fine.
  2. In Controllo di integrità, seleziona Crea un controllo di integrità.

199239806577ceac.png

  1. Specifica i valori seguenti e lascia le impostazioni predefinite per gli altri valori:

Proprietà

Valore (seleziona l'opzione come specificato)

Nome

http-health-check

Protocollo

TCP

Porta

80

20f7af9fce140475.png

  1. Fai clic su Salva.
  2. Seleziona la casella Abilita il logging.
  3. Imposta la frequenza di campionamento su 1:

dab4b15c13917786.png

  1. Fai clic su Crea per creare il servizio di backend.

2db64614f855f239.png

Configura il frontend

Le regole relative a host e percorso determinano come sarà indirizzato il traffico. Ad esempio, potresti decidere di indirizzare il traffico video a un backend e il traffico statico a un altro. Tuttavia, in questo lab non configurerai le regole relative a host e percorso.

  1. Fai clic su Configurazione frontend.
  2. Specifica quanto segue, lasciando le impostazioni predefinite per tutti gli altri valori:

Proprietà

Valore (digita il valore o seleziona l'opzione come specificato)

Protocollo

HTTP

Versione IP

IPv4

Indirizzo IP

Temporaneo

Porta

80

  1. Fai clic su Fine.
  2. Fai clic su Aggiungi IP e porta frontend.
  3. Specifica quanto segue, lasciando le impostazioni predefinite per tutti gli altri valori:

Proprietà

Valore (digita il valore o seleziona l'opzione come specificato)

Protocollo

HTTP

Versione IP

IPv6

Indirizzo IP

Temporaneo

Porta

80

  1. Fai clic su Fine.

Esamina e crea il bilanciatore del carico HTTP

  1. Fai clic su Esamina e finalizza.

2c88715aa5f22800.png

  1. Esamina i Servizi di backend e il Frontend.

b2fffef90be309f0.png

  1. Fai clic su Crea.
  2. Attendi che la creazione del bilanciatore del carico sia completa.
  3. Fai clic sul nome del bilanciatore del carico (http-lb).
  4. Prendi nota degli indirizzi IPv4 e IPv6 del bilanciatore del carico, che utilizzerai nella prossima attività. Ci riferiremo a questi indirizzi rispettivamente come [LB_IP_v4] e [LB_IP_v6].

6. verifica il bilanciatore del carico HTTP

Ora che hai creato il bilanciatore del carico HTTP per i tuoi backend, verifica che il traffico sia inoltrato al servizio di backend.

Accedi al bilanciatore del carico HTTP

Per testare l'accesso al bilanciatore del carico HTTP su IPv4, apri una nuova scheda del browser e vai all'indirizzo http://[LB_IP_v4]. Assicurati di sostituire [LB_IP_v4] con l'indirizzo IPv4 del bilanciatore del carico.

Se hai un indirizzo IPv6 locale, prova a utilizzare l'indirizzo IPv6 del bilanciatore del carico HTTP andando all'indirizzo http://[LB_IP_v6]. Assicurati di sostituire [LB_IP_v6] con l'indirizzo IPv6 del bilanciatore del carico.

812d1fc75d9dfb3c.png

Esegui lo stress test del bilanciatore del carico HTTP

Crea una nuova VM per simulare un carico sul bilanciatore del carico HTTP utilizzando siege. Quindi, determina se il carico viene bilanciato su entrambi i backend in condizioni di carico elevato.

  1. Nella console, vai a Menu di navigazione ( mainmenu.png) > Compute Engine > Istanze VM.
  2. Fai clic su Crea istanza.
  3. Specifica i valori seguenti e lascia le impostazioni predefinite per gli altri valori:

Proprietà

Valore (digita il valore o seleziona l'opzione come specificato)

Nome

siege-vm

Area geografica

us-west1

Zona

us-west1-c

Serie

N1

  1. Fai clic su Crea.
  2. Attendi che la creazione dell'istanza siege-vm sia completa.
  3. In siege-vm, fai clic su SSH per avviare un terminale e stabilire una connessione.
  4. Esegui questo comando per installare siege:
sudo apt-get -y install siege
  1. Per salvare l'indirizzo IPv4 del bilanciatore del carico HTTP in una variabile di ambiente, esegui il seguente comando, sostituendo [LB_IP_v4] con l'indirizzo IPv4:
export LB_IP=[LB_IP_v4]
  1. Per simulare un carico, esegui questo comando:
siege -c 250 http://$LB_IP

L'output dovrebbe avere il seguente aspetto (non copiarlo: si tratta di un esempio):

New configuration template added to /home/student/.siege
Run siege -C to view the current settings in that file
** SIEGE 4.0.4
** Preparing 250 concurrent users for battle.
The server is now under siege...
  1. Nella console Cloud, fai clic sul menu di navigazione ( mainmenu.png), poi su Servizi di rete > Bilanciamento del carico.
  2. Fai clic su http-lb.
  3. Fai clic sulla scheda Monitoraggio. Monitora il traffico tra il Nord America e i due backend per 2-3 minuti.

All'inizio, il traffico dovrebbe essere indirizzato soltanto verso us-east1-mig, ma appena le richieste al secondo aumentano, il traffico verrà indirizzato anche verso europe-west1-mig.​​

ead1e6d5c1f4cc4b.png

Questo dimostra che, per impostazione predefinita, il traffico viene inoltrato al backend più vicino, ma non appena il carico diventa eccessivo, il traffico può essere distribuito tra i due backend.

e5c6a657706c832c.png

  1. Torna al terminale SSH di siege-vm.
  2. Premi Ctrl+C per arrestare siege.

7. Crea una policy di limitazione della frequenza di Cloud Armor

In questa sezione utilizzerai Cloud Armor per impedire a siege-vm di accedere al bilanciatore del carico HTTP impostando una policy di limitazione della frequenza.

  1. In Cloud Shell(consulta "Avvia Cloud Shell" in "Configurazione e requisiti" per istruzioni su come utilizzare Cloud Shell), crea la policy di sicurezza tramite gcloud:
gcloud compute security-policies create rate-limit-siege \
    --description "policy for rate limiting"
  1. Quindi, aggiungi una regola di limitazione della frequenza:
gcloud beta compute security-policies rules create 100 \
    --security-policy=rate-limit-siege     \
    --expression="true" \
    --action=rate-based-ban                   \
    --rate-limit-threshold-count=50           \
    --rate-limit-threshold-interval-sec=120   \
    --ban-duration-sec=300           \
    --conform-action=allow           \
    --exceed-action=deny-404         \
    --enforce-on-key=IP
  1. Collega la policy di sicurezza al servizio di backend http-backend:
gcloud compute backend-services update http-backend \
    --security-policy rate-limit-siege –-global
  1. Nella console, vai a Menu di navigazione > Sicurezza della rete > Cloud Armor.
  2. Click rate-limit-siege. La tua norma dovrebbe essere simile alla seguente:

8be87aa31c2ed74e.png

Verifica il criterio di sicurezza

  1. Torna al terminale SSH di siege-vm.
  2. Esegui un comando curl sull'IP del bilanciatore del carico per verificare che tu possa ancora connetterti. Dovresti ricevere una risposta 200.
curl http://$LB_IP
  1. Nel terminale SSH di siege-vm, esegui questo comando per simulare un carico:
siege -c 250 http://$LB_IP

L'output dovrebbe avere il seguente aspetto (non copiarlo: si tratta di un esempio):

** SIEGE 4.0.4
** Preparing 250 concurrent users for battle.
The server is now under siege...
  1. Esamina i log del criterio di sicurezza per determinare se anche questo traffico viene bloccato.
  2. Nella console, vai a Menu di navigazione > Sicurezza della rete > Cloud Armor.
  3. Fai clic su rate-limit-siege.
  4. Fai clic su Log.

f8be7c01c3d7c8f5.png

  1. Fai clic su Visualizza log dei criteri.
  2. Nella pagina Logging, assicurati di cancellare tutto il testo in Anteprima della query.
  3. Seleziona la risorsa come Bilanciatore del carico HTTP Cloud > http-lb-forwarding-rule > http-lb, quindi fai clic su Aggiungi. In alternativa, di seguito è riportata la query MQL(monitoring query language) che puoi copiare e incollare nell'editor di query:
resource.type="http_load_balancer" resource.labels.forwarding_rule_name="http-lb-forwarding-rule" resource.labels.url_map_name="http-lb"
  1. Ora, fai clic su Esegui query.
  2. Espandi una voce di log in Risultati query.
  3. Espandi httpRequest. L'origine della richiesta dovrebbe essere l'indirizzo IP di siege-vm. In caso contrario, espandi un'altra voce di log.
  4. Espandi jsonPayload.
  5. Espandi enforcedSecurityPolicy.

151f575ba7b3bde9.png

Nota che configuredAction è impostato su RATE_BASED_BAN con il nome rate-limit-siege.

  1. Come controllo aggiuntivo, vai al menu di navigazione ( mainmenu.png), fai clic su Servizi di rete > Bilanciamento del carico. Fai clic su http-lb. Fai clic sulla scheda Monitoraggio.

ab9a8a66573a5ebd.png

Puoi visualizzare il traffico dell'attacco nei grafici. Noterai anche che il traffico con limitazione della frequenza non raggiunge il backend ed è bloccato dal criterio Cloud Armor.

Complimenti! Hai completato questo lab sulla limitazione di frequenza con Cloud Armor

©2020 Google LLC. Tutti i diritti riservati. Google e il logo Google sono marchi di Google LLC. Tutti gli altri nomi di società e prodotti sono marchi delle rispettive società a cui sono associati.

8. Pulizia del lab

  1. Vai a Sicurezza di rete >> Cloud Armor >> %POLICY NAME% e seleziona Elimina.

eeafa7cafa11c4c7.png

  1. Vai a Networking >> Servizi di rete >> Bilanciamento del carico. Seleziona il bilanciatore del carico che hai creato e fai clic su Elimina.

3886458f25cfbd36.png

Seleziona il servizio di backend e il controllo di integrità come risorse aggiuntive da eliminare.

a0193e91b2f4cb6f.png

  1. Vai a menu di navigazione ( mainmenu.png) > Compute Engine > Gruppi di istanze. Seleziona entrambi i gruppi di istanze gestite e fai clic su Elimina.

5027d56977997f70.png

Conferma l'eliminazione digitando "delete" nella casella di testo.

Attendi l'eliminazione dei gruppi di istanze gestite. Vengono eliminate anche le istanze nel gruppo. Puoi eliminare i modelli solo dopo aver eliminato il gruppo di istanze.

  1. Vai a Template di istanza dal riquadro a sinistra**.** Seleziona entrambi i modelli di istanza e fai clic su Elimina.

8d88abacd32c11ce.png

  1. Vai a Istanze VM nel riquadro a sinistra**.** Seleziona i puntini di sospensione accanto all'istanza siege-vm e fai clic su Elimina.

2b58ab43695836e9.png

  1. Vai a Menu di navigazione ( mainmenu.png) > Rete VPC > Firewall. Seleziona default-allow-health-check e fai clic su Elimina.

561d5e771d36d85.png

9. Complimenti!

Hai implementato correttamente la limitazione di frequenza con Cloud Armor. Hai configurato un bilanciatore del carico HTTP con backend in us-east1 ed europe-west1. Hai quindi eseguito lo stress test del bilanciatore del carico utilizzando una macchina virtuale e hai inserito l'indirizzo IP in una lista bloccata tramite la limitazione della frequenza con Cloud Armor. Hai potuto inoltre consultare i log del criterio di sicurezza per comprendere perché il traffico veniva bloccato.

Argomenti trattati

  • Come configurare i modelli di istanza e creare gruppi di istanze gestite.
  • Come configurare un bilanciatore del carico HTTP.
  • Come creare una policy di limitazione della frequenza di Cloud Armor.
  • Come verificare che la norma di limitazione della frequenza funzioni come previsto.

Passaggi successivi

  • Prova a configurare una policy di limitazione della frequenza in base a un intervallo di IP di origine. Esempio di comando:
gcloud alpha compute security-policies rules create 105 \
    --security-policy sec-policy     \
    --src-ip-ranges "1.2.3.0/24"     \
    --action throttle                \
    --rate-limit-threshold-count 100 \
    --rate-limit-threshold-interval-sec 60 \
    --conform-action allow           \
    --exceed-action deny-429         \
    --enforce-on-key IP
  • Prova a configurare una policy di limitazione della frequenza in base al codice regione. Esempio di comando:
gcloud alpha compute security-policies rules create 101 \
    --security-policy sec-policy     \
    --expression "origin.region_code == 'US'" \
    --action rate-based-ban                 \
    --rate-limit-threshold-count 10         \
    --rate-limit-threshold-interval-sec 60  \
    --ban-duration-sec 300           \
    --ban-threshold-count 1000       \
    --ban-threshold-interval-sec 600 \
    --conform-action allow           \
    --exceed-action deny-403         \
    --enforce-on-key IP