Configurare Azure Application Gateway e Azure Web Application Firewall

Azure Application Gateway è un servizio di bilanciamento di carico che consente di gestire il traffico verso le applicazioni Web. A differenza dei normali bilanciatori di carico, che operano a livello di trasporto (OSI livello 4 – TCP e UDP) ed eseguono il routing del traffico da un indirizzo IP e una porta di origine verso un indirizzo IP e una porta di destinazione, Azure Application Gateway consente di eseguire il routing del traffico in base all’URL in ingresso e di reindirizzarlo in base al percorso dell’URL. Questo tipo di routing è detto bilanciamento di carico a livello di applicazione (OSI livello 7).

Come si può vedere dall’immagine sotto, se /images è nell’URL in ingresso, è possibile eseguire il rounting del traffico verso un set specifico di server, detto pool, configurato per le immagini. Se /video è incluso nell’URL, il routing del traffico corrispondente viene instradato a un altro pool ottimizzato per i video.

Figura 1: Azure Application Gateway è in grado di bilanciare il carico di lavoro in base al percorso richiesto nell’URL

Azure Application Gateway include le seguenti funzionalità:

Nella figura sotto sono mostrati tutti gli elementi che dovranno essere configurati in Azure Application Gateway

Figura 2: Funzionamento ed elementi da configurare in Azure Application Gateway

Per creare un Azure Application Gateway è sufficiente collegarsi al portale di Azure ed effettuare la ricerca nel Marketplace

Figura 3: Application Gateway nel portale di Azure

Il wizard di creazione vi aiuterà a configurare tutte le opzioni. Nella scheda Basics configurate i valori richiesti. Nel mio caso ho deciso di abilitare la scalabilità automatica e di creare una nuova Virtual Network. Ho creato una subnet dedicata all’Application Gateway, che deve essere almeno /27

Figura 4: Creazione della VNET e della subnet dedicata all’Application Gateway

Figura 5: Configurazioni di base di Azure Application Gateway

Nella Scheda Frontends impostate un indirizzo IP pubblico. Se è necessario createlo, come mostrato nella figura sotto:

Figura 6: Aggiunta di un indirizzo IP pubblico all’Azure Application Gateway

Nella scheda Backends è possible configurare i pool back-end che verranno utilizzati per instradare le richieste ai server back-end che riceveranno il traffico. I pool back-end possono essere costituiti da schede di rete, set di scalabilità di macchine virtuali, indirizzi IP pubblici, indirizzi IP interni, nomi di dominio completi (FQDN) e back-end multi-tenant come App Service di Azure. In questo esempio verrà creato un pool back-end vuoto, a cui verranno aggiunte successivamente le destinazioni back-end.

Figura 7: Aggiunta di un pool di backend vuoto

Nella scheda Configuration verranno connessi il front-end e il pool back-end creati tramite una regola di routing. Selezionate Aggiungi una regola di routing nella colonna Regole di routing.

Figura 8: Aggiunta di una regola di routing per il traffico in arrivo

Nella finestra Aggiungi una regola di routing date un nome alla regola e configurate un Listener. Nel mio caso ho aggiunto un listener sulla porta TCP 80. Accettate i valori predefiniti per le altre impostazioni nella scheda Listener.

Figura 9: Configurazione del Listener della regola di routing

Selezionate la scheda Backend targets per configurare il resto della regola di routing. Selezionate il pool di backend (vuoto) che avete creato prima e aggiungete una nuova impostazione HTTP (HTTP Setting), che determinerà il comportamento della regola di routing.

Figura 10: Configurazione del Backend target e creazione di una nuova impostazione http

Nella finestra Aggiungi un’impostazione HTTP visualizzata inserite un nome per l’impostazione e configurate la Porta back-end. Accettate i valori predefiniti per le altre impostazioni. Fate clic su Aggiungi per tornare alla finestra Aggiungi una regola di routing.

Figura 11: Aggiunta di una impostazione HTTP alla regola di routing

Nella finestra Aggiungi una regola di routing selezionare Aggiungi per salvare la regola di routing e tornare alla scheda Configurazione.

Figura 12: Salvataggio della regola di routing

Figura 13: Regola di routing salvata

Procedete alla revisione di tutte le configurazioni effettuate e cliccate su Create per iniziare la creazione dell’Azure Application Gateway. La creazione del gateway applicazione in Azure può richiedere diversi minuti.

Figura 14: Revisione delle configurazioni e creazione dell’Azure Application Gateway

Creazione delle macchine virtuali da aggiungere al backend pool di Azure Application Gateway

In questa guida creerò due macchine virtuali come back-end di destinazione. È possibile usare macchine virtuali esistenti o crearne di nuove.

Ho creato due nuove macchine virtuali, che configurerò come web server e le ho aggiunte alla stessa VNET alla quale ho collegato l’Azure Application Gateway.

Figura 15;: Creazione della VM da aggiungere al pool di backend dell’Azure Application gateway

Figura 16: La VM è stata aggiunte alla stessa VNET alla quale ho collegato l’Azure Application Gateway. Ho provveduto anche all’aoertura delle porte web nel Network Security Group della VM

Per installare un web server di test nella VM ho utilizzato, al termine della creazione della macchina, un semplice script eseguito dalla Azure Cloud Shell. Lo script aggiunge la funzionalità di web server alla macchina virtuale e crea una pagina di default di IIS dove viene mostrato il nome della VM.

Figura 17: Tramite Azure VM extension ho installato e configurato il web server nella VM

Ho ripetuto le stesse operazioni per creare una seconda VM e installare il web server anche in quest’ultima.

Figura 18: Creazione di una seconda VM da aggiungere al pool di backend di Azure Application Gateway

Modifica del Backed pool

Per aggiungere le due VM al Backed pool dell’Azure Application Gateway è sufficiente, dal portale di Azure, selezionare il Gateway e dal nodo Backend Pools procedere alla modifica del pool creato in precedenza.

Figura 19: Modifica del pool di backend creato in precedenza nell’Azure Application Gateway

In Target type selezionate Virtual Machine dall’elenco a discesa e aggiungete le due VM create in precedenza.

Figura 20: Tipi di target che è possibile aggiungere al pool di backend di Azure Application Gateway

Figura 21: Aggiunta delle macchine virtuali al pool di backend

Completata la configurazione del pool di backend fate clic su Salva e attendete il completamento dell’operazione.

Test di funzionamento

Per testare il funzionamento dell’Azure Application Gateway sarà sufficiente procurarsi l’indirizzo IP pubblico che è stato creato ed utilizzare il browser per verificare che verranno contattati i due web server che abbiamo configurato.

Figura 22: Recupero dell’indirizzo IP pubblico dell’Azure Application Gateway

Aggiornate più volte il browser per visualizzare le connessioni sia alla prima che alla seconda macchina virtuale che fanno parte del backend pool.

Figura 23: Connessione alla prima VM del backend pool

Figura 24 :Connessione alla seconda VM del backend pool

Creazione di regole di routing di Azure Application Gateway basate sul percorso

Come già detto, Azure Application Gateway permette di reindirizzare il traffico in base all’URL richiesto dall’utente.

Figura 25: Reindirizzamento del traffico in base al percorso richiesto nell’URL

Supponiamo ad esempio di voler instradare le richieste per la cartella IMAGES verso un pool di VM chiamato Pool1 e per la cartella VIDEOS verso un pool di VM chiamato Pool2.

Dopo aver creato i due pool e aver configurato le VM target ed aver creato un Listener, come mostrato precedentemente in questa guida, cliccate sul nodo Rules e successivamente su +Request routing rule.

Figura 26: Creazione di una nuova regola di routing basata sul reindirizzamento URL

Nella scheda Add a routing rule scegliete un nome per la regola e dal menù a tendina scegliete il Listener che avrete precedentemente creato.

Figura 27: Nome della regola di routing e scelta del Listener

Nella scheda Backend targets scegliete il pool di backend predefinito e cliccate su Add multiple targets to create a path-based rule per configurare le regole in base al percorso

Figura 28: Aggiunta dei target in base al percorso URL

Aggiungete il percorso (nel mio caso /images) e completate le configurazioni inserendo il pool di backend scelto (nel mio caso Pool1)

Figura 29: Scelta del percorso e del pool di destinazione

Ripetete la stessa operazione per ogni singolo percorso di reindirizzamento. Nel mio caso ho aggiunto /videos che punta al Pool2.

Figura 30: Configurazione di tutte le regole di reindirizzamento

Fate clic su Add per completare la configurazione.

Figura 31: Configurazione della nuova regola di routing in base al percorso URL completata

Web Application Firewall

Il Web Application Firewall (WAF) è un servizio che offre una protezione centralizzata delle applicazioni Web da exploit e vulnerabilità comuni. WAF si basa su regole dei set di regole principali OWASP (Open Web Application Security Project) 3.1, 3.0 e 2.2.9.

Le applicazioni Web sono sempre più vittime di attacchi che sfruttano le più comuni vulnerabilità note. Per citarne alcuni, tra i più comuni troviamo gli attacchi SQL injection e gli attacchi di cross-site scripting.

Un Web application firewall centralizzato semplifica notevolmente la gestione della sicurezza e offre agli amministratori delle applicazioni migliori garanzie contro le minacce o le intrusioni. Una soluzione WAF è anche in grado di reagire più velocemente a una minaccia alla sicurezza tramite l’applicazione di patch su una vulnerabilità nota in una posizione centrale, anziché proteggere ogni singola applicazione Web.

È possibile convertire facilmente i gateway applicazione esistenti in un gateway applicazione abilitato per il Web Application Firewall.

Figura 32: Abilitazione della funzionalità di Web Application Firewall in Azure Application Gateway

I vantaggi offerti dall’integrazione di un Web Application Firewall all’interno di un Azure Application gateway sono molteplici:

  • Protezione dell’applicazione Web dalle vulnerabilità e dagli attacchi del Web, senza alcuna modifica del codice di back-end.
  • Protezione contemporanea di più applicazioni Web. Un’istanza del gateway applicazione può ospitare fino a 40 siti Web protetti da Web Application Firewall.
  • Creazione di criteri di WAF personalizzati per siti diversi dietro lo stesso firewall WAF
  • Protezione delle applicazioni Web da bot dannosi con il set di regole IP Reputation
  • Monitoraggio degli attacchi contro le applicazioni Web tramite il log in tempo reale di WAF
  • Personalizzazione di regole e gruppi di regole di WAF in base ai requisiti delle applicazioni ed eliminazione di falsi positivi.
  • Associazione di un criterio di WAF per ogni sito dietro WAF per consentire la configurazione specifica per sito
  • Creazione di regole personalizzate per soddisfare le esigenze dell’applicazione
  • Protezione da attacchi SQL injection.
  • Protezione da attacchi tramite script da altri siti.
  • Protezione da altri attacchi Web comuni, come command injection, HTTP Request Smuggling, HTTP Response Splitting e Remote File Inclusion.
  • Protezione dalle violazioni del protocollo HTTP.
  • Protezione contro eventuali anomalie del protocollo HTTP, ad esempio user agent host mancante e accept header.
  • Protezione da crawler e scanner.
  • Rilevamento di errori di configurazione comuni dell’applicazione, ad esempio Apache e IIS.
  • Limiti inferiori e superiori configurabili per le dimensioni delle richieste.
  • Elenchi di esclusione che consentono di omettere determinati attributi delle richieste da una valutazione di WAF. Un esempio comune è rappresentato dai token inseriti in Active Directory che vengono usati per l’autenticazione o per i campi delle password.
  • Creazione di regole personalizzate per soddisfare le esigenze delle applicazioni.
  • Traffico con filtro basato sull’area geografica per consentire o impedire a determinati paesi/aree geografiche di accedere alle applicazioni. (anteprima)
  • Protezione delle applicazioni dai bot con il set di regole di mitigazione dei bot. (anteprima)
  • Analisi del codice JSON e XML nel corpo della richiesta

Per abilitare il Web Application Firewall in Azure Application Gateway selezionate il gateway e dal nodo Web Application Firewall canbiate il tier in WAF V2.

Abilitate il Firewall Status e configurate il Firewall Mode nella scheda Configure.

Figura 33: Abilitazione del Web Application Firewall

Nella scheda Rules potete personalizzare le regole, in modo da evitare falsi positivi e bloccare il traffico reale. Il WAF è preconfigurato con il rule set OWASP 3.0, ma è possibile facilmente cambiarne le impostazioni, come mostrato nella figura sotto. Maggior informazioni sono disponibili alla pagina Regole e gruppi di regole CRS – Azure Web Application Firewall | Microsoft Docs

Figura 34: Configurazioni del Web Application Firewall

Policy centralizzate di Web Application Firewall (WAF)

Le policy di Web Application Firewall contengono tutte le configurazioni e le impostazioni di WAF, incluse le esclusioni, le regole personalizzate, le regole gestite e così via. Questi criteri devono essere associati a un Application Gateway (globale), a un listener (per sito) o a una regola basata sul percorso (per URI) per renderle effettive.

Non esiste alcun limite al numero di criteri che è possibile creare.

Per creare un nuovo criterio potete cercare Web Application Firewall policies (WAF) nel portale di Azure.

Figura 35: Web Application Firewall policies (WAF) nel portale di Azure

Nella scheda Basic scegliete il tipo di policy centralizzata da creare. Nel nostro caso sceglieremo Regional WAF (Application Gateway).

Figura 36: Scelta del tipo di policy da creare

Completate le configurazioni richieste e date un nome alla policy (nel mio caso GlobalOWASP)

Figura 37: Configurazioni di base del criterio WAF

Una serie di regole è già preconfigurata di default. Scegliete quelle che soddisfano maggiormente le vostre necessità.

Figura 38: Scelta delle regole da utilizzare nella policy

Figura 39: Eventuali esclusioni da inserire nella policy

Oltre alle policy di default è possibile aggiungere delle regole personalizzate.

Figura 40: Aggiunta di regole personalizzate alla policy

A questo punto è possibile associare la policy ad un Application Gateway, ad un http listener oppure ad un Route Path.

Figura 41: Associazione della policy

Io ho scelto di associare la policy ad un Application Gateway. Nel menu a tendina è possibile scegliere i gateway che abbiamo la SKU di tipo WAF V2. Se scegliete un gateway già esistente è possibile sovrascrivere le sue policy esistenti, come mostrato nella figura sotto:

Figura 42: Scelta di un Application Gateway esistente

Figura 43. Application Gateway associato alla policy

Figura 44: Riepilogo delle configurazioni scelte e creazione della policy

Nel giro di un minuto la policy verrà creata e potrà essere gestita dal portale di Azure

Figura 45: Creazione dell’Application Gateway WAF policy completata

Figura 46: Application Gateway associati alla WAF policy

Se cliccate sul nodo Web Application firewall del vostro Azure Application Gateway noterete che risulterà associato alla WAF policy creata.

Figura 47: L’Azure Application Gateway risulta associato alla WAF policy creata

Creando una WAF policy centralizzata è possibile ottimizzare e proteggere più Application Gateway e più siti in maniera semplificata.

Conclusioni

Azure Application Gateway Standard v2 e Web Application Firewall v2 sono due ottimi strumenti sia per bilanciare il traffico di rete, sia per proteggere le nostre applicazioni web dagli attacchi più comuni. La possibilità di eseguire il routing del traffico in base all’URL in ingresso permette inoltre un’ottimizzazione del traffico e del carico di lavoro sui diversi backend.