reverse PROXY per server SMTP
per gestire le richieste dei client, migliorando sicurezza, prestazioni e scalabilità.

i client inviano le loro richieste al reverse proxy,
che le instrada ai server appropriati e poi restituisce la risposta,
agendo come un punto di accesso unico e protetto.
Vantaggi principali:
- Sicurezza
può bloccare le richieste dannose, criptare il traffico
e proteggere i server di backend da attacchi diretti - Prestazioni
distribuisce il traffico in entrata su più server, prevenendo il sovraccarico
di un singolo server e garantendo una maggiore disponibilità - Scalabilità
consente di aggiungere o rimuovere server di backend senza interruzioni
del servizio, offrendo la possibilità di gestire un traffico crescente
Reverse proxy solo HTTP (Layer 7)
Diversi strumenti sono disponibili su internet, dopo una ricerca abbiamo scartato in partenza quelli che supportano solo il protocollo HTTP (Layer 7):
NO Apache
“Oh cielo. Prenditi un momento per informarti sulle tecnologie con cui hai a che fare. La posta elettronica usa SMTP.
Apache usa HTTP. Apache non sa assolutamente nulla di SMTP. Se vuoi lavorare con i messaggi di posta elettronica, avrai bisogno di una tecnologia che parli SMTP.”
– EEAA Commented Aug 18, 2016 at 2:49
NO Caddy
“Caddy non può fare il proxy TCP, solo HTTP su TCP.
Usa un reverse proxy che può fare il proxy TCP come Traefik, Nginx o haproxy oppure usa questo plugin sperimentale”
– ElevenNotes Commented Sep 24, 2024
Poi ci siamo concentrati sui tre che sono stati consigliati nei commenti:
“Traefik, NginX o HAProxy”, installandoli e provandoli uno per uno.
Traefik è stata la prima scelta
La maggior parte dei tutorial partiva da Docker, piattaforma che volevo evitare optando per una soluzione semplice, possibilmente basata su uno dei gestori di pacchetti per Linux quali YUM, per distribuzioni basate su RPM come Fedora e CentOS, oppure APT (Advanced Package Tool), che è usato su distribuzioni basate su Debian come Ubuntu e Debian.
Dopo una lunga ricerca abbiamo trovato questo articolo recente, che descrive il tipo di installazione che stavamo cercando: Setup Traefik as a systemd Service. Un’unica nota: occorre modificare le impostazioni di SELinux da “Enforcing” a “Permissive”.
Di nuovo, dopo aver provato due corsi su Udemy, abbiamo trovato questo ottimo corso: Traefik Crash Course (Without docker) Siamo riusciti a farlo funzionare riproducendo gli esempi proposti, verso la fine del video, l’ottimo docente ha dichiarato tutta la sua contrarietà verso questo strumento: Traefik Crash Course - 53:50 Summary. Ciò ci ha fatto desistere dal proseguire ulteriori test, portandoci a provare altro.
NginX è stata la seconda scelta
In questo caso l’installazione è risultata più semplice, in breve utilizzando YUM:
yum install epel-release nginx nginx-mod-stream nginx-mod-mail
una nota: in SELinux occorre abilitare il relay:
setsebool -P httpd_can_network_relay 1
Per la formazione siamo andati sul sicuro, con lo stesso docente del corso precedente: NginX Crash Course (la prima parte termina dopo circa un’ora e venti minuti). Anche per questa applicazione il docente NON è convinto, in particolare dal fatto che faccia sia da web server che da reverse proxy: NginX Crash Course - 1:20:10 Summary. Il resoconto termina con “I’ll pick HAProxy over NginX”, così abbiamo deciso di provare anche HAProxy.
Alla fine abbiamo provato anche HAProxy
L’installazione è risultata essere la più facile in assoluto in quanto si tratta di un’applicazione molto comune,
disponibile in tutti i gestori di pacchetti per Linux, ad esempio: yum install haproxy
Anche ora ci siamo rivolti al nostro docente di fiducia: HAProxy Crash Course.
Funziona, sfortunatamente NON va bene per l’autenticazione SMTP:
“Non è possibile configurare haproxy in questo modo, perché haproxy non supporta affatto SMTP.”
– lukastribus Commented Aug 17, 2023
Un server SMTP standard come reverse proxy
A questo punto, dopo due settimane di verifiche, ci siamo resi conto che
è meglio utilizzare un server SMTP standard come reverse proxy verso altri SMTP.
Fa il suo lavoro, utilizzando solo il protocollo SMTP, autentica correttamente le connessioni,
e può passare le richieste ad altri SMTP tramite la funzione “smarhost”.
In Postfix all’interno di main.cf come
relayhost = [indirizzo_smarthost]:porta
In Sendmail all’interno di sendmail.mc come
define(`SMART_HOST',`mail.example.com')