Non vi nego che questo articolo in origine doveva essere scritto per un altro prodotto. Come già evidenziato in un vecchio articolo, una volta ottenuti i container, se li vogliamo esporre verso Internet è necessario appunto un Reverse Proxy che faccia da instradamento verso ciò che si vuole esporre, e solo con lo stretto necessario.
Per il mondo Docker quello più famoso è senza dubbio “Traefik“, scritto in linguaggio GO. Tuttavia, mi sono trovato con parecchi problemi oltretutto direi anche “stupidi”, dato che uno dei pilastri di Docker è la capacità di riprodurre il medesimo ambiente. Ebbene proprio su questo mi sono trovato in difficoltà, ma non solo. Il sistema non dava fuori nemmeno errori, rendendo ancora più surreale la cosa. Non ultimo il fatto che un Proxy deve gestire anche i certificati, e nel mio caso sono un po’ più complessi del normale. Anche qui con “Traefik” si è rivelato del tutto macchiavellico.
Nel cercare su come risolvere mi sono imbattuto in una serie di thread su alcuni forum, dove per lo meno mi sono sentito un po’ meno scemo, visto che in parecchi lamentavano le mie stesse difficoltà. Seguendo le discussioni più di qualcuno proponeva prodotti alternativi. tra i quali spiccava il nome di Zoraxy.
Curioso, perché prima di infilarmi nel mondo delirante di Traefik, avevo fatto una carrellata di prodotti simili valutandone in base alle feature proposte. E questo proprio non era uscito da nessuna parte.
Zoraxy è creato da un informatico Taiwanese ed è scritto anch’esso in linguaggio GO. In questo caso però il progetto è piuttosto ambizioso, perché c’è ben di più di un Reverse Proxy ed è anche ben congegnato, utilizzando un portale dedicato dove si può operare su tutti questi aspetti.
Brevemente, quello che otterremo è appunto un :
- Reverse Proxy altamente configurabile;
- La possibilità di creare uno Stream proxy (per portale audio o video streaming);
- Redirection Rules piuttosto meticoloso di risorse web;
- Acces Control, cioè una black e white list, anche su base geografica dei singoli oggetti proxy;
- Richiesta e gestione (rinnovo automatico) dei certificati SSL, anche attraverso DNS Challenge;
- SSO / Auth per gli oggetti proxy, da anteporsi come autenticazione sui prodotti che non lo dispongono;
- Web server statico, se si volesse ottenere solo il certificato senza avere necessariamente un oggetto proxy;
- Uptime monitor dei container, o meglio dei protocolli (tipicamente HTTP);
- Una serie di tools e utilities, come whois, ping, traceroute, eccetera;
- Analisi statistica aggregata sulle risorse utilizzate e contattate, una sorta di Analytics in miniatura.
- Una struttura di plugin, sebbene in fase sperimentale per cui non ancora utilizzabile.
Che dire, un prodotto che copre letteralmente il 100% delle casisistiche di un Reverse Proxy ed anche di più. Tra l’altro si possono modificare o manipolare gli Headers, gestire alcuni aspetti di sicurezza informatica.
L’installazione può avvenire in diversi modi, ovviamente quello più moderno e consigliato è attraverso la creazione di un container Docker. Questo, come qualunque altro che operi come Reverse Proxy, necessità di occupare la porta 80 (http) e 443 (https) dell’Host dato che da queste sarà in grado di reinstradare le richieste verso il contenitore corretto. A queste porte si aggiunge quella del portale, che di default è la 8000. Se quest’ultima è già occupata, basterà modificare la mappatura sul “docker-compose.yml” alla voce ports, ricordando che la prima (a sinistra) è quella dell’Host fisico, mentre quella a destra è del container.
Per quanto riguarda il compose o l’avvio via RUN di docker, lascio la pagina wiki ufficiale che è descritta in modo chiaro e inequivocabile. Al primo avvio sulla porta 8000 avrete modo di creare il primo utente, che sarà quello Amminstratore. L’accesso vi porterà sempre alla pagina iniziale dello status, dove è presente un badge che dopo la configurazione attiva dovrà essere sempre verde. Sotto di essa un newtork monitor in realtime dell’occupazione I/O sullo stack di rete.

Sulla parte sinistra il numeroso Menu di sistema. Per partire si può configurare un Reverse Proxy in due punti, quello, diciamo guidato, su “Quick Start” oppure quello più dettagliato su “Create Proxy Rules“. Nel quick start ci sono solo tre opzioni, creare un sito statico, con il Web Server interno, creare un proxy da un sub-domain per ridirezionarlo su un Web Server anche esterno; infine ottenere solo il certificato per un dominio. Se siete in difficoltà consiglio quest’ultimo, dato che vi guiderà passo-passo.
Nel mio caso invece sono andato direttamente in “Create Proxy Rules” perché se volete fare il reverse verso un Container Docker è qui che dovete operare. L’interfaccia è piuttosto chiara, tra l’altro nel riquadro blu c’è indicato in modo chiaro cosa fare. Da notare il tasto “Pick from Docker Container” che andrà a “pescare” l’eventuale oggetto su cui girare il traffico per il dominio, o sotto-dominio, che stiamo inizializzando. L’unica accortezza è la porta, Zoraxy prende per default quella esposta verso l’Host, mentre in realtà dovrete indicare quella interna del contenitore, specie nel caso (piuttosto facile) che questa sia differente rispetto a quella esterna.

Una volta completato, gli oggetti che ottengono la reverse, li potrete trovare sotto la voce “HTTP Proxy“. Qui sarà possibile tentare di chiedere il certificato, ma anche fare diverse modifiche, ad esempio sugli Headers, o anteporre un autenticatore multi-fattore.

Sotto il menu “TLS / SSL Certificates” potrete gestire, anche qui in modo piuttosto chiaro, i certificati. Forse la richiesta iniziale può essere un po’ disarmante, poiché il menu “Open ACME Tool” posto in basso, richiede un attimo di apprendimento per essere compreso. Se avete già dei certificati, potete re-importarli, ovviamente su Let’s Encrypt non ha molto senso, ma se avete un certificato commerciale il senso della cosa cambia.
Nella sezione “SSO / AUTH” si possono gestire i protocolli di autenticazione, anche a multi fattore. Non entro più in dettaglio della cosa, perché sarà necessario un articolo futuro su questa parte.
Nel menu “Redirection” avremo modo di gestire, anche per tramite di Espressioni Regolari, la redirezione delle pagine web. Ad esempio abbiamo spostato un dominio o le cartelle di un sito, con questo strumento potremo dirottare le vecchie richieste verso il nuovo percorso, dando indicazione anche del fatto che questa è una soluzione permanente o temporanea.
Su “Virtual Directory” avremo modo di gestire una cartella di un dominio, ad esempio miodomain.com/prova, dove in questo caso “/prova” potrebbe essere un contenitore diverso da quello dichiarato per il dominio.
Sotto il menu “Access Control” avremo accesso alla creazione, anche multi profilo, di vere e proprie access list. Una specie di Firewall semplificato, dove ad esempio potremo escludere una o più nazioni dall’accesso del nostro sito. Un esempio tipico potrebbe essere un Container Docker che fa qualcosa di specifico, quindi non è il sito ufficiale dell’azienda, ma uno strumento dedicato. Potrebbe essere intelligente chiudere solo ad uno o più stati l’accesso in modo da restringere in modo consistente la superficie d’attacco informatico. Come anticipato possiamo creare differenti Access Rules, da utilizzare anche in modo mirato su profilo del singolo Reverse Proxy. Una funzione decisamente intelligente ed utile.

Le Analytics sotto la voce “Statistical Analysis” sono una versione semplificata di Analisi dati, ma allo stesso tempo non meno dispendiosa e dispersiva di strumenti ben più blasonati e per certi ambiti anche inutili. Interessante che sia possibile scegliere anche la sezione temporale, oltre a quella di default che è relativa al giorno corrente.

Quindi è tutto perfetto? Non del tutto, occasionalmente mi è capito che l’interfaccia si impallasse, nulla di tragico. Ben più seccante il fatto che i log siano infilati dentro “Utilities” e poi “System“, ma che nei fatti siano inutilizzabili. Ecco vista la pletora di strumenti anche un po’ borderline, un log viewer decente è una stonatura piuttosto evidente.
Lato prestazioni invece l’uso del linguaggio GO si vede, se avete l’occhio allenato potete notare la differenza di esecuzione delle pagine, vuoi per la cache integrata, vuoi perché GO è effettivamente veloce.
In conclusione, da una mezza delusione, ma ci ritornerò in futuro, ho scoperto praticamente per caso questo prodotto che stranamente è fuori dalle liste dei nomi più gettonati. Per altro menziono solo brevemente la parte plugin, che di fatto è sperimentale e quindi non utilizzabile, ma che mostra una certa attività da parte dell’autore e della community. Per cui in futuro auspicabilmente ci potrebbero essere delle evoluzioni interessanti, da tenere d’occhio sicuramente.