Ssh
HAProxy:檢測 SSL 連接內容,然後決定是否轉發
我想在埠 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 處理。