HAProxy: Rule Verständnisfrage

Started by ThomasH, May 13, 2019, 11:27:13 PM

Previous topic - Next topic
Nochmals wieder kurz [emoji14]
Du musst auch ein frontend für https anlegen.
Ich gehe mal davon aus, dass alle deine Seiten am Ende auf https laufen sollen.

Dann im http frontend eine Regel anlegen das alles was nicht den Pfad ./well-known (oder wie der acme Pfad lautet) ist auf https weiterleitet.
Dann im https frontend die Regeln erstellen, damit er anhand vom Domain Namen das passende Backend nimmt...
Dann müsste es glaub klappen...
Das wegen dem acme brauchst du später für letsencrypt

Gesendet von meinem LG-H815 mit Tapatalk


wow ^^

die sätze muss ich erstmal auf mich wirkken lassen :)

ja am ende soll alles per https bzw ssl ablaufen.

bisher ist ja im client schon ssl in nginx hinterlegt. muss das raus?

ich muss mal schauen wie ich das mit dem letsencrypt plugin hinbekomme.

man merkt das Du dich sehr gut auskennst, ich finde immer das die Howtos generell so einen Weg einmal auch mit Bilder aufzeichenen sollten :), erstelle ichd ann auch gerne wenn es läuft. Ich glaube das geht vielen so das es bildlich mit einem example am besten in den Kopf sickert :).

Quote from: wirehire on May 24, 2019, 03:39:28 PM
bisher ist ja im client schon ssl in nginx hinterlegt. muss das raus?

ich muss mal schauen wie ich das mit dem letsencrypt plugin hinbekomme.

man merkt das Du dich sehr gut auskennst, ich finde immer das die Howtos generell so einen Weg einmal auch mit Bilder aufzeichenen sollten :), erstelle ichd ann auch gerne wenn es läuft. Ich glaube das geht vielen so das es bildlich mit einem example am besten in den Kopf sickert :).

Also ssl am Server muss nicht raus... Ich persönlich "vertraue" meinem DMZ Bereich und lasse hinter dem HAProxy alles als http laufen... Dann ist die Fehlerquelle "doppeltes https" auch weg...

Das ist relativ easy mit dem letsencrypt....
Plugin konfigurieren (am besten mit der HAProxy Unterstützung da er dann das backend automatisch anlegt)
Dann im http interface eine Regel anlegen mit
"wenn der Pfad der acme Pfad ist dann auf das backend vom acme"
und Gleichzeitig eine Regel mit
"wenn der url deine gewünschten Domains und nicht acme Pfad dann auf https"

Kleiner Tipp wegen dem negieren von Sachen...
Lege eine Bedingung an mit
"ist acme Pfad" und  der mit "ist nicht acme Pfad"
Der Unterschied sollte nur der Haken "negate condition" oder wow es heißt sein...
Dann kannst dir deine Regeln zusammenbauen ;)

Falls es nicht klappt, bin nachher am Rechner, dann schreibe ich genauer mit Anleitung


PS Anleitung... Ja sowas wollte ich auch machen und habe mich bereits daran versucht... Aber damit das dann auch für alle gilt und gültig sein kann muss einiges beachtet werden...

Gesendet von meinem LG-H815 mit Tapatalk


@superwinni2

Danke für Erklärung, ich probiere es mal so umzusetzten aber noch sind schwarze wolke über dem Kopf :)

Ansonsten mal ein zwei Sätze über HAProxy lesen und über dann Änderungen machen und die config über die Konsole anschauen und verstehen was es ändert...
Dann eine Logik entwickeln was wie reagieren soll und dann umsetzen ;)

Was ich noch sagen kann: Die redirect rules greifen immer vor dem anderen Regeln...
Als diesem Grund muss die http zu https redirect Regel auch das "nicht acme Pfad" sein haben...

Gesendet von meinem LG-H815 mit Tapatalk


guter tipp mit der config, schaue ich mir auch jedes mal an.

habe jetzt das letsencrypt plugin installiert, konfiguriert und aktiviert.

hat auch alles geklappt. zertifikat hat er schon erstellt.

ich werde jetzt also unter rules eine neue anlegen:

wenn acme pfad dann..

leg er diese rules nicht sogar schon automatisch an, wenn ich haproxy bei letsencrypt aktiviere?

Theoretisch ja.. Wie gut oder schlecht das allerdings geht... Keine Ahnung mehr [emoji51]

Gesendet von meinem LG-H815 mit Tapatalk


bisher eher schlecht :))

noch greift nicht alles.

ich werde erstmal das doppel ssl ausstellen.

also das ssl im nginx habe ich ausgestellt, intern über port 80 erreichbar und getestet.

die rules stimmen irgendwie noch nicht, she im haproxy log das eine anfrage auf port 443 rein kommt auf das erstellte frontend, aber dann passiert nix :)

jetzt klappt es, die Frage ist nur ob es so richtig ist.

ich habe beim backend auf port 80 gestellt, da kein ssl mehr im nginx aktiviert ist.

dann im Frontend ssl entlastung und das zugehörige ssl zertifikat ausgewählt. nun geht es und meldet auch das richtige zertifikat.

ist das so richtig?

wenn jetzt ein weiterer Dienst dazu kommt, müsste ich nur ein weiteres Backend und frontend anlegen oder?

Das klingt ja schonmals nicht schlecht ;)


Wegen dem weiteren Dienst:
Backend anlegen, Pool anlegen und Regeln nicht vergessen ;)
Das Frontend ist ja das gleiche... Es greift dann nur eine andere Regel bei der Auswahl des Backends.

Würde es dann nicht sinn machen , bei den Regeln auf dem Host Namen zu matchen?

bisher habe ich das mit dem /* pfad.

Achsooo
Ja das ist natürlich mehr als sinnvoll ;)
Das mit dem Pfad finde ich nur relevant wegen der Acme challenge... Ansonsten will man die einzelnen Backends ja eher über den Domainnamen trennen


Hier mal noch spaßeshalber meine Config von mir zuhause:
Vielleicht liest du ja raus was du brauchst, ansonsten bin ich gerne für Fragen offen.
Habe zuhause aktuell jedoch nur eine Seite "öffentlich"... Mein WP Server ist deszeit "offline"
root@OPNsense1:~ # cat /usr/local/etc/haproxy.conf
#
# Automatically generated configuration.
# Do not edit this file manually.
#


global
    # NOTE: Could be a security issue, but required for some feature.
    uid                         80
    gid                         80
    chroot                      /var/haproxy
    daemon
    stats                       socket /var/run/haproxy.socket level admin
    nbproc                      1
    nbthread                    1
    tune.ssl.default-dh-param   1024
    spread-checks               0
    tune.chksize                16384
    tune.bufsize                16384
    tune.lua.maxmem             0
    log /var/run/log local0


defaults
    log     global
    option redispatch -1
    timeout client 30s
    timeout connect 30s
    timeout server 30s
    retries 3


# autogenerated entries for ACLs


# autogenerated entries for config in backends/frontends


# autogenerated entries for stats




# Frontend: WAN_https ()
frontend WAN_https
    http-response set-header Strict-Transport-Security "max-age=15768000"
    bind 192.168.178.4:443 name 192.168.178.4:443 ssl no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 crt-list /tmp/haproxy/ssl/5c852b4aef9e88.45675078.certlist
    bind 192.168.178.191:443 name 192.168.178.191:443 ssl no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 crt-list /tmp/haproxy/ssl/5c852b4aef9e88.45675078.certlist
    mode http
    option http-keep-alive
    option forwardfor
    # tuning options
    timeout client 1m


    # logging options
    option httplog
    # ACL: Host_ist_push_domain_xyz
    acl acl_5cdf1ec3cfc2b4.19528643 hdr(host) -i push.domain.xyz


    # ACTION: SSL Redirect ungültig
    http-request redirect location http://google.de unless acl_5cdf1ec3cfc2b4.19528643


    # ACTION: Rule_backend_gotify
    use_backend BackendPool_Gotify if acl_5cdf1ec3cfc2b4.19528643


# Frontend: WAN_http ()
frontend WAN_http
    bind 192.168.178.191:80 name 192.168.178.191:80
    bind 192.168.178.4:80 name 192.168.178.4:80
    mode http
    option http-keep-alive
    # tuning options
    timeout client 30s


    # logging options
    option httplog
    # ACL: Pfad_beginnt_mit_acme_challenge
    acl acl_5ca7b6170c5440.28623250 path_beg -i /.well-known/acme-challenge/
    # ACL: Host_ist_push_domain_xyz
    acl acl_5cdf1ec3cfc2b4.19528643 hdr(host) -i push.domain.xyz
    # ACL: Pfad_beginnt_nicht_mit_acme_challenge
    acl acl_5cdf296b57e264.72995214 path_beg -i /.well-known/acme-challenge/


    # ACTION: SSL Redirect für gültige Seiten
    http-request redirect scheme https code 301 if acl_5cdf1ec3cfc2b4.19528643 !acl_5cdf296b57e264.72995214
    # ACTION: SSL Redirect ungültig
    http-request redirect location http://google.de unless acl_5cdf1ec3cfc2b4.19528643


    # ACTION: redirect_acme_challenges
    use_backend acme_challenge_backend if acl_5ca7b6170c5440.28623250


# Backend: BackendPool_WP ()
backend BackendPool_WP
    # health checking is DISABLED
    mode http
    balance source


    # tuning options
    timeout connect 1m
    timeout server 30s
    http-reuse never
    server realWP 10.10.20.101:80


# Backend: acme_challenge_backend (Added by Let's Encrypt plugin)
backend acme_challenge_backend
    # health checking is DISABLED
    mode http
    balance source
    # stickiness
    stick-table type ip size 50k expire 30m
    stick on src
    # tuning options
    timeout connect 30s
    timeout server 30s
    http-reuse never
    server acme_challenge_host 127.0.0.1:43580


# Backend: BackendPool_Gotify ()
backend BackendPool_Gotify
    # health checking is DISABLED
    mode http
    balance source
    # stickiness
    stick-table type ip size 50k expire 30m
    stick on src
    # tuning options
    timeout connect 30s
    timeout server 30s
    http-reuse never
    server gotify 10.10.20.110:8080

also lasse ich das mit dem /* drin und erstelle dazu eine match rule?