Anleitung zur Serverfixierung mit HAProxy über HTTPS

1

Ich habe zuvor einen Loadbalancer für Webserver in HAProxy erstellt, aber dieser war HTTP, nicht HTTPS.

Dies ist die Konfiguration, die ich zuvor verwendet habe.

listen appname 0.0.0.0:80
    mode http
    stats enable
    stats uri /haproxy?stats
    stats realm Strictly\ Private
    stats auth admin:XXXXXXXX
    balance roundrobin
    option http-server-close
    timeout http-keep-alive 3000
    option forwardfor
    cookie SRVNAME insert
    server lamp1 10.128.24.97:80 cookie S1 check
    server lamp2 10.128.24.98:80 cookie S2 check

Ich weiß nicht, wie ich diese Konfiguration umschreiben soll, um die Anforderungen an Port 443 für die Server hinter HAProxy verfügbar zu machen. Ich habe den vorherigen kopiert und den Port auf 443 geändert. Es treten jedoch viele Fehler auf. Wie kann ich die Konfiguration so übersetzen, dass sie für eine HTTPS / SSL-Verbindung gültig ist?

listen httpsapp 0.0.0.0:443
    mode tcp
    stats enable
    stats uri /haproxy?stats
    stats realm Strictly\ Private
    stats auth admin:XXXXXXXXXXX
    balance roundrobin
    option http-server-close
    timeout http-keep-alive 3000
    option forwardfor
    cookie SRVNAME insert
    server lamp1 10.128.24.97:443 cookie S1 check
    server lamp2 10.128.24.98:443 cookie S2 check

Ich erhalte die Warnungen, wenn ich HAProxy neu starte

[WARNING] 007/090716 (2409) : config : cookie will be ignored for proxy 'httpsapp' (needs 'mode http').
[WARNING] 007/090716 (2409) : config : 'option httplog' not usable with proxy 'httpsapp' (needs 'mode http'). Falling back to 'option tcplog'.
[WARNING] 007/090716 (2409) : config : 'stats' statement ignored for proxy 'httpsapp' as it requires HTTP mode.
[WARNING] 007/090716 (2409) : config : 'option forwardfor' ignored for proxy 'httpsapp' as it requires HTTP mode.
[WARNING] 007/090716 (2409) : config : 'option http-server-close' ignored for proxy 'httpsapp' as it requires HTTP mode.
[WARNING] 007/090716 (2409) : config : proxy 'httpsapp' : ignoring cookie for server 'lamp1' as HTTP mode is disabled.
[WARNING] 007/090716 (2409) : config : proxy 'httpsapp' : ignoring cookie for server 'lamp2' as HTTP mode is disabled.
Cleanunicorn
quelle

Antworten:

4

Wenn Sie einen HTTPS-Proxy erstellen (abhängig davon, welche Version von HAProxy Sie verwenden und ob SSL-Unterstützung darin kompiliert ist), haben Sie zwei verschiedene Möglichkeiten, mit dem Datenverkehr umzugehen.

Einer ist der Weg, den Sie mit dieser Konfiguration eingeschlagen haben - Machen Sie es zu einem reinen TCP-Proxy und leiten Sie den Datenverkehr direkt an den Back-End-Server weiter, ohne Layer7-Verarbeitung durchzuführen.

mode tcp

Wenn Sie sich im TCP-Modus befinden, können Sie keine Optionen verwenden, die speziell für http-Proxys bestimmt sind. In Ihrem Fall verlieren Sie den Statistik-Endpunkt, die Cookie-Verarbeitung und das Einfügen des "X-Forwarded-For". Header usw. Die Warnungen werden nur angezeigt, um Sie darüber zu informieren, dass dieser Proxy weiterhin funktioniert, aber wahrscheinlich nicht so funktioniert, wie Sie es erwarten, da Sie Optionen verwenden, die nur für http-Proxys spezifisch sind.

Die andere Möglichkeit besteht darin, das SSL auf dem HAProxy-Server zu beenden. In diesem Szenario besteht HTTPS-Verkehr zwischen Ihrem Client und HAProxy und (normalerweise) unverschlüsselter HTTP-Verkehr zwischen HAProxy und Ihren Back-End-Servern. Wenn Sie die SSL-Kündigung in HAProxy selbst und nicht mit so etwas wie Pfund durchführen würden, müssten Sie Version 1.5 mit der in kompilierten SSL-Unterstützung ausführen. Ihre resultierende Proxy-Konfiguration könnte ungefähr so ​​aussehen.

listen appname
  bind 0.0.0.0:80
  bind 0.0.0.0:443 ssl crt /path/to/your/cert.pem ciphers TLSv1+HIGH:!SSLv2:RC4+MEDIUM:!aNULL:!eNULL:!3DES:@STRENGTH
  mode http
  stats enable
  stats uri /haproxy?stats
  stats realm Strictly\ Private
  stats auth admin:XXXXXXXX
  balance roundrobin
  option http-server-close
  timeout http-keep-alive 3000
  option forwardfor
  cookie SRVNAME insert
  server lamp1 10.128.24.97:80 cookie S1 check
  server lamp2 10.128.24.98:80 cookie S2 check

Ein paar Anmerkungen dazu. Diese Listen-Direktive fasst sowohl den HTTP- als auch den HTTPS-Proxy in denselben zusammen. Es könnte genauso gut wieder aufgeteilt werden, aber wenn es nicht erforderlich ist, halte ich die Dinge gerne ein bisschen sauberer. Außerdem können die "Verschlüsselungs" -Optionen nach Ihren Wünschen oder Anforderungen konfiguriert werden. Ich bin kein SSL-Experte, aber diese Optionen sind für mich von Vorteil. Deshalb habe ich mir vorgenommen, sie einzuschließen.

Walkeran
quelle
Ich kann dir nicht sagen, wie hilfreich das ist. Auf Ubuntu 14.04.1 LTS. Das Standard-Repo hat nur Haproxy 1.4.24. Sie müssen Haproxy auf mindestens 1.5 aktualisieren. Ich habe einen PPA ( sudo add-apt-repository ppa:vbernat/haproxy-1.5) verwendet.
Eamorr