HAProxy para terminar SSL también envía SSL al servidor de fondo

14

Me gustaría terminar SSL en HAProxy, hacer alguna manipulación en el encabezado, reescribir URL y volver a cifrar el tráfico y enviarlo a los servidores de back-end como SSL.

Parece que no puedo encontrar una manera de hacer esto. Puedo hacer la terminación SSL normal y enviar solicitudes HTTP simples al backend. Pero necesito enviar SSL al backend.

Me gustaría tener las siguientes características:

  • Extraiga los encabezados x-forwards-for, para obtener la IP real del cliente detrás del proxy.
  • Implemente la adherencia de la sesión utilizando cookies.
  • Haz una reescritura de URL.
  • Envíe tráfico SSL al backend utilizando la adherencia de sesión basada en cookies.

A menos que termine SSL en el extremo de haproxy, no puedo realizar la reescritura de URL.

Cualquier ayuda de la buena gente aquí sería muy apreciada.

oazabir
fuente
1
¿Puedes publicar tu configuración actual y decirnos qué no funciona?
GregL

Respuestas:

30

No hay nada especial que hacer en haproxy.cfg. Simplemente configure cualquier reescritura de URL y manipulaciones de encabezado que desee dentro de su interfaz HAProxy y luego redirija el tráfico a su backend SSL. Aquí hay un ejemplo rápido:

frontend app1_ssl
    bind *:443 ssl crt /etc/haproxy/certs.d/example.com.crt crt /etc/haproxy/certs.d/ no-sslv3

    option http-server-close
    option forwardfor
    reqadd X-Forwarded-Proto:\ https
    reqadd X-Forwarded-Port:\ 443

    # set HTTP Strict Transport Security (HTST) header
    rspadd  Strict-Transport-Security:\ max-age=15768000

    # some ACLs and URL rewrites...

    default_backend             backend_app1_ssl


backend backend_app1_ssl
    server mybackendserver 127.0.0.1:4433 ssl verify none
Sin cámara
fuente
1
¡Increíble! Déjame probar eso. No pude encontrar esa cosa de "servidor ... ssl" en ningún lado.
oazabir el
Muchas gracias por su ayuda. Pude hacerlo funcionar. Sin embargo, no pude hacer que SSL funcionara. ¿Podrías ayudar por favor? La pregunta está aquí: serverfault.com/questions/738397/…
oazabir el
Genial, me alegro de haber podido ayudar. No olvide aceptar mi respuesta para que otros puedan ver de inmediato que fue útil ;-)
Tubeless
¿El cifrado realmente funciona al dar SSL no verificar ninguno? De la documentación de haproxy, "Si se establece en 'none', el certificado del servidor no se verifica. En el otro caso, el certificado provisto por el servidor se verifica usando CAs de 'ca-file'". ¿Alguien puede aclarar esto?
mjm
Con el ssl verify nonetráfico entre HAProxy y el servidor de fondo todavía está encriptado, pero no se verifica la validez del certificado SSL de fondo.
Tubeless