TCP模式下基于客户端CN的HAProxy-ACL
我正在TCP模式下使用TLS(基于客户端证书的身份验证)运行HAProxy。我的配置粘贴在下面。我的目标是根据提供的客户端证书将SSH连接重定向到正确的服务器。本例讨论SSH,但将来我可能需要以这种方式安全地公开各种服务。感谢您的帮助 注意,在HTTPS模式下,您可以使用类似的方法提取客户端CN,并针对ACL使用头中的变量。然而,由于我处于TCP模式,我不确定如何做类似的事情 http请求集头X-SSL-Client-CN%{+Q}[SSL_c_s_dn(CN)] 但是,我不确定在TCP模式下运行时如何执行类似操作TCP模式下基于客户端CN的HAProxy-ACL,tcp,haproxy,tls1.2,Tcp,Haproxy,Tls1.2,我正在TCP模式下使用TLS(基于客户端证书的身份验证)运行HAProxy。我的配置粘贴在下面。我的目标是根据提供的客户端证书将SSH连接重定向到正确的服务器。本例讨论SSH,但将来我可能需要以这种方式安全地公开各种服务。感谢您的帮助 注意,在HTTPS模式下,您可以使用类似的方法提取客户端CN,并针对ACL使用头中的变量。然而,由于我处于TCP模式,我不确定如何做类似的事情 http请求集头X-SSL-Client-CN%{+Q}[SSL_c_s_dn(CN)] 但是,我不确定在TCP模式下运
frontend Frontend_server
mode tcp
option tcplog
log global
bind X.X.X.X:8000 ssl crt /etc/certs/server.pem ca-file /etc/certs/ca.crt verify required
acl ACL_SRV1 ??????? -m str -f /etc/SRV1/cn.list
acl ACL_SRV2 ??????? -m str -f /etc/SRV2/cn.list
acl ACL_SRV3 ??????? -m str -f /etc/SRV3/cn.list
log-format %ci:%cp\ [%t]\ %ft\ %b/%s\ %ST\ %B\ %tsc\ %ac/%fc/%bc/%sc\ %sq/%bq\ {%[ssl_c_verify],%{+Q}[ssl_c_s_dn],%{+Q}[ssl_c_i_dn]
use_backend SRV1 if ACL_SRV1
use_backend SRV2 if ACL_SRV2
use_backend SRV3 if ACL_SRV3
backend SRV1
mode tcp
option tcplog
option tcp-check
server MY_SRV1 X.X.X.X:22 check inter 1000 port 22 maxconn 1000
backend SRV2
mode tcp
option tcplog
option tcp-check
server MY_SRV2 X.X.X.X:22 check inter 1000 port 22 maxconn 1000
backend SRV3
mode tcp
option tcplog
option tcp-check
server MY_SRV3 X.X.X.X:22 check inter 1000 port 22 maxconn 1000
在tcp模式下,TLS不会在HAProxy终止,而是在HAProxy后面的服务器上终止。当然,在向服务器发送或转发任何数据之前,必须知道该服务器。这意味着只能对TLS握手(ClientHello)中来自客户端的第一个数据做出选择哪个服务器的决定,而不能对以后需要服务器回复的数据做出选择 但是,只有当服务器明确请求客户端证书时,客户端才会发送这些证书。这意味着,为了从客户端获得客户端证书,服务器需要与客户端通信,这意味着必须已经建立到服务器的连接。当然,这意味着不能根据客户机证书来决定使用哪台服务器,因为在TLS握手中,客户机证书知道得太晚了
根据客户端证书做出此类决定的唯一方法是在负载平衡器处终止TLS。使用tcp模式时,TLS不会在HAProxy处终止,而是在HAProxy后面的服务器上终止TLS。当然,在向服务器发送或转发任何数据之前,必须知道该服务器。这意味着只能对TLS握手(ClientHello)中来自客户端的第一个数据做出选择哪个服务器的决定,而不能对以后需要服务器回复的数据做出选择 但是,只有当服务器明确请求客户端证书时,客户端才会发送这些证书。这意味着,为了从客户端获得客户端证书,服务器需要与客户端通信,这意味着必须已经建立到服务器的连接。当然,这意味着不能根据客户机证书来决定使用哪台服务器,因为在TLS握手中,客户机证书知道得太晚了
根据客户端证书做出此类决定的唯一方法是在负载平衡器处终止TLS。在HAProxy论坛上提出了这个问题并得到了答案。有关详细信息,请参阅在HAProxy论坛上提问并获得答案。有关详细信息,请参阅