Haproxy con terminación SSL para Varnish – Debian Stretch

Varnish no realiza las terminaciones SSL por lo que hay que usar un proxy intermedio para realizarlas. En este post mostraré una configuración para tener una terminación con Haproxy y Varnish.

Ambos utilizan el protocolo PROXY. Para que Varnish lo utilice, hay que configurar la opción -a :6083,PROXY. La ejecución del servicio Varnish puede quedar así:

ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -a :6083,PROXY -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,4096m  -l 100m,10m  -t 60 -p feature=_++esi_disable_xml_check -p connect_timeout=5 -p first_byte_timeout=10 -p between_bytes_timeout=2

En el VLC añadir estas líneas:

sub vcl_recv {  
    set req.http.x-clientip = client.ip;
    set req.http.x-serverip = server.ip;
    set req.http.x-localip  = local.ip;
    set req.http.x-remoteip = remote.ip;
    ...
}

Creamos un certificado autofirmado para la terminación:

# mkdir /etc/ssl/chop.io
# openssl genrsa -out /etc/ssl/chop.io/chop.io.key 1024
# openssl req -new -key /etc/ssl/chop.io/chop.io.key \
              -out /etc/ssl/chop.io/chop.io.csr
        
# openssl x509 -req -days 365 -in /etc/ssl/chop.io/chop.io.csr \
               -signkey /etc/ssl/chop.io/chop.io.key \
               -out /etc/ssl/chop.io/chop.io.crt
# cat /etc/ssl/chop.io/chop.io.crt /etc/ssl/chop.io/chop.io.key \
                | tee /etc/ssl/chop.io/chop.io.pem

En el archivo de configuración de Haproxy hay que añadir al final algo como esto:

frontend http-in-proxy
  bind *:80
  bind *:443 ssl crt /etc/ssl/chop.io/chop.io.pem
  redirect scheme https if !{ ssl_fc }
  default_backend servers-proxy

backend servers-proxy
  server webapp1 192.168.122.20:6083 send-proxy-v2
  server webapp2 192.168.122.20:6083 send-proxy-v2

Si ya configuramos el VCL de Varnish, con esto ya deberíamos tener hecha la terminación.

Un artículo interesante sobre este tema: Varnish 4.1 & HAProxy: get the real IP by leveraging PROXY protocol support

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *