1
German - Deutsch / Re: HAProxy - Firewall Regeln
« on: May 18, 2021, 03:55:19 pm »Wenn du ein Zertifikat hast, das zu dem hinterlegten Serverzertifikat passt, dann muss es auch gültig sein, damit du zugreifen darfst.Das ist mir aufgefallen, der Browser fragt dann nicht nur beim gewünschten (zu kontrollierndem) Backend sondern auch bei allen im Frontend hinterlegten Backends nach dem Zertifikat, sobald ein Cert vorhanden ist welches von der zu überprüfenden Authority ausgestellt wurde.
Wenn du kein Zertifikat hast, dann darfst du sofort zugreifen!
Ich habe auch versucht mit einem anderen Cert Zugriff zu bekommen, aber wenn ein Cert von einer anderen Authority ausgestellt wurde, fragt er erst garnicht und es ist auch nur Zugriff auf die "offenen" Backends möglich - so soll's sein.
Hier meine Konfig, die Überprüfung erfolgt mit "ssl_c_used 1".
Code: [Select]
#
# Automatically generated configuration.
# Do not edit this file manually.
#
global
uid 80
gid 80
chroot /var/haproxy
daemon
stats socket /var/run/haproxy.socket group proxy mode 775 level admin
nbproc 1
nbthread 1
tune.ssl.default-dh-param 2048
spread-checks 2
tune.chksize 16384
tune.bufsize 16384
tune.lua.maxmem 0
log /var/run/log local0 info
ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets prefer-client-ciphers ssl-min-ver TLSv1.2
ssl-default-bind-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
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
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: port80 ()
frontend port80
bind 0.0.0.0:80 name 0.0.0.0:80
mode http
option http-keep-alive
# tuning options
timeout client 30s
# logging options
# ACL: find_acme_challenge
acl acl_609eaac8987754.71326232 path_beg -i /.well-known/acme-challenge/
# ACL: NO_find_acme_challenge
acl acl_609eb1733b0be2.33488218 path_beg -i /.well-known/acme-challenge/
# ACL: SSL_Established
acl acl_609eb14e0d1744.30300512 req.ssl_ver gt 0
# ACTION: redirect_acme_challenges
use_backend acme_challenge_backend if acl_609eaac8987754.71326232
# ACTION: HTTP_Redirect
http-request redirect scheme https code 301 if !acl_609eb1733b0be2.33488218 !acl_609eb14e0d1744.30300512
# Frontend: port443 ()
frontend port443
http-response set-header Strict-Transport-Security "max-age=15768000"
bind 0.0.0.0:443 name 0.0.0.0:443 ssl no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets 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 ca-file /tmp/haproxy/ssl/609eb4cbd74584.90464975.calist verify optional crt-list /tmp/haproxy/ssl/609eb4cbd74584.90464975.certlist
mode http
option http-keep-alive
# tuning options
timeout client 30s
# logging options
# ACL: find_acme_challenge
acl acl_609eaac8987754.71326232 path_beg -i /.well-known/acme-challenge/
# ACL: test1_meinedomain_com
acl acl_60a29594e32966.45233940 hdr(host) -i test1.meinedomain.com
# ACL: test2_meinedomain_com
acl acl_60a295b57d0052.54001161 hdr(host) -i test2.meinedomain.com
# ACL: client-cert_used
acl acl_60a27e722581b6.94430866 ssl_c_used 1
# ACL: cloud_meinedomain_com
acl acl_60a2ab299f28b3.83471719 hdr(host) -i cloud.meinedomain.com
# ACL: meinedomain_com
acl acl_609eb07d666f46.20425389 hdr(host) -i meinedomain.com
# ACL: test3_meinedomain_com
acl acl_60a2ab42c93ef1.65464706 hdr(host) -i test3.meinedomain.com
# ACTION: redirect_acme_challenges
use_backend acme_challenge_backend if acl_609eaac8987754.71326232
# ACTION: test1_meinedomain_com
use_backend test1.meinedomain.com if acl_60a29594e32966.45233940
# ACTION: test2_meinedomain_com
use_backend test2.meinedomain.com if acl_60a295b57d0052.54001161
# ACTION: cloud_meinedomain_com
use_backend cloud.meinedomain.com if acl_60a27e722581b6.94430866 acl_60a2ab299f28b3.83471719
# ACTION: meinedomain_com
use_backend meinedomain.com if acl_609eb07d666f46.20425389
# ACTION: test3_meinedomain_com
use_backend test3.meinedomain.com if acl_60a2ab42c93ef1.65464706
# 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 safe
server acme_challenge_host 127.0.0.1:43580
# Backend: meinedomain.com ()
backend meinedomain.com
# 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 meinedomain.com 192.168.40.101:80
# Backend: test1.meinedomain.com ()
backend test1.meinedomain.com
# 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 test1.meinedomain.com 192.168.40.105:80
# Backend: test2.meinedomain.com ()
backend test2.meinedomain.com
# 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 test2.meinedomain.com 192.168.40.104:80
# Backend: cloud.meinedomain.com ()
backend cloud.meinedomain.com
# 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 cloud.meinedomain.com 192.168.40.103:80
# Backend: test3.meinedomain.com ()
backend test3.meinedomain.com
# 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 test3.meinedomain.com 192.168.40.102:80
Ich verstehe leider nicht ganz, wie das sonst gehen sollte, ohne Condition.
Mit 2 Frontends auf port 443 habe ich es leider nicht geschafft..
Ich hätte es gerne folgendermaßen:
Zugriff auf cloud.meinedomain.com soll nur mittels von mir erstelltem Zertifikat möglich sein, für alle anderen Backends soll der Zugriff für jedermann möglich sein.