Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando o túnel SSH como uma alternativa de VPN

Usar uma conexão VPN é a maneira mais segura de acessar uma rede se você estiver trabalhando remotamente, mas como essa configuração pode exigir hardware, tempo e conhecimento, você provavelmente deve querer conhecer alternativas para fazê-lo . Usar SSH também é uma maneira segura de acessar uma rede remota sem hardware extra, menos demorado e menos esforço do que configurar um servidor VPN. Neste blog, veremos como configurar o SSH Tunneling para acessar seus bancos de dados de maneira segura.

O que é SSH?

SSH (Secure SHell), é um programa/protocolo que permite acessar um host/rede remoto, executar comandos ou compartilhar informações. Você pode configurar diferentes métodos de autenticação criptografada e usa a porta 22/TCP por padrão, mas é recomendável alterá-la por motivos de segurança.

Como usar SSH?

A maneira mais segura de usá-lo é criando um par de chaves SSH. Com isso, você não precisa apenas ter a senha, mas também a chave privada para poder acessar o host remoto.

Além disso, você deve ter um host com apenas a função de servidor SSH e mantê-lo o mais isolado possível, para que, em caso de ataque externo, isso não afete seus servidores locais. Algo assim:

Vamos ver primeiro como configurar o servidor SSH.

Configuração do servidor

A maior parte da instalação do Linux tem o servidor SSH instalado por padrão, mas existem alguns casos em que pode estar faltando (ISO mínimo), então para instalá-lo, você só precisa instalar os seguintes pacotes:

SO baseado em RedHat

$ yum install openssh-clients openssh-server

SO baseado em Debian

$ apt update; apt install openssh-client openssh-server

Agora que você tem o servidor SSH instalado, você pode configurá-lo para aceitar apenas conexões usando uma chave.

vi /etc/ssh/sshd_config

PasswordAuthentication no

Certifique-se de alterá-lo depois de ter a chave pública no lugar, caso contrário você não poderá fazer login.

Você também pode alterar a porta e negar acesso root para torná-la mais segura:

Port 20022

PermitRootLogin no

Você deve verificar se a porta selecionada está aberta na configuração do firewall para poder acessá-la.

Esta é uma configuração básica. Existem diferentes parâmetros a serem alterados aqui para melhorar a segurança do SSH, portanto, você pode seguir a documentação desta tarefa.

Configuração do cliente

Agora, vamos gerar o par de chaves para o usuário local “remoto” acessar o servidor SSH. Existem diferentes tipos de chaves, neste caso, vamos gerar uma chave RSA.

$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/remote/.ssh/id_rsa):

Created directory '/home/remote/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/remote/.ssh/id_rsa.

Your public key has been saved in /home/remote/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:hT/36miDBbRa3Povz2FktC/zNb8ehAsjNZOiX7eSO4w [email protected]

The key's randomart image is:

+---[RSA 3072]----+

|                 |

|        ..  .    |

|       o.+.=.    |

|        *o+.o..  |

|       +S+o+=o . |

|      . o +==o+  |

|         =oo=ooo.|

|        .E=*o* .+|

|         ..BB ooo|

+----[SHA256]-----+

Isso irá gerar os seguintes arquivos em um diretório chamado “.ssh” dentro do diretório inicial do usuário:

$ whoami

remote

$ pwd

/home/remote/.ssh

$ ls -la

total 20

drwx------ 2 remote remote 4096 Apr 16 15:40 .

drwx------ 3 remote remote 4096 Apr 16 15:27 ..

-rw------- 1 remote remote 2655 Apr 16 15:26 id_rsa

-rw-r--r-- 1 remote remote  569 Apr 16 15:26 id_rsa.pub

O arquivo “id_rsa” é a chave privada (mantenha-o o mais seguro possível), e o “id_rsa.pub” é o arquivo público que deve ser copiado para o host remoto para acessá-lo. Para isso, execute o seguinte comando como usuário correspondente:

$ whoami

remote

$ ssh-copy-id -p 20022 [email protected]

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/remote/.ssh/id_rsa.pub"

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

[email protected]'s password:



Number of key(s) added:        1



Now try logging into the machine, with:   "ssh -p '20022' '[email protected]"

and check to make sure that only the key(s) you wanted were added.

Neste exemplo, estou usando a porta 20022 para SSH e meu host remoto é 35.166.37.12. Eu também tenho o mesmo usuário (remoto) criado em hosts locais e remotos. Você pode usar outro usuário no host remoto, portanto, nesse caso, você deve alterar o usuário para o correto no comando ssh-copy-id:

$ ssh-copy-id -p 20022 [email protected]

Este comando copiará a chave pública para o arquivo authorized_keys no diretório .ssh remoto. Então, no servidor SSH você deve ter isso agora:

$ pwd

/home/remote/.ssh

$ ls -la

total 20

drwx------ 2 remote remote 4096 Apr 16 15:40 .

drwx------ 3 remote remote 4096 Apr 16 15:27 ..

-rw------- 1 remote remote  422 Apr 16 15:40 authorized_keys

-rw------- 1 remote remote 2655 Apr 16 15:26 id_rsa

-rw-r--r-- 1 remote remote  569 Apr 16 15:26 id_rsa.pub

Agora, você deve conseguir acessar o host remoto:

$ ssh -p 20022 [email protected]

Mas isso não é suficiente para acessar seu nó de banco de dados, pois você ainda está no servidor SSH.

Acesso ao banco de dados SSH

Para acessar seu nó de banco de dados, você tem duas opções. A maneira clássica é, se você estiver no servidor SSH, poderá acessá-lo de lá como estiver na mesma rede, mas para isso você deve abrir duas ou três conexões.

Primeiro, a conexão SSH estabelecida com o servidor SSH:

$ ssh -p 20022 [email protected]

Em seguida, a conexão SSH com o Nó do Banco de Dados:

$ ssh [email protected]

E por fim, a conexão com o banco de dados, que no caso do MySQL, é:

$ mysql -h localhost -P3306 -udbuser -p

E para PostgreSQL:

$ psql -h localhost -p 5432 -Udbuser postgres

Se você tiver o cliente do banco de dados instalado no servidor SSH, você pode evitar a segunda conexão SSH e apenas executar a conexão do banco de dados diretamente do servidor SSH:

$ mysql -h 192.168.100.120 -P3306 -udbuser -p

ou:

$ psql -h 192.168.100.120 -p 5432 -Udbuser postgres

Mas isso pode ser irritante, pois você costumava usar a conexão de banco de dados diretamente do seu computador conectado no escritório, então vamos ver como usar o túnel SSH para isso.

Túnel SSH

Seguindo o mesmo exemplo, temos:

  • Endereço IP público do servidor SSH:35.166.37.12
  • Porta do servidor SSH:20022
  • Endereço IP privado do nó do banco de dados:192.168.100.120
  • Porta do banco de dados:3306/5432
  • Usuário SSH (local e remoto):remoto
  • Usuário do banco de dados:dbuser

Linha de Comando

Então, se você executar o seguinte comando em sua máquina local:

$ ssh -L 8888:192.168.100.120:3306 [email protected] -p 20022 -N

Isso abrirá a porta 8888 em sua máquina local, que acessará o nó do banco de dados remoto, porta 3306, através do servidor SSH, porta 20022, usando o usuário “remoto”.

Então, para deixar mais claro, após executar este comando, você pode acessar o nó do banco de dados remoto, executando isso em sua máquina local:

$ mysql -h localhost -P8888 -udbuser -p

Ferramentas gráficas

Se você estiver usando uma ferramenta gráfica para gerenciar bancos de dados, provavelmente ela tem a opção de usar SSH Tunneling para acessar o nó do banco de dados.

Vamos ver um exemplo usando o MySQL Workbench:

E o mesmo para PgAdmin:

Como você pode ver, as informações solicitadas aqui são bastante semelhantes às usadas para a conexão de túnel SSH da linha de comando.

Conclusão


A segurança é importante para todas as empresas, portanto, se você estiver trabalhando em casa, deverá manter os dados tão seguros quanto no escritório. Como mencionamos, para isso, provavelmente a melhor solução é ter uma conexão VPN para acessar os bancos de dados, mas se por algum motivo não for possível, você precisa ter uma alternativa para evitar o manuseio de dados pela internet de forma insegura. Como você pode ver, configurar o SSH Tunneling para acessar seus bancos de dados não é ciência de foguetes e é provavelmente a melhor alternativa neste caso.