Hello

We have been trying to test a shared IP/port ECC/RSA SSL
implementation that is available in HAProxy, and largely followed this
basic setup guide
http://blog.haproxy.com/2015/07/15/serving-ecc-and-rsa-certificates-on-same-ip-with-haproxy/
and adapted it to our setup.

It works fine using a localhost as a listener (see commented lines in
the config below), however with a unix@ socket setup I can not seem to
get the setup to work.

Log messages while accessing the site using sockets are:

Jan  5 15:35:16 localhost haproxy[12713]: Z.Z.Z.Z:61393
[05/Jan/2017:15:35:16.502] example-ecc-rsa-relay
example-ecc-relay/example-ecc-rsa-in 2/-1/1 0 SC 0/0/0/0/5 0/0
Jan  5 15:35:16 localhost haproxy[12713]: Z.Z.Z.Z:61394
[05/Jan/2017:15:35:16.512] example-ecc-rsa-relay
example-ecc-relay/example-ecc-rsa-in 1/-1/0 0 SC 0/0/0/0/5 0/0
Jan  5 15:35:16 localhost haproxy[12713]: Z.Z.Z.Z:61395
[05/Jan/2017:15:35:16.732] example-ecc-rsa-relay
example-ecc-relay/example-ecc-rsa-in 1/-1/0 0 SC 0/0/0/0/5 0/0
Jan  5 15:35:16 localhost haproxy[12713]: Z.Z.Z.Z:61396
[05/Jan/2017:15:35:16.760] example-ecc-rsa-relay
example-ecc-relay/example-ecc-rsa-in 1/-1/0 0 SC 0/0/0/0/5 0/0
Jan  5 15:35:21 localhost haproxy[12713]: Z.Z.Z.Z:5909
[05/Jan/2017:15:35:21.779] example-ecc-rsa-relay
example-ecc-relay/example-ecc-rsa-in 1/-1/0 0 SC 0/0/0/0/5 0/0
Jan  5 15:35:21 localhost haproxy[12713]: Z.Z.Z.Z:61400
[05/Jan/2017:15:35:21.786] example-ecc-rsa-relay
example-ecc-relay/example-ecc-rsa-in 2/-1/1 0 SC 0/0/0/0/5 0/0

After doing some research before posting to this list, suggestions
here pointed to either a chroot or permissions issue with the socket.
I have tested removing (commenting out) chroot as well as setting
permissions on the socket to 777 as well as ensuring that the socket
is set to haproxy uid/gid via bind-unix global statement, and neither
seem to make any difference.

Does anyone have any additional suggestions to try or sees an obvious
thing I may have missed?

Thanks in advance!

HAProxy compile string:

haproxy -vv
HA-Proxy version 1.7.1 2016/12/13
Copyright 2000-2016 Willy Tarreau <[email protected]>

Build options :
  TARGET  = linux2628
  CPU     = generic
  CC      = gcc
  CFLAGS  = -O2 -g -fno-strict-aliasing -Wdeclaration-after-statement
  OPTIONS = USE_ZLIB=1 USE_OPENSSL=1 USE_PCRE=1

Default settings :
  maxconn = 2000, bufsize = 16384, maxrewrite = 1024, maxpollevents = 200

Encrypted password support via crypt(3): yes
Built with zlib version : 1.2.3
Running on zlib version : 1.2.3
Compression algorithms supported : identity("identity"),
deflate("deflate"), raw-deflate("deflate"), gzip("gzip")
Built with OpenSSL version : OpenSSL 1.1.0c  10 Nov 2016
Running on OpenSSL version : OpenSSL 1.1.0c  10 Nov 2016
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports prefer-server-ciphers : yes
Built with PCRE version : 7.8 2008-09-05
Running on PCRE version : 7.8 2008-09-05
PCRE library supports JIT : no (USE_PCRE_JIT not set)
Built without Lua support
Built with transparent proxy support using: IP_TRANSPARENT
IPV6_TRANSPARENT IP_FREEBIND

Available polling systems :
      epoll : pref=300,  test result OK
       poll : pref=200,  test result OK
     select : pref=150,  test result OK
Total: 3 (3 usable), will use epoll.

Available filters :
        [SPOE] spoe
        [TRACE] trace
        [COMP] compression


Relevant HAProxy config:

global
    log     127.0.0.1 local2 notice
    pidfile /var/run/haproxy.pid
    maxconn 400000
    user    haproxy
    group   haproxy
    #chroot  /var/lib/haproxy
    unix-bind prefix /var/run/ mode 600 user haproxy group haproxy
    #unix-bind prefix /var/run/ mode 777 user haproxy group haproxy
    daemon
    nbproc  23

    tune.maxrewrite 1024
    tune.bufsize    16384

    cpu-map 1  1
    cpu-map 2  2
    cpu-map 3  3
    cpu-map 4  4
    cpu-map 5  5
    cpu-map 6  6
    cpu-map 7  7
    cpu-map 8  8
    cpu-map 9  9
    cpu-map 10 10
    cpu-map 11 11
    cpu-map 12 12
    cpu-map 13 13
    cpu-map 14 14
    cpu-map 15 15
    cpu-map 16 16
    cpu-map 17 17
    cpu-map 18 18
    cpu-map 19 19
    cpu-map 20 20
    cpu-map 21 21
    cpu-map 22 22
    cpu-map 23 23

    stats socket /var/run/haproxy01.stat process 1
    stats socket /var/run/haproxy02.stat process 2
    stats socket /var/run/haproxy03.stat process 3
    stats socket /var/run/haproxy04.stat process 4
    stats socket /var/run/haproxy05.stat process 5
    stats socket /var/run/haproxy06.stat process 6
    stats socket /var/run/haproxy07.stat process 7
    stats socket /var/run/haproxy08.stat process 8
    stats socket /var/run/haproxy09.stat process 9
    stats socket /var/run/haproxy10.stat process 10
    stats socket /var/run/haproxy11.stat process 11
    stats socket /var/run/haproxy12.stat process 12
    stats socket /var/run/haproxy13.stat process 13
    stats socket /var/run/haproxy14.stat process 14
    stats socket /var/run/haproxy15.stat process 15
    stats socket /var/run/haproxy16.stat process 16
    stats socket /var/run/haproxy17.stat process 17
    stats socket /var/run/haproxy18.stat process 18
    stats socket /var/run/haproxy19.stat process 19
    stats socket /var/run/haproxy20.stat process 20
    stats socket /var/run/haproxy21.stat process 21
    stats socket /var/run/haproxy22.stat process 22
    stats socket /var/run/haproxy23.stat process 23

    ca-base  /etc/ssl/certs
    crt-base /etc/ssl/certs

    tune.ssl.cachesize 256000
    tune.ssl.lifetime  900

    ssl-default-bind-ciphers
ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
    ssl-default-bind-options no-sslv3 no-tls-tickets

    tune.ssl.default-dh-param 2048


defaults
    log     global
    option  redispatch
    retries 5
    timeout http-request 30s
    timeout queue 60s
    timeout connect 30s
    timeout client 60s
    timeout server 60s
    timeout http-keep-alive 30s
    timeout check 30s
    timeout tarpit 15s
    maxconn 400000
    errorfile 408 /dev/null


frontend example-ecc-rsa-relay
    bind-process 12-13
    bind X.X.X.X:443
    mode tcp
    option tcplog
    option dontlog-normal
    tcp-request inspect-delay 5s
    log     127.0.0.1 local2 debug

    acl ip_blacklist src -f /etc/haproxy/ip_blacklist.lst
    tcp-request connection reject if ip_blacklist

    tcp-request content accept if { req.ssl_ec_ext 0 }
    use_backend example-ecc-relay if { req.ssl_ec_ext 1 }
    default_backend example-rsa-relay

backend example-ecc-relay
    bind-process 12-13
    mode tcp
    option tcplog
    log     127.0.0.1 local2 debug
    server example-ecc-rsa-in unix@haproxy_example_ecc_in.sock send-proxy
    #server example_ecc_in 127.1.1.67:80 send-proxy

backend example-rsa-relay
    bind-process 12-13
    mode tcp
    option tcplog
    log     127.0.0.1 local2 debug
    server example-ecc-rsa-in unix@haproxy_example_rsa_in.sock send-proxy
    #server example_rsa_in 127.1.1.67:81 send-proxy

frontend example-ecc-rsa-in
    bind unix@haproxy_example_ecc_in.sock ssl crt
./ecc_letsencrypt/example.com.ecc.san.dh2048.bundle.pem accept-proxy
    bind unix@haproxy_example_rsa_in.sock ssl crt
./rsa_letsencrypt/example.com.rsa.san.dh2048.bundle.pem accept-proxy
    #bind 127.1.1.67:80 accept-proxy name example_ecc_in ssl crt
./ecc_letsencrypt/example.com.ecc.san.dh2048.bundle.pem
    #bind 127.1.1.67:81 accept-proxy name example_rsa_in ssl crt
./rsa_letsencrypt/example.com.rsa.san.dh2048.bundle.pem
    bind-process 12-13
    mode tcp
    option tcplog
    log     127.0.0.1 local2 debug
    option dontlog-normal

    default_backend example-ssl-out

backend example-ssl-out
    bind-process 11
    mode http
    option httplog
    log     127.0.0.1 local2 debug

    http-request set-header X-Forced-Ssl on
    http-request set-header X-Forwarded-Proto https
    http-request set-header X-Forwarded-Ssl on

    rspadd Strict-Transport-Security:\ max-age=15552000

    server example-ssl-proxy-in-070 127.1.1.70:80 send-proxy

frontend example-http-in
    bind-process 11
    bind 127.1.1.70:80 accept-proxy name example_ssl_proxy_in_070
    bind 1X.X.X.Y:80 name example_http_in
    bind 1X.X.X.X:80 name ecc_http_in
    mode http
    option httplog
    option dontlog-normal
    log     127.0.0.1 local2 debug
    option forwardfor if-none
    option http-server-close
    tcp-request inspect-delay 5s
    default_backend example-http-out

backend example-http-out
    bind-process 11
    mode http
    option httplog
    log     127.0.0.1 local2 debug
    option http-server-close
    option httpchk OPTIONS * HTTP/1.1\r\nHost:\ example.com
    balance roundrobin
    http-request allow
    server www001 10.2.51.1:80   check inter 5s rise 1 fall 1

Socket permissions (with chmod 777):

srwxrwxrwx   1 haproxy haproxy    0 Jan  5 15:46 haproxy_example_ecc_in.sock
srwxrwxrwx   1 haproxy haproxy    0 Jan  5 15:46 haproxy_example_rsa_in.sock

Reply via email to