【发布时间】:2019-05-07 18:50:50
【问题描述】:
我在 TCP 模式下使用 TLS(基于客户端证书的身份验证)运行 HAProxy。我的配置粘贴在下面。我的目标是根据提供的客户端证书将 SSH 连接重定向到正确的服务器。此示例讨论 SSH,但将来我可能必须以这种方式安全地公开各种服务。任何帮助表示赞赏。
请注意,在 HTTPS 模式下,您可以使用类似的方法提取客户端 CN,并将标头中的变量用于 ACL。但是,由于我处于 TCP 模式,我不确定如何做类似的事情。
http-request set-header 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
【问题讨论】:
-
在HAProxy论坛上提问,得到了答案。详情见discourse.haproxy.org/t/…