Tag Archives: load balancing

Abilitare la funzione di Transparent Proxy in HAProxy

Nel precedente articolo abbiamo visto come installare HAProxy per mettere online un sistema in alta affidabilità. In questo nuovo articolo ci troveremo ad utilizzare una funzionalità molto utile nel mondo dei load balancer: il Transparent Proxy.

Vuoi dare un’occhiata alla mia guida sull’installazione di HAProxy su Debian? Clicca qui.

Il primo scoglio che ci troviamo ad affrontare è quello di non avere possibilità di tenere traccia dell’IP sorgente all’interno del nostro cluster, in quanto HAProxy effettua un routing delle connessioni. Avremo quindi, nei nostri server, solamente connessioni che arrivano dal bilanciatore di carico. Per ovviare a questo problema il Kernel Linux ha introdotto la capacità di rendere trasparenti le connessioni che passano attraverso le nostre Linux box. Questo rimane utile ad esempio nei cluster mail, dove c’è avremo messo delle liste DNSBL o qualunque altro controllo sull’hostname o IP sorgente.

Eccoti una panoramica sulle tecnologie utilizzate per l‘IP Reputation sui mail server

Come funziona TPROXY

La funzione TPROXY o transparent proxy è possibile grazie alla funzione DIVERT di IPTables. Tale funzionalità, ormai già presente out-of-the-box in praticamente tutte le distribuzioni Linux con Kernel recenti effettua un mark di tutti i pacchetti in arrivo e ne riscrive l’ip sorgente prima di mandarlo alle catene di INPUT.

Il Kernel, grazie al mark precedentemente impostato, avrà la possibilità di tener traccia delle connessioni in arrivo e ne sceglierà il routing in maniera appropriata, tenendo conto delle regole da noi impostate.

Configurazione di TPROXY con HAProxy

Per poter utilizzare questa funzionalità con HAProxy, dobbiamo prima abilitare la funzione DIVERT sul nostro bilanciatore di carico. Per fare questo inseriamo le seguenti regole:

iptables -t mangle -N DIVERT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 111
iptables -t mangle -A DIVERT -j ACCEPT

Queste regole attivano DIVERT e dicono a IPTables di markare i pacchetti in arrivo che sono destinate a dei socket locali. Una volta apposto il mark, il pacchetto viene accettato.

A questo punto dobbiamo creare una tabella di routing avanzata per poter consegnare i pacchetti marcati localmente:

ip rule add fwmark 111 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100

A questo punto la trasparenza è stata attivata, dobbiamo infine configurare HAProxy per poterlo usare. Sarà sufficiente aggiungere nella sezione global o frontend la seguente direttiva:

source 0.0.0.0 usesrc clientip

Riavviamo HAProxy e controlliamo, nel backend di destinazione, che l’ip remoto venga correttamente loggato.

Conclusioni

Con questi semplici passi abbiamo configurato una funzione molto importante per il nostro bilanciatore di carico, che ci darà la possibilità di estendere funzionalità ai nostri backend.