Panoramica #
Il seguente articolo descrive un caso d'uso reale per un ISP o un provider di hosting, in cui il proxy inverso HTTP/S Load Balancer rappresenta il punto di accesso principale a tutti i servizi web pubblici. Questa configurazione mostra quanto sia facile configurare un set di regole WAF avanzato e potente per proteggere le applicazioni web basandosi su indirizzi IP sorgente bloccati. Ogni VirtualHost gestisce la propria blacklist in modo tale che a un IP pubblico sia vietato connettersi a un dominio web come www.company1.com, ma consentito connettersi a www.company2.com.
L'articolo sarà suddiviso in due sezioni: nella prima, la configurazione del profilo HTTPS funzionerà come un proxy inverso con un elenco di diversi servizi, mentre nella seconda sezione verrà spiegato come configurare un set di regole per il Web Application Firewall ( WAF) che gestirà una blacklist diversa per ciascun servizio HTTP/S.
Ambiente #
Il diagramma seguente descrive il RELIANOID Interni WAF. Come mostrato, il primo livello è il modulo WAF il cui obiettivo è garantire in una fase iniziale che solo le richieste sicure possano passare al modulo di bilanciamento del carico e quindi inoltrare la richiesta ai backend.
Innanzitutto, viene valutata l'intestazione HTTP Host e l'indirizzo IP del client viene confrontato con la blacklist preconfigurata. Se l' intestazione Host e l'indirizzo IP del client corrispondono, la connessione viene interrotta e al client viene inviata una risposta HTTP 403 Forbidden . Nel caso in cui l'indirizzo IP del client e l'intestazione Host richiesta non corrispondano, il traffico viene considerato non dannoso e inoltrato al modulo di bilanciamento del carico, dove la destinazione viene scelta in base all'intestazione Host della richiesta HTTP e infine inoltrata al server backend disponibile.
Qui puoi trovare uno schema degli interni del Web Application Firewall per l'esempio dato.
Configurazione del servizio virtuale HTTP #
Configura un indirizzo IP virtuale dedicato , nel nostro esempio 192.168.100.58 , accedendo a Rete > Interfacce virtuali > Crea interfaccia virtuale, come mostrato di seguito:
Ora passiamo alla configurazione del servizio di bilanciamento del carico HTTP: andate su LSLB > Farm , quindi fate clic sul pulsante Crea Farm e inserite i dettagli del servizio virtuale come mostrato di seguito:
Quindi premi Crea.
Ora clicca sulla scheda Servizi in alto e crea tanti servizi quanti sono i diversi siti web che gestisci. Clicca sul pulsante Nuovo servizio ; nel nostro caso, creeremo due servizi diversi, uno per gestire il servizio per www.mycompany1.com e un altro per www.mycompany2.com.
Una volta creato il servizio, aggiungi il filtro Virtual Host e i backend come mostrato nell'immagine sottostante.
Nel caso in cui tu abbia diversi siti web, devi solo aggiungere altri servizi per definire un servizio dedicato per gestire ogni web dallo stesso indirizzo IP.
Ora la configurazione del bilanciamento del carico è stata eseguita, consente di configurare il modulo Firewall applicazione Web IPDS.
Configurazione liste nere #
Creeremo una blacklist per ogni servizio web, in modo da poter inserire in ciascuna blacklist gli indirizzi IP da bloccare. Nel nostro esempio, creeremo due blacklist diverse, denominate blacklistmycompany1 e blacklistmycompany2 , una per ogni servizio.
Questa blacklist verrà salvata nel percorso /usr/local/relianoid/config/ipds/blacklists/lists/Blacklistmycompany1.txt.
Abbiamo incluso 2 indirizzi IP a scopo di test; si prega di aggiungere tutti gli IP necessari. È inoltre possibile utilizzare le blacklist già presenti nel modulo IPDS .
Questa seconda blacklist verrà salvata nel percorso /usr/local/relianoid/config/ipds/blacklists/lists/Blacklistmycompany2.txt.
Tenete presente che in questa blacklist abbiamo incluso l'indirizzo IP 192.168.1.191 ; questo IP verrà utilizzato solo a scopo di test, da cui effettueremo le richieste HTTP.
Configurazione del set di regole di Web Application Firewall #
Lo scopo di questa configurazione è mantenere liste nere IP diverse per sito Web, al fine di evitare di mantenere la stessa lista nera per l'intero punto di accesso della farm.
Configureremo un set di regole , ovvero un gruppo di regole, denominato HostingBlacklisting . Questo set di regole sarà composto da due semplici regole (ID regola 1000 e ID regola 1001 nel nostro esempio), ciascuna definita da una corrispondenza e un'azione: se la condizione corrisponde, viene eseguita l'azione. Nel nostro esempio, utilizzeremo la stessa azione in entrambe le regole: se la condizione corrisponde, viene eseguita un'azione di rifiuto con una risposta 403 Accesso negato.
Vai su IPDS > WAF , quindi fai clic su Crea set di regole WAF e imposta un nome descrittivo per il set di regole, nel nostro esempio HostingBlacklisting.
Configura il campo Fase predefinita su Ricevute le intestazioni della richiesta . Questo campo indica che il modulo WAF analizzerà le intestazioni della richiesta in arrivo dal client.
Quindi vai alla scheda Regole e crea la prima regola di tipo Azione, come mostrato di seguito.
Ora che la prima regola del set di regole è stata creata, creiamo le condizioni per far corrispondere l'IP del client alla blacklist per ogni intestazione Host . Andate su Condizioni e create una condizione in base alla variabile REMOTE_ADDR come mostrato di seguito.
Quindi crea un'altra condizione per la corrispondenza dell'host virtuale in base alla variabile SERVER_NAME come segue:
A questo punto, il primo sito web ospitato, www.mycompany1.com, gestisce un elenco di indirizzi IP bloccati per applicazioni web, tratto dall'elenco di indirizzi IP già configurato e denominato Blacklistmycompany1.txt.
Creiamo un'altra regola per il secondo sito web www.mycompany2.com e ripetiamo la stessa configurazione della regola precedente, ma in questo caso, devi cambiare SERVER_NAME in mycompany2.com e fare riferimento al seguente file blacklist2.txt.
Vedi l'intera configurazione del set di regole WAF composto:
Infine, aggiungi questo set di regole alla farm già creata, vai alla scheda Farm e sposta la farm Hosting , nel nostro esempio, nella sezione Farm abilitate , come mostrato di seguito.
Ora avvia il set di regole WAF per la farm, fai clic sull'azione Avvia nella sezione in alto a sinistra di questa finestra e il sistema inizierà a filtrare il traffico HTTP per l' hosting della farm.
Test del set di regole del firewall dell'applicazione Web #
L'indirizzo IP del client 192.168.1.191 richiederà i siti web http://www.mycompany1.com e http://www.mycompany2.com e, secondo la nostra configurazione, il sistema WAF consentirà la connessione al primo servizio con lo stesso nome, ma la connessione a mycompany2.com verrà negata perché questo IP è stato incluso nella blacklist denominata Blacklistmycompany2.
Dall'indirizzo IP 192.168.1.191 al VIP che richiede il sito Web www.mycompany1.com tramite il bilanciamento del carico:
root@192.168.1.191:# curl -H "Host: www.miaazienda1.com" http://192.168.100.58 -v * URL ricostruito su: http://192.168.100.58/ * Tentativo di 192.168.100.58... * TCP_NODELAY impostato * Connesso a 192.168.100.58 (192.168.100.58) porta 80 (#0) > GET / HTTP/1.1 > Host: www.miaazienda1.com > Agente utente: curl/7.52.1 > Accetta: */* > HTTP / 1.1 200 OK < Server: nginx/1.10.3 < Data: martedì 10 settembre 2019 15:36:22 GMT < Tipo di contenuto: text/html < Lunghezza contenuto: 11383 < Ultima modifica: giovedì 13 dicembre 2018 11:01: 49 GMT < Connessione: keep-alive < ETag: "5c123c1d-2c77" < Accept-Ranges: byte
Dall'indirizzo IP 192.168.1.191 al VIP che richiede il sito Web www.mycompany2.com tramite il bilanciamento del carico:
root@192.168.1.191:# curl -H "Host: www.miaazienda2.com" http://192.168.100.58 -v * URL ricostruito su: http://192.168.100.58/ * Tentativo di 192.168.100.58... * TCP_NODELAY impostato * Connesso a 192.168.100.58 (192.168.100.58) porta 80 (#0) > GET / HTTP/1.1 > Host: www.miaazienda2.com > Agente utente: curl/7.52.1 > Accetta: */* > * HTTP 1.0, presuppone la chiusura dopo il corpo HTTP/1.0 403 Richiesta vietata < Content-Type: text/html < Content-Length: 17 < Expires: now < Pragma: no-cache < Cache-control: no-cache,no-store < * Curl_http_done: chiamato prematuro == 0 * Chiusura connessione 0 risposto proibito p
Una volta generata la risposta di accesso negato , il modulo WAF notifica il rifiuto nel file Syslog del bilanciatore di carico.
root@zva6000:# tail -f /var/log/syslog 10 set 15:38:44 zva6000 pound: Hosting, ModSecurity: Avviso. Corrispondenza "Operatore `StrMatch' con parametro `mycompany2.com' rispetto alla variabile `SERVER_NAME' (Valore: `www.mycompany2.com' ) [file "/usr/local/relianoid/config/ipds/waf/sets/HostingBlacklisting.conf"] [riga "17"] [id "1001"] [rev ""] [msg "Corrispondenza personalizzata 2"] [dati ""] [gravità "0"] [ver ""] [maturità "0"] [accuratezza "0"] [nome host "192.168.100.58"] [uri "/"] [unique_id "156812992458.770641"] [ref "v0,13v21,18"] 10 set 15:38:44 zva6000 pound: Hosting, [WAF,servizio mycompany2, backend 192.168.100.22:80,] (7f6cfac3c700) [client 192.168.1.191] ModSecurity: accesso negato con codice 403 (fase 1). Corrispondenza "Operatore `StrMatch' con parametro `mycompany2.com' rispetto alla variabile `SERVER_NAME' (Valore: `www.mycompany2.com' ) [file "/usr/local/relianoid/config/ipds/waf/sets/HostingBlacklisting.conf"] [riga "17"] [id "1001"] [rev ""] [msg "Corrispondenza personalizzata 2"] [dati ""] [gravità "0"] [ver ""] [maturità "0"] [accuratezza "0"] [hostname "192.168.100.58"] [uri "/"] [unique_id "156812992458.770641"] [ref "v0,13v21,18"] 10 set 15:38:44 zva6ktpl1 pound: Hosting, servizio mycompany2, backend 192.168.100.25:80, (7f6cfac3c700) WAF ha negato una richiesta da 192.168.1.191
Ora puoi creare i tuoi set di regole firewall personalizzati per proteggere le tue applicazioni web usando le tecniche di ispezione dei pacchetti deep HTTP / S.












