ポート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に転送します。ポート8443には、正しいSNIキーを持つApacheサーバーが含まれています。各Webアドレスにすべての正しい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マジックを実行し、暗号化されていないローカルWebサーバーに送信します。これは、通常のhttpsトラフィックのように見えるはずですが、httpsコンテンツ内に機密情報が含まれていないためです。これはsite1とsite2によって処理されます。