"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

opnsense und haproxy: Probleme mit Regeln

Brom 04.11.2021 - 15:46 1688 5
Posts

Brom

Addicted
Avatar
Registered: Oct 2003
Location: Graz
Posts: 407
hi,
vielleicht hat wer eine Idee für mich und mein Problem, welches ich einfach nicht lösen kann.

Umgebung (bei Provider mit funktionierendem Vlan):
3 Rechner:
1x Server mit Opnsense + haproxy
1x Server "web"
1x Server "services"

Was will ich erreichen?
Wenn man die Webseite "example.com" aufruft, soll der Content von "web" angezeigt werden.
Wenn man die Webseite "services.example.com" aufruft, soll der Content von "services" angezeigt werden.

- Conditions und Rules sind eingerichtet (jeweils per "Host matches" definiert mit dem gesamten Hostnamen (also example.com bzw. services.example.com))
- Real Servers sind konfiguriert, genau so Backend und Public Services.

So.
Wenn ich im haproxy jetzt beide public services ("web" und "services") aktiviere, funktioniert NUR der "services..." Aufruf korrekt; "web" bringt einen 503er.
Wenn ich im haproxy jetzt NUR den web aktiviere, dann funktioniert dieser Aufruf korrekt und der Inhalt von "web" wird angezeigt.

Ich habe mich mit den Conditions gespielt (da vermute ich den Fehler) und "Hosts starts with" gespielt, aber immer das gleiche Ergebnis:
Jeder Service für sich funktioniert, aber wenn beide aktiviert sind, greift NUR der "services".

Jemand eine Idee?

berndy2001

Komasäufer
Avatar
Registered: Feb 2003
Location: Vienna
Posts: 1931
Ohne config ist´s natürlich schwierig ;)

Meine sieht auf der fritzbox so aus, vielleicht hilft dir das zur orientierung.
Code:
# default sample config
global
	tune.ssl.default-dh-param 2048
	pidfile /var/run/haproxy.pid
	log /dev/log daemon notice

defaults
	log global
	mode http
	option http-server-close

frontend http-in
        bind :8443 ssl crt /tmp/flash/haproxy/haproxy.pem
        use_backend s1_cluster if { hdr_sub(host) -i s1.yy.xxx.at }
        use_backend s2_cluster if { hdr_sub(host) -i s2.yy.xxx.at }
        use_backend s3_cluster if { hdr_sub(host) -i s3.yy.xxx.at }
        default_backend s1_cluster

backend s1_cluster
        server server1 192.168.1.15:8889 maxconn 5

backend s2_cluster
        server server2 192.168.1.70:8089 maxconn 5

backend s3_cluster
        server server3 192.168.1.1:81 maxconn 5
Bearbeitet von berndy2001 am 04.11.2021, 16:39

Brom

Addicted
Avatar
Registered: Oct 2003
Location: Graz
Posts: 407
Danke für die Hilfe!
Stimmt, mit config isses einfacher :)

Ich habe jetzt beide public services aktiviert (services u. default_website). Wie oben geschrieben, funktioniert so IMMER nur der services.example.com Aufruf.

Code:
defaults
    log     global
    option redispatch -1
    timeout client 30s
    timeout connect 30s
    timeout server 30s
    retries 3
    default-server init-addr last,libc

# autogenerated entries for ACLs


# autogenerated entries for config in backends/frontends

# autogenerated entries for stats

# Frontend: services ()
frontend services
    http-response set-header Strict-Transport-Security "max-age=15768000"
    bind 0.0.0.0:443 name 0.0.0.0:443 ssl prefer-client-ciphers ssl-min-ver TLSv1.2 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-ECDSA-AES128-SHA256 ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256 crt-list /tmp/haproxy/ssl/6145fcba6545b0.73824703.certlist 
    mode http
    option http-keep-alive
    option forwardfor
    # tuning options
    timeout client 30s

    # logging options
    # ACL: services
    acl acl_6145fc6fe73e06.35216830 hdr(host) -i services.example.com

    # ACTION: services
    use_backend services if acl_6145fc6fe73e06.35216830


# Frontend: default_website ()
frontend default_website
    bind 0.0.0.0:443 name 0.0.0.0:443 ssl  crt-list /tmp/haproxy/ssl/6162ccd93a63e8.75304049.certlist 
    mode http
    option http-keep-alive
    option forwardfor
    # tuning options
    timeout client 30s

    # logging options
    # ACL: Default-site
    acl acl_616bf3dc49f8c7.06733028 hdr(host) -I example.com

    # ACTION: default_website
    use_backend default_website if acl_616bf3dc49f8c7.06733028

# Backend: acme_challenge_backend (Added by ACME Client 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 safe
    server acme_challenge_host 127.0.0.1:43580 

# Backend: services (services)
backend services
    # 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 safe
    server services 192.168.1.10:443 ssl verify none

# Backend: default_website (default_website)
backend default_website
    # 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 safe
    server web 192.168.1.20:80 

userohnenamen

leider kein name
Avatar
Registered: Feb 2004
Location: -
Posts: 15840
du hast zwei frontends auf die selbe ip und selben port?

ein frontend und dann wie bei berndy per ACLs auf das jeweilige backend schalten

Brom

Addicted
Avatar
Registered: Oct 2003
Location: Graz
Posts: 407
Tja, und das war mein Fehler...

junge junge, was mich das wieder Zeit gekostet hat. Auf jeden Fall vielen Dank an euch beide! :)

bsox

Schwarze Socke
Avatar
Registered: Jun 2009
Location: Dschibuti
Posts: 1034
Ja, UON hat recht. Zwei Frontends am selben Port ist für deinen Anwendungsfall falsch.

Bei mir sieht das mit opnsense / haproxy gekürzt so aus:

Die 'find' ACLs sind 'Conditions'.
Die 'redirect_' ACTIONs sind 'Rules'.

Code:
# Frontend: webserver_frontend_443 ()
frontend webserver_frontend_443
    http-response set-header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
    bind <external_IP>:443 name <FQDN>:443 ssl ssl-min-ver TLSv1.2 ciphers TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:TLS13-CHACHA20-POLY1305-SHA256:EECDH+AESGCM:EE
CDH+CHACHA20 alpn h2,http/1.1 crt-list /tmp/haproxy/ssl/5bc267d6a888b6.03280918.certlist
    mode http
    option http-keep-alive
    default_backend kopano_backend
    option forwardfor
    # tuning options
    maxconn 100
    timeout client 30s

    # logging options
    # ACL: find_SNIs1_xxx_at
    acl acl_5db9582d990974.32721300 hdr(host) -i s1.xxx.at
    # ACL: find_SNIs2_xxx_at
    acl acl_5db93dc15932b5.52786756 hdr(host) -i s2.xxx.at
    # ACTION: redirect_mx
    use_backend kopano_backend if acl_5db9582d990974.32721300
    # ACTION: redirect_nc
    use_backend nc_backend if acl_5db93dc15932b5.52786756

# autogenerated entries for stats

# Backend: kopano_backend ()
backend kopano_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
    # WARNING: pass through options below this line
    option forwardfor
    http-reuse never
    server fizzi2_apache 10.10.10.22:80

# Backend: nc_backend ()
backend nc_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 safe
    server docks_nextcloud 192.168.21.211:82
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz