HAProxy w zastosowaniach - SSL

Fri 11 November 2011 by admin

Najprościej w tym miejscu napisać, że HAProxy SSLa po prostu nie wspiera. Na stronie projektu, krótka wzmianka dlaczego zaniechano wsparcia:

Having SSL in the load balancer itself means that it becomes the bottleneck

Jak sobie zatem poradzić z tematem SSL ?

Remedium na ten problem są rozwiązania, które dostarczą HAProxy odszyfrowany strumień danych. Jednym z takich narzędzi jest popularny stunnel, służący do tunelowania ruchu TCP za pomocą protokołu SSL. Kilka lat wcześniej mocno wykorzystywany jako wsparcie do aplikacji serwerowych, które natywnie nie obsługiwały szyfrowania. W celu dostosowania go do współpracy z HAProxy musimy zaaplikować patch, który ,,nauczy'' stunnel'a podawania w nagłówku HTTP pola X-Forwarded-For. Całość zaś konfiguracji przedstawia się następująco:

[foo.bar.pl]
cert = /etc/pki/stunnel/foo.crt
key = /etc/pki/stunnel/foo.key
accept = 443
connect = <HAProxy_IP>:<HAProxy_Port>
xforwardedfor = yes
TIMEOUTclose = 0

warte wspomnienia jest pole connect, w któym podajemy informację o parametrach połączenia z serwerem HAProxy. Odpowiadająca konfiguracja HAProxy w naprostszej postaci:

frontend ssl <HAProxy_IP>:<HAProxy_Port>
 reqadd HTTPS:\ on
 default_backend www

ukłonem w stronę programistów jest dodanie nagłówka HTTPS, który informuje, że serwowane requesty de facto są zaszyfrowane.  Niestety przy połączeniu z stunnel nie możemy skorzystać z opcji keepalive po stronie klienta.  Dopiero w rozwojowej linii 1.5 otrzymujemy implementacje protokołu PROXY, który umożliwia m.in.

The new PROXY protocol was implemented in order to permit stunnel to forward transport-level information to haproxy, such as the protocol, source and destinations of an incoming connection, so that haproxy can make use of that everywhere internally (acls, logs, transparent, ...) instead of stunnel's address. The main advantage over the x-forwarded-for patch is that it now supports keep-alive and is not limited to HTTP anymore. When combined with the UNIX socket, it can make haproxy and stunnel integrate seamlessly and reliably, provided that this patch is applied to stunnel.

Specyfikacja protokołu PROXY:

http://haproxy.1wt.eu/download/1.5/doc/proxy-protocol.txt

Alternatywą dla rozwiązania stunnel jest narzędzie stud, projekt ściślej związany z HAProxy choć nie tak dojrzały jak stunnel. Więcej informacji:

https://github.com/bumptech/stud

Ciekawe zestawianie stunnel vs stud pod kątem wydajności znajduję się:

http://blog.exceliance.fr/2011/09/16/benchmarking_ssl_performance/

Oba rozwiązania zarówno stunnel jak i stud posiadają mechanizmy umożliwiające łatwe skalowanie poprzez dodawanie kolejnych instancji. Czasochłonne operacje ustanawiania sesji SSL (handshaking), której wynikiem jest ustalony klucz symetryczny są przechowywane shared cache, która dodatkowo jest replikowana pomiędzy instancjami stud lub w przypadku stunnel'a pomiędzy stunnel'em a sessiond.


HAProxy - prezentacja

Sat 08 October 2011 by admin

HAProxy w zastosowaniach - monitorowanie

Wed 21 September 2011 by admin

Kolejna część cyklu z HAProxy w tytule, tym razem na tapecie temat monitorowania działania usługi. Słowo HA w nazwie nie zwalnia nas z obowiązku monitorowania aktywności naszych serwerów, jakie zatem mamy metody obserwacji działania HAProxy ?

Strona www ze statusem działania HAProxy (patrz. poprzedni wpis) wydaję się najbardziej naturalna odpowiedzią. Dostęp ...

read more

HAProxy w zastosowaniach - wstęp

Sun 18 September 2011 by admin

Słowo klucz na najbliższe wpisy to rozwiązanie HAProxy - wysoko wydajny, dostępny serwer proxy zarówno dla połączeń TCP jak i  HTTP . Cykl ten nie będzie stanowić kompletnego podręcznika opisującego HAProxy bo takowy już istnieje na stronie głównej projektu, będzie to raczej zbiór praktycznych zastosowań. Nie obejdzie się jednak bez wstępu i ...

read more