Bisher lief bei uns nginx als SSL-Offloader. Dieser war hinter dem Loadbalancer mit HAProxy, und bekam von diesem die Client-IP per IP-Spoofing mitgeteilt.
Das haben wir nun ersetzt, jetzt läuft auch auf dem SSL-Offloadern HAProxy. Die Client-IP gibts nun mit HAProxys Proxy Protokoll übergeben, womit wir uns sparen dass die Loadbalancer Gateway für die SSL-Offloader spielen müssen. Details dazu gibts in einem zukünftigem Post.
SSL-Offloading geht im HAProxy erst ab der Version 1.5, diese ist aktuell noch eine dev-Version, heißt wir müssen uns diese selbst Kompilieren. Da wir dort ein aktuelles OpenSSL haben wollen, ist der erste Schritt, wenn nicht bereits getan, das Upgrade zu Wheezy.
Dann brauchen wir noch die aktuellen Versionen von den Abhänigkeiten:
$ apt-get install openssl libssl-dev libpcre3-dev
Dann laden wir uns die aktuelle Version von HAProxy runter und Kompilieren diese:
$ cd /usr/src $ wget -4 http://haproxy.1wt.eu/download/1.5/src/devel/haproxy-1.5-dev21.tar.gz $ tar xvfz ./haproxy-1.5-dev21.tar.gz $ cd haproxy-1.5-dev21 $ make TARGET=linux26 USE_GETADDRINFO=1 USE_PCRE=1 USE_PCRE_JIT=1 USE_LIBCRYPT=1 USE_OPENSSL=1 USE_ZLIB=1 prefix=/usr/sbin $ make install
Anschließend ist der HAProxy bereit für euren SSL-Traffic. Beispielconfig:
global log 10.2.0.9 local0 err maxconn 16000 user root group root daemon stats socket /tmp/haproxy_ssl.sock level admin tune.ssl.cachesize 40000 nbproc 5 defaults log global mode http option httplog option dontlognull retries 3 option redispatch option http-server-close option forceclose contimeout 5000 clitimeout 50000 srvtimeout 50000 timeout queue 15s frontend ssl_in mode http bind 0.0.0.0:443 ssl crt /etc/haproxy/ssl.pem option forwardfor header X-Real-IP http-request set-header X-Forwarded-Proto https http-request set-header SSL_HTTPS on http-request set-header SCHEME https default_backend haproxy_local backend haproxy_local mode http server local 127.0.0.1:80
Wichtig dabei: nbproc 5 sorgt dabei für 5 Prozesse, das SSL-Offloading läuft also über mehrere Kerne. Dabei sind aber die Statistiken unbrauchbar, da diese immer die die Stats für einen Prozess von den 5 anzeigen. Aus diesem Grunde läuft bei uns lokal noch einmal ein HAProxy Prozess mit nbproc 1, der den nun Plaintext-HTTP-Traffic auf die Webserver verteilt.