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à:
- Terminazione Secure Sockets Layer (SSL/TLS)
- Scalabilità automatica
- Ridondanza della zona
- Indirizzo VIP statico
- Web application firewall
- Controller di ingresso per il servizio Azure Kubernetes
- Routing basato su URL
- Hosting di più siti
- Reindirizzamento
- Affinità di sessione
- Traffico Websocket e HTTP/2
- Esaurimento delle connessioni
- Pagine di errore personalizzate
- Riscrivere l’URL e le intestazioni HTTP
- Ridimensionamento
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
Creazione di un 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.
1 2 3 4 5 6 7 8 9 |
Set-AzVMExtension ` -ResourceGroupName RG01 ` -ExtensionName IIS ` -VMName WebServer01 ` -Publisher Microsoft.Compute ` -ExtensionType CustomScriptExtension ` -TypeHandlerVersion 1.4 ` -SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}' ` -Location WestEurope |
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à scritto, 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 (che ho creato in precedenza).
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
Configurare correttamente Azure Application Gateway e Azure Web Application Firewall è fondamentale per garantire la sicurezza, le prestazioni e la disponibilità delle applicazioni web in ambiente Azure. Attraverso una configurazione attenta e l’implementazione delle best practice, è possibile proteggere le applicazioni da minacce comuni come attacchi DDoS, SQL injection e cross-site scripting, oltre a ottimizzare il traffico e la distribuzione del carico.
L’utilizzo combinato di Application Gateway e WAF offre un approccio completo alla gestione del traffico e alla sicurezza, consentendo alle organizzazioni di adattarsi rapidamente alle esigenze in evoluzione e di rispettare gli standard di conformità. Investire tempo nella configurazione e nell’ottimizzazione di questi strumenti non solo migliora la protezione delle risorse, ma contribuisce anche a offrire un’esperienza utente migliore e più affidabile.
Una strategia ben pianificata per la configurazione di Azure Application Gateway e WAF è essenziale per sfruttare al massimo le potenzialità del cloud Azure, assicurando che le applicazioni siano sicure, performanti e pronte a supportare le esigenze future del business.