Conexão segura ao MySQL - SSL vs Stunnel vs SSH Tunneling do MySQL

15

Temos um aplicativo PHP que se conecta a um servidor MySQL e desejamos garantir conexões entre os servidores de aplicativos e web e o banco de dados.

Nos horários de pico, os servidores da Web fazem muitas centenas de conexões simultâneas com o banco de dados e executam várias pequenas leituras e gravações. Estou ciente de que isso não é o ideal e estou trabalhando para reduzir o número de conexões com o banco de dados paralelamente a isso.

Atualmente, não temos conexões persistentes com o banco de dados ativadas e, embora pretendamos no futuro, eu gostaria de implementar isso independentemente disso.

Em termos de hardware - o servidor MySQL é bastante robusto (16 núcleos), assim como os servidores web. Eles são servidores dedicados.

Minha pergunta envolve a maneira mais eficiente de proteger e criptografar as conexões com o servidor de banco de dados.

Até agora, minha pesquisa sugeriu que a principal sobrecarga de desempenho está na configuração da conexão SSL - depois que o SSL é conectado, há pouca penalidade no desempenho. E aqui está o que eu tenho sobre cada método de segurança da conexão:

  1. Certificados SSL do MySQL - funciona como SSL normal. Pode usar certificados de cliente para impedir conexões não autorizadas. Não há conexões persistentes com nossa configuração existente. Ainda é preciso ter o MySQL escutando em uma porta aberta no firewall.
  2. stunnel. Configure uma porta para o túnel ssl da porta. Não precisa reconfigurar o MySQL. Pode fechar a porta de escuta normal do MySQL para impedir tentativas maliciosas de conexão do MySQL. Não suporta conexões persistentes. Sucesso de desempenho desconhecido.
  3. Túnel SSH. Crie um túnel SSH entre o cliente e o servidor. Não precisa reconfigurar o MySQL. Pode fechar a porta de escuta normal do MySQL para impedir tentativas maliciosas de conexão do MySQL. Suporta conexões persistentes, mas elas às vezes desaparecem. Sucesso de desempenho desconhecido.

Isto é até onde eu pude entender. Estou ciente das limitações dos benchmarks - na minha experiência de executá-los, é muito difícil simular o tráfego no mundo real. Eu esperava que alguém tivesse algum conselho baseado em suas próprias experiências de segurança do MySQL?

obrigado

dastra
fonte
Que tipo de arquitetura de servidor / rede você possui? Que tipo de cenário você está tentando impedir? Se toda a sua comunicação de servidor para servidor estiver em um switch / VLAN separado, talvez você não precise de proteção anti-sniffing. Quanto ao desempenho, execute openssl speede escolha cifras que atendam às suas necessidades de proteção versus comprometimento do desempenho.
22611 Marcin
@ Marcin - obrigado pela dica de velocidade openssl. Os cenários que estou tentando evitar são conexões não autorizadas ao mysql e criptografam a comunicação entre os servidores. Qualquer outra ajuda que você possa dar na comparação das três abordagens seria recebida com gratidão.
Dastra 22/04
1
3) use autossh para reduzir o efeito de desistência. Ele será reconectado automaticamente em caso de desconexão. Funciona bem aqui em muitas situações.
Ansi_lumen

Respostas:

5

Eu iria com o túnel ssh e faria isso em autosshvez de ssh. Sobre o desempenho, eu diria que o protocolo SSH é altamente personalizável e você pode ajustar sua conexão, se necessário.

Mas eu não esperaria uma sobrecarga perceptível após a conexão ser configurada.

ansi_lumen
fonte
3

Observando os benchmarks deste artigo (MySQL Performance Blog), você realmente deve evitar a capacidade SSL nativa do MySQL.

Nicolas BADIA
fonte