Ssh

HAProxy:檢測 SSL 連接內容,然後決定是否轉發

  • March 4, 2016

我想在埠 443 上有一個帶有 HAProxy 的前端。這個前端的作用如下:

它解密連接的內容並檢查:

1-如果連接的加密內容是 ssh,即如果數據包的第一個字是SSH-2.0,那麼它將解密的數據包轉發到埠 22。我假設這樣的後端如下所示:

backend ssh
   mode tcp
   option tcplog
   server ssh 127.0.0.1:22
   timeout server 2h

2- 如果加密內容是其他內容,則將加密內容轉發到埠 8443,該埠包含具有正確 SNI 密鑰的 Apache 伺服器。如果必須為每個網址包含所有正確的 SNI 密鑰(為了不被視為中間人攻擊,您能否通過範例告訴我如何做到這一點?我可以毫無問題地添加HAProxy 的所有密鑰。

**為什麼?**因為我已經有 apache 在埠 443 上工作。我想將它移動到其他埠,而不必重寫我的整個配置。所以我想把它移到 8443 埠,然後告訴 HAProxy,如果連接不是 SSH,那麼只需將你得到的所有東西都轉發到 443 埠。

這樣的前端+後端怎麼寫?請協助。

我目前有以下前端作為起點:

frontend ssl
   bind 0.0.0.0:443 ssl crt /home/myuser/SSL/certs.pem no-sslv3   #decrypts the connection with the keys certs.pem
   mode tcp
   option tcplog
   tcp-request inspect-delay 5s
   tcp-request content accept if HTTP
   acl client_attempts_ssh payload(0,7) -m bin 5353482d322e30   #if the decrypted information starts with SSH-2.0

   use_backend ssh if client_attempts_ssh   #forward to SSH if condition client_attempts_ssh is satisfied.
   use_backend forwardToApache if !client_attempts_ssh

請詢問您是否需要任何其他詳細資訊。

謝謝你。

您可以先使用 SNI,選擇

site1.domain.com, 
site2.domain.com,

或者

ssh.domain.com

並且僅當選擇了 ssh.domain.com 時,您才解密,執行 ssh 魔術並將其發送到未加密的本地網路伺服器,假設這看起來像正常的 https 流量,但在 https 內容中不包含敏感資訊,因為這由site1 和site2 處理。

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