Haproxy

是否可以在帶有 SNI 的 Stunnel 前面使用 HAProxy?

  • May 9, 2022

我在 HAproxy 前面有一個使用 STunnel 的 SSL Termination。

最近,添加對 HTTP/2 的支持的事情被拋到了一邊。使用 HAProxy 很容易,但作為一個約束,STunnel 必須保留。

STunnel 需要保留的原因是大約 17000 行 SNI 以及通過現有 API 管理這些的可能性。

我可以很好地為包含 SNI 的 HAProxy 添加一個證書列表,幾個 grep 和 echo 就可以了。

但是,在我的搜尋過程中,我還沒有發現有人將 HAProxy 放在 STunnel 前面,放在 HAProxy 前面。那是錯誤的方法嗎?

這是我已經開始研究的內容(那裡還沒有 SNI - 其中 17000 個對於文章來說有點太多了):

HAProxy 前端(我需要添加 HTTP/2 支持)對 STunnel 進行加密:

listen frontend
bind 192.168.1.100:443 transparent  
mode http  
server stunnel 127.0.0.100:443 ssl verify none

ST隧道

[STunnel]
   cert = /etc/ssl/certs/cert.pem
   ciphers =
ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256
-SHA384:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA
256:AES256-GCM-SHA384:AES256-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-
RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-
RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:AES128-GCM-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA
   accept = 127.0.0.100:443
   connect = 127.0.0.100:80
   delay = yes
   options = NO_SSLv3
   options = NO_TLSv1
   options = NO_TLSv1.1
   options = NO_TLSv1.3
   options = CIPHER_SERVER_PREFERENCE
   options = DONT_INSERT_EMPTY_FRAGMENTS
   renegotiation = no
   protocol = proxy
   local = 127.0.0.100
   TIMEOUTclose = 0

HAProxy“後端”

listen Web
    bind 127.0.0.100:80 transparent accept-proxy
    mode http
    balance leastconn
    acl SSL-443 src 127.0.0.100
    tcp-request connection expect-proxy layer4 if STunnel
    option http-keep-alive
    timeout http-request 5s
    timeout tunnel 1h
    option redispatch
    option abortonclose
    maxconn 40000
    option httplog
    server server1 192.168.1.98:80  check
    server server2 192.168.1.99:80  check

我假設從 HAProxy 到 STunnel 需要加密,我需要考慮它們之間的任何協議不匹配。

如果 STunnel 是什麼,HAProxy 的tcp-request 連接 expect-proxy layer4 的 STunnel 版本是什麼?

非常感謝任何幫助獲得 STunnel 的 HTTP/2 支持,以及獲得“不要那樣做,這是錯誤的”。

謝謝,

haproxy如果它有證書解密 ssl,則只能看到(HTTP/2 協議)數據。意味著haproxy需要與stunnel.

如果這能以某種方式工作,這將意味著解密它haproxy並再次加密它stunnel,讓它再次解密。

引用自:https://serverfault.com/questions/1100373