Está usando o MySQL Workbench pela Internet segura?

1

Digamos que eu tenha um servidor com um banco de dados SQL em algum lugar do outro lado do planeta. É seguro estabelecer uma conexão pela Internet? por exemplo. com o MySQL Workbench.

Estou perguntando porque ouvi que as conexões com servidores, particularmente com o uso do software, são, por padrão, não criptografadas. Se eu forçar o SSL para cada conexão remota, quais riscos permanecem? Uma porta MySQL aberta é um risco de segurança em si?

    
por stendarr 27.06.2017 / 14:00

2 respostas

2

O Manual de Referência do MySQL tem um Capítulo 6 para Segurança completo.

Primeiro, você não deve permitir conexões de qualquer lugar na Internet, mas apenas dos hosts confiáveis conhecidos. Embora o usuário também tenha uma lista de hosts permitidos, 6.1.1 Diretrizes de segurança sugere fazendo isso no nível do firewall, antes mesmo de os hosts se conectarem ao seu servidor MySQL (porta padrão 3306 ). Isso aumenta a segurança, pois também evita o uso de possíveis explorações.

Se você realmente precisa ter conexão direta entre o Workbench local e o servidor MySQL remoto, Use Conexões Seguras . Mas existem outras maneiras de proteger a conexão com seu servidor SQL também. Considerando o esforço necessário para o controle de acesso e a segurança da conexão SQL com o OpenSSL, eles são muito mais práticos:

  1. Use um túnel SSH e você pode conectar seu servidor MySQL da mesma forma que o Workbench estava lá. Este exemplo vincula a porta local 13306 e as conexões de encapsulamento a localhost:3306 no lado remoto:

    ssh -L 13306:localhost:3306 [email protected]
    
  2. Use VPN e permita conexões somente da rede VPN interna.

Com essas duas abordagens, você pode vincular o MySQL a localhost apenas; é a opção mais segura.

    
por 27.06.2017 / 14:34
1

Para responder à sua pergunta: não, não é seguro.

Apenas para nomear alguns problemas de segurança:

1: Login Seus dados de login são transferidos via texto simples pela internet que você NÃO quer que, obviamente:)

2: consultas SQL Suas consultas que você envia (e suas respostas) são enviadas em texto simples novamente, você NÃO quer que alguém possa facilmente adulterar esses dados.

Além disso, ter os resultados da consulta em texto simples, que podem conter informações confidenciais, é um outro problema. No caso de arquivos pessoais, você pode até ser processado em alguns países por negligenciar / ignorar as diretrizes de segurança para dados pessoais.

3: A porta SQL aberta na Internet é sempre um vetor de ataque extra para um usuário mal-intencionado em potencial. Pense em exploits remotos do servidor mysql, etc.

Se você realmente precisa de uma conexão remota, use SSL.

Eu sumarizei as etapas que você precisa seguir, supondo que você executa um servidor mysql no linux:

No servidor mysql, gere um certificado ssl do mysql:

Gere o CA com chave privada:

openssl genrsa 4096 > ca-key.pem

Gere o certificado usando a chave criada anteriormente (responda às perguntas padrão):

openssl req -sha256 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem

Em seguida, crie uma nova chave privada para o servidor mysql (novamente, perguntas padrão):

openssl req -sha256 -newkey rsa:4096 -days 730 -nodes -keyout server-key.pem > server-req.pem

Exportar chave privada:

openssl rsa -in server-key.pem -out server-key.pem

Criar certificado do servidor:

openssl x509 -sha256 -req -in server-req.pem -days 730  -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem

Agora, no seu my.cnf (localizado em /etc/mysql/my.cnf), edite a seção mysqld e adicione o seguinte:

ssl-ca = / etc / mysql / ca-cert.pem   ssl-cert = / etc / mysql / server-cert.pem   chave-ssl = / etc / mysql / server-key.pem

reinicie seu serviço mysql:

service mysql restart

Agora você tem seu servidor mysql rodando com certificados de servidor, em seguida iremos adicionar um usuário de um endereço específico (seu ip estático remoto se possível) assim no seu console mysql execute o seguinte:

GRANT ALL PRIVILEGES ON 'database'.* TO 'yourremotelogin'@'your.remote.ip.xxx' IDENTIFIED BY 'password' REQUIRE SSL;
FLUSH PRIVILEGES;

Ok, agora temos um servidor mysql SSL que aceita conexões remotas via SSL a partir do seu ip particular, mas ainda precisamos gerar certificados de clientes:

Então, ainda no servidor mysql, execute o seguinte:

    openssl req -sha256 -newkey rsa:4096 -days 730 -nodes -keyout client-key.pem > client-req.pem
    openssl rsa -in client-key.pem -out client-key.pem
    openssl x509 -sha256 -req -in client-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem

Agora copie o ca-cert.pem, o client-key.pem e o client-cert.pem para o seu pc remoto, onde seu ambiente de trabalho mysql está situado.

No mysql workbench, abra o gerenciamento de conexões do servidor e edite sua conexão existente em seu servidor. Na aba "conenction", selecione a sub-aba SSL e selecione "use SSL require".

Nos campos abaixo, selecione ca-cert.pem para seu arquivo CA SSL, cielnt-cert.pem para o arquivo SSL CERT e client-key.pem para o arquivo-chave SSL.

Agora, se você tentar se conectar, ainda será solicitada uma senha (que você definiu anteriormente), mas será sobre SSL:)

Espero que esta resposta seja a resposta que você estava procurando.

    
por 27.06.2017 / 15:46