HAProxy: Detecta o conteúdo da conexão SSL e decide encaminhá-lo ou não

2

Eu gostaria de ter um front-end com o HAProxy na porta 443. Esse front-end age da seguinte maneira:

Decifra o conteúdo da conexão e verifica:

1- Se o conteúdo criptografado da conexão for ssh, ou seja, se as primeiras palavras dos pacotes forem SSH-2.0 , então ele encaminhará os pacotes decriptografados para a porta 22. Assumo que um back-end desse tipo tem a seguinte aparência:

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

2- Se o conteúdo criptografado for qualquer outra coisa, encaminhe o conteúdo criptografado para a porta 8443, que contém um servidor Apache com chaves SNI corretas. Se for necessário incluir todas as chaves SNI corretas para cada endereço da Web (para não parecer um ataque intermediário, você poderia me dizer como fazer isso com um exemplo? Não tenho problema em adicionar todas as chaves para o HAProxy.

Por que? Porque eu já tenho o apache trabalhando na porta 443. Eu gostaria de movê-lo para alguma outra porta sem ter que reescrever toda a minha configuração. Então, eu gostaria de movê-lo para a porta 8443, por exemplo, e então dizer ao HAProxy, se a conexão não é SSH, então apenas encaminhar tudo o que você chegar à porta 443.

Como escrevo um front end + back ends? Por favor, ajude.

Eu tenho o seguinte front end como ponto de partida:

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

Por favor, pergunte se você precisar de mais detalhes.

Obrigado.

    
por The Quantum Physicist 04.03.2016 / 14:18

1 resposta

0

Você pode usar o SNI primeiro, selecionando

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

ou

ssh.domain.com

e somente se ssh.domain.com for selecionado, você descriptografa, faz a mágica ssh e a envia para um servidor local não criptografado, supondo que este seja parecido com o tráfego https normal, mas não contém informações confidenciais dentro do https conteúdo, porque isso é tratado por site1 e site2.

    
por 04.03.2016 / 16:57