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

Usando o OpenVPN para proteger o acesso ao seu cluster de banco de dados na nuvem

A Internet é um lugar perigoso, especialmente se você deixar seus dados sem criptografia ou sem segurança adequada. Existem várias maneiras de proteger seus dados; todos em diferentes níveis. Você deve sempre ter uma política de firewall forte, criptografia de dados e uma política de senha forte. Outra maneira de proteger seus dados é acessando-os usando uma conexão VPN.

Virtual Private Network (ou VPN) é um método de conexão usado para adicionar segurança e privacidade a redes privadas e públicas, protegendo seus dados.

OpenVPN é uma solução VPN SSL de código aberto e com todos os recursos para proteger as comunicações. Ele pode ser usado para acesso remoto ou comunicação entre diferentes servidores ou data centers. Ele pode ser instalado no local ou na nuvem, em diferentes sistemas operacionais e pode ser configurado com muitas opções de segurança.

Neste blog, criaremos uma conexão VPN para acessar um banco de dados na nuvem. Existem diferentes maneiras de atingir esse objetivo, dependendo de sua infraestrutura e de quantos recursos de hardware você deseja usar para essa tarefa.

Por exemplo, você pode criar duas VMs, uma no local e outra na nuvem, e elas podem ser uma ponte para conectar sua rede local à rede de nuvem do banco de dados por meio de um peer-to- Conexão VPN de mesmo nível.

Outra opção mais simples pode ser conectar a um servidor VPN instalado no nó do banco de dados usando uma conexão de cliente VPN configurada em sua máquina local. Neste caso, usaremos esta segunda opção. Você verá como configurar um servidor OpenVPN no nó do banco de dados em execução na nuvem e poderá acessá-lo usando um cliente VPN.

Para o nó do banco de dados, usaremos uma instância do Amazon EC2 com o seguinte configuração:

  • SO:Ubuntu Server 18.04
  • Endereço IP público:18.224.138.210
  • Endereço IP privado:172.31.30.248/20
  • Portas TCP abertas:22, 3306, 1194

Como instalar o OpenVPN no Ubuntu Server 18.04

A primeira tarefa é instalar o servidor OpenVPN em seu nó de banco de dados. Na verdade, a tecnologia de banco de dados usada não importa, pois estamos trabalhando em uma camada de rede, mas para fins de teste após configurar a conexão VPN, digamos que estamos executando o Percona Server 8.0.

Então vamos começar instalando os pacotes OpenVPN.

$ apt install openvpn easy-rsa

Como o OpenVPN usa certificados para criptografar seu tráfego, você precisará do EasyRSA para essa tarefa. É um utilitário CLI para criar uma autoridade de certificação raiz e solicitar e assinar certificados, incluindo sub-CAs e listas de revogação de certificados.

Nota:Há uma nova versão do EasyRSA disponível, mas para manter o foco na instalação do OpenVPN, vamos usar a versão do EasyRSA disponível no repositório do Ubuntu 18.04 atm (EasyRSA versão 2.2.2- 2).

O comando anterior criará o diretório /etc/openvpn/ para a configuração do OpenVPN e o diretório /usr/share/easy-rsa/ com os scripts e a configuração do EasyRSA.

Para facilitar essa tarefa, vamos criar um link simbólico para o caminho do EasyRSA no diretório OpenVPN (ou você pode simplesmente copiá-lo):

$ ln -s /usr/share/easy-rsa /etc/openvpn/

Agora, você precisa configurar o EasyRSA e criar seus certificados. Vá para o local do EasyRSA e crie um backup para o arquivo “vars”:

$ cd /etc/openvpn/easy-rsa

$ cp vars vars.bak

Edite este arquivo e altere as seguintes linhas de acordo com suas informações:

$ vi vars

export KEY_COUNTRY="US"

export KEY_PROVINCE="CA"

export KEY_CITY="SanFrancisco"

export KEY_ORG="Fort-Funston"

export KEY_EMAIL="[email protected]"

export KEY_OU="MyOrganizationalUnit"

Em seguida, crie um novo link simbólico para o arquivo openssl:

$ cd /etc/openvpn/easy-rsa

$ ln -s openssl-1.0.0.cnf openssl.cnf

Agora, aplique o arquivo vars:

$ cd /etc/openvpn/easy-rsa

$ . vars

OBSERVAÇÃO:se você executar ./clean-all, farei um rm -rf em /etc/openvpn/easy-rsa/keys

Execute o script clean-all:

$ ./clean-all

E crie a chave Diffie-Hellman (DH):

$ ./build-dh

Generating DH parameters, 2048 bit long safe prime, generator 2

This is going to take a long time

.....................................................................................................................................................................+

Esta última ação pode demorar alguns segundos, e quando terminar, você terá um novo arquivo DH dentro do diretório “keys” no diretório EasyRSA.

$ ls /etc/openvpn/easy-rsa/keys

dh2048.pem

Agora, vamos criar os certificados de CA.

$ ./build-ca

Generating a RSA private key

..+++++

...+++++

writing new private key to 'ca.key'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

...

Isso criará o ca.crt (certificado público) e ca.key (chave privada). O certificado público será necessário em todos os servidores para se conectar à VPN.

$ ls /etc/openvpn/easy-rsa/keys

ca.crt  ca.key

Agora que você criou sua CA, vamos criar o certificado do servidor. Neste caso, vamos chamá-lo de “openvpn-server”:

$ ./build-key-server openvpn-server

Generating a RSA private key

.......................+++++

........................+++++

writing new private key to 'openvpn-server.key'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

...

Certificate is to be certified until Dec 23 22:44:02 2029 GMT (3650 days)

Sign the certificate? [y/n]:y



1 out of 1 certificate requests certified, commit? [y/n]y



Write out database with 1 new entries

Data Base Updated

Isso criará os arquivos CRT, CSR e Key para o servidor OpenVPN:

$ ls /etc/openvpn/easy-rsa/keys

openvpn-server.crt  openvpn-server.csr openvpn-server.key

Agora, você precisa criar o certificado do cliente, e o processo é bem parecido:

$ ./build-key openvpn-client-1

Generating a RSA private key

.........................................................................................+++++

.....................+++++

writing new private key to 'openvpn-client-1.key'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

...

Certificate is to be certified until Dec 24 01:45:39 2029 GMT (3650 days)

Sign the certificate? [y/n]:y



1 out of 1 certificate requests certified, commit? [y/n]y



Write out database with 1 new entries

Data Base Updated

Isso criará os arquivos CRT, CSR e Key para o cliente OpenVPN:

$ ls /etc/openvpn/easy-rsa/keys

openvpn-client-1.csr  openvpn-client-1.crt openvpn-client-1.key

Neste ponto, você tem todos os certificados prontos. O próximo passo será criar a configuração OpenVPN do servidor e do cliente.

Configurando o servidor OpenVPN

Como mencionamos, a instalação do OpenVPN criará o diretório /etc/openvpn, onde você adicionará os arquivos de configuração para as funções de servidor e cliente, e possui um arquivo de configuração de amostra para cada um em / usr/share/doc/openvpn/examples/sample-config-files/, para que você possa copiar os arquivos no local mencionado e modificá-los como desejar.

Neste caso, usaremos apenas o arquivo de configuração do servidor, pois é um servidor OpenVPN:

$ cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/

$ gunzip /etc/openvpn/server.conf.gz

Agora, vamos ver um arquivo básico de configuração do servidor:

$ cat /etc/openvpn/server.conf

port 1194  

# Which TCP/UDP port should OpenVPN listen on?

proto tcp  

# TCP or UDP server?

dev tun  

# "dev tun" will create a routed IP tunnel,"dev tap" will create an ethernet tunnel.

ca /etc/openvpn/easy-rsa/keys/ca.crt  

# SSL/TLS root certificate (ca).

cert /etc/openvpn/easy-rsa/keys/openvpn-server.crt  

# Certificate (cert).

key /etc/openvpn/easy-rsa/keys/openvpn-server.key  

# Private key (key). This file should be kept secret.

dh /etc/openvpn/easy-rsa/keys/dh2048.pem  

# Diffie hellman parameters.

server 10.8.0.0 255.255.255.0  

# Configure server mode and supply a VPN subnet.

push "route 172.31.16.0 255.255.240.0"

# Push routes to the client to allow it to reach other private subnets behind the server.

keepalive 20 120  

# The keepalive directive causes ping-like messages to be sent back and forth over the link so that each side knows when the other side has gone down.

cipher AES-256-CBC  

# Select a cryptographic cipher.

persist-key  

persist-tun

# The persist options will try to avoid accessing certain resources on restart that may no longer be accessible because of the privilege downgrade.

status /var/log/openvpn/openvpn-status.log  

# Output a short status file.

log /var/log/openvpn/openvpn.log  

# Use log or log-append to override the default log location.

verb 3  

# Set the appropriate level of log file verbosity.

Observação:altere os caminhos do certificado de acordo com seu ambiente.

E então, inicie o serviço OpenVPN usando o arquivo de configuração criado:

$ systemctl start [email protected]

Verifique se o serviço está escutando na porta correta:

$ netstat -pltn |grep openvpn

tcp        0 0 0.0.0.0:1194            0.0.0.0:* LISTEN   20002/openvpn

Finalmente, no servidor OpenVPN, você precisa adicionar a linha de encaminhamento de IP no arquivo sysctl.conf para permitir o tráfego VPN:

$ echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

E execute:

$ sysctl -p

net.ipv4.ip_forward = 1

Agora, vamos ver como configurar um cliente OpenVPN para se conectar a esta nova VPN.

Configurando o cliente OpenVPN

No ponto anterior, mencionamos os arquivos de configuração de amostra do OpenVPN e usamos o servidor, então agora vamos fazer o mesmo, mas usando o arquivo de configuração do cliente.

Copie o arquivo client.conf de /usr/share/doc/openvpn/examples/sample-config-files/ no local correspondente e altere-o como desejar.

$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/

Você também precisará dos seguintes certificados criados anteriormente para configurar o cliente VPN:

ca.crt

openvpn-client-1.crt

openvpn-client-1.key

Então, copie esses arquivos para sua máquina local ou VM. Você precisará adicionar este local de arquivos no arquivo de configuração do cliente VPN.

Agora, vamos ver um arquivo básico de configuração do cliente:

$ cat /etc/openvpn/client.conf

client  

# Specify that we are a client

dev tun  

# Use the same setting as you are using on the server.

proto tcp  

# Use the same setting as you are using on the server.

remote 18.224.138.210 1194  

# The hostname/IP and port of the server.

resolv-retry infinite  

# Keep trying indefinitely to resolve the hostname of the OpenVPN server.

nobind  

# Most clients don't need to bind to a specific local port number.

persist-key  

persist-tun

# Try to preserve some state across restarts.

ca /Users/sinsausti/ca.crt  

cert /Users/sinsausti/openvpn-client-1.crt

key /Users/sinsausti/openvpn-client-1.key

# SSL/TLS parms.

remote-cert-tls server  

# Verify server certificate.

cipher AES-256-CBC  

# Select a cryptographic cipher.

verb 3  

# Set log file verbosity.

Observação:altere os caminhos do certificado de acordo com seu ambiente.

Você pode usar este arquivo para se conectar ao servidor OpenVPN de diferentes sistemas operacionais, como Linux, macOS ou Windows.

Neste exemplo, usaremos o aplicativo Tunnelblick para conectar a partir de um cliente macOS. Tunnelblick é uma interface gráfica de usuário gratuita e de código aberto para OpenVPN no macOS. Ele fornece controle fácil de clientes OpenVPN. Ele vem com todos os pacotes necessários, como OpenVPN, EasyRSA e drivers tun/tap.

Como os arquivos de configuração do OpenVPN possuem extensões .tblk, .ovpn ou .conf, o Tunnelblick pode ler todos eles.

Para instalar um arquivo de configuração, arraste e solte-o no ícone do Tunnelblick na barra de menu ou na lista de configurações na guia 'Configurações' da janela 'Detalhes da VPN'.

E então, pressione “Conectar”.

Agora, você deve ter algumas novas rotas em sua máquina cliente:

$ netstat -rn # or route -n on Linux OS

Destination        Gateway Flags        Netif Expire

10.8.0.1/32        10.8.0.5 UGSc         utun5

10.8.0.5           10.8.0.6 UH           utun5

172.31.16/20       10.8.0.5 UGSc         utun5

Como você pode ver, há uma rota para a rede de banco de dados local por meio da interface VPN, portanto, você deve conseguir acessar o serviço de banco de dados usando o endereço IP do banco de dados privado.

$ mysql -p -h172.31.30.248

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 13

Server version: 8.0.18-9 Percona Server (GPL), Release '9', Revision '53e606f'



Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.



Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.



Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.



mysql>

Está funcionando. Agora você tem seu tráfego protegido usando uma VPN para se conectar ao seu nó de banco de dados.

Conclusão

Proteger seus dados é essencial se você estiver acessando-os pela Internet, no local ou em um ambiente misto. Você deve saber como criptografar e proteger seu acesso remoto.

Como você pode ver, com o OpenVPN você pode acessar o banco de dados remoto usando a rede local por meio de uma conexão criptografada usando certificados autoassinados. Portanto, o OpenVPN parece uma ótima opção para essa tarefa. É uma solução de código aberto e a instalação/configuração é bastante fácil. Usamos uma configuração básica do servidor OpenVPN, para que você possa procurar configurações mais complexas na documentação oficial do OpenVPN para melhorar seu servidor OpenVPN.