sql >> Base de Datos >  >> RDS >> Mysql

Uso de OpenVPN para asegurar el acceso a su clúster de base de datos en la nube

Internet es un lugar peligroso, especialmente si deja sus datos sin cifrar o sin la seguridad adecuada. Hay varias formas de proteger sus datos; todo en diferentes niveles. Siempre debe tener una política de firewall fuerte, encriptación de datos y una política de contraseña segura. Otra forma de proteger sus datos es accediendo a ellos mediante una conexión VPN.

La red privada virtual (o VPN) es un método de conexión que se utiliza para agregar seguridad y privacidad a las redes públicas y privadas, protegiendo sus datos.

OpenVPN es una solución VPN SSL de código abierto con todas las funciones para proteger las comunicaciones. Se puede utilizar para el acceso remoto o la comunicación entre diferentes servidores o centros de datos. Se puede instalar en las instalaciones o en la nube, en diferentes sistemas operativos y se puede configurar con muchas opciones de seguridad.

En este blog, crearemos una conexión VPN para acceder a una base de datos en la nube. Existen diferentes formas de lograr este objetivo, según su infraestructura y la cantidad de recursos de hardware que desee utilizar para esta tarea.

Por ejemplo, puede crear dos máquinas virtuales, una en las instalaciones y otra en la nube, y podrían ser un puente para conectar su red local a la red de la nube de la base de datos a través de un punto a punto. Conexión VPN de pares.

Otra opción más sencilla podría ser conectarse a un servidor VPN instalado en el nodo de la base de datos usando una conexión de cliente VPN configurada en su máquina local. En este caso, utilizaremos esta segunda opción. Verá cómo configurar un servidor OpenVPN en el nodo de la base de datos que se ejecuta en la nube y podrá acceder a él mediante un cliente VPN.

Para el nodo de la base de datos, usaremos una instancia Amazon EC2 con la siguiente configuración:

  • SO:Servidor Ubuntu 18.04
  • Dirección IP pública:18.224.138.210
  • Dirección IP privada:172.31.30.248/20
  • Puertos TCP abiertos:22, 3306, 1194

Cómo instalar OpenVPN en Ubuntu Server 18.04

La primera tarea es instalar el servidor OpenVPN en su nodo de base de datos. En realidad, la tecnología de la base de datos utilizada no importa, ya que estamos trabajando en una capa de red, pero para propósitos de prueba después de configurar la conexión VPN, digamos que estamos ejecutando Percona Server 8.0.

Entonces, comencemos instalando los paquetes de OpenVPN.

$ apt install openvpn easy-rsa

Como OpenVPN utiliza certificados para cifrar su tráfico, necesitará EasyRSA para esta tarea. Es una utilidad CLI para crear una autoridad de certificación raíz y solicitar y firmar certificados, incluidas las sub-CA y las listas de revocación de certificados.

Nota:hay una nueva versión de EasyRSA disponible, pero para mantener el enfoque en la instalación de OpenVPN, usemos la versión de EasyRSA disponible en el repositorio de Ubuntu 18.04 atm (EasyRSA versión 2.2.2- 2).

El comando anterior creará el directorio /etc/openvpn/ para la configuración de OpenVPN, y el directorio /usr/share/easy-rsa/ con los scripts y la configuración de EasyRSA.

Para facilitar esta tarea, creemos un enlace simbólico a la ruta EasyRSA en el directorio de OpenVPN (o simplemente puede copiarlo):

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

Ahora, debe configurar EasyRSA y crear sus certificados. Vaya a la ubicación de EasyRSA y cree una copia de seguridad para el archivo "vars":

$ cd /etc/openvpn/easy-rsa

$ cp vars vars.bak

Edite este archivo y cambie las siguientes líneas según su información:

$ 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"

Luego, cree un nuevo enlace simbólico al archivo openssl:

$ cd /etc/openvpn/easy-rsa

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

Ahora, aplique el archivo vars:

$ cd /etc/openvpn/easy-rsa

$ . vars

NOTA:si ejecuta ./clean-all, haré un rm -rf en /etc/openvpn/easy-rsa/keys

Ejecute el script de limpieza total:

$ ./clean-all

Y crea la clave 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 acción puede demorar algunos segundos, y cuando finalice, tendrá un nuevo archivo DH dentro del directorio "keys" en el directorio EasyRSA.

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

dh2048.pem

Ahora, vamos a crear los 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.

...

Esto creará ca.crt (certificado público) y ca.key (clave privada). El certificado público será requerido en todos los servidores para conectarse a la VPN.

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

ca.crt  ca.key

Ahora que ha creado su CA, creemos el certificado del servidor. En este caso, lo llamaremos "servidor-openvpn":

$ ./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

Esto creará los archivos CRT, CSR y Key para el servidor OpenVPN:

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

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

Ahora, debe crear el certificado de cliente y el proceso es bastante similar:

$ ./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

Esto creará los archivos CRT, CSR y Key para el cliente OpenVPN:

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

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

En este punto, tiene todos los certificados listos. El siguiente paso será crear la configuración de OpenVPN tanto para el servidor como para el cliente.

Configuración del servidor OpenVPN

Como mencionamos, la instalación de OpenVPN creará el directorio /etc/openvpn, donde agregará los archivos de configuración para los roles de servidor y cliente, y tiene un archivo de configuración de muestra para cada uno en / usr/share/doc/openvpn/examples/sample-config-files/, para que pueda copiar los archivos en la ubicación mencionada y modificarlos como desee.

En este caso, solo usaremos el archivo de configuración del servidor, ya que es un servidor OpenVPN:

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

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

Ahora, veamos un archivo de configuración de servidor básico:

$ 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.

Nota:cambie las rutas de los certificados según su entorno.

Y luego, inicie el servicio OpenVPN utilizando el archivo de configuración creado:

$ systemctl start [email protected]

Compruebe si el servicio está escuchando en el puerto correcto:

$ netstat -pltn |grep openvpn

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

Finalmente, en el servidor OpenVPN, debe agregar la línea de reenvío de IP en el archivo sysctl.conf para permitir el tráfico VPN:

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

Y ejecutar:

$ sysctl -p

net.ipv4.ip_forward = 1

Ahora, veamos cómo configurar un cliente OpenVPN para conectarse a esta nueva VPN.

Configuración del cliente OpenVPN

En el punto anterior, mencionamos los archivos de configuración de muestra de OpenVPN y usamos el del servidor, así que ahora hagamos lo mismo pero usando el archivo de configuración del cliente.

Copie el archivo client.conf de /usr/share/doc/openvpn/examples/sample-config-files/ en la ubicación correspondiente y cámbielo como desee.

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

También necesitará los siguientes certificados creados previamente para configurar el cliente VPN:

ca.crt

openvpn-client-1.crt

openvpn-client-1.key

Entonces, copie estos archivos a su máquina local o VM. Deberá agregar esta ubicación de archivos en el archivo de configuración del cliente VPN.

Ahora, veamos un archivo de configuración de cliente básico:

$ 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.

Nota:cambie las rutas de los certificados según su entorno.

Puede usar este archivo para conectarse al servidor OpenVPN desde diferentes sistemas operativos como Linux, macOS o Windows.

En este ejemplo, usaremos la aplicación Tunnelblick para conectarnos desde un cliente macOS. Tunnelblick es una interfaz gráfica de usuario gratuita y de código abierto para OpenVPN en macOS. Proporciona un control sencillo de los clientes de OpenVPN. Viene con todos los paquetes necesarios como OpenVPN, EasyRSA y controladores tun/tap.

Como los archivos de configuración de OpenVPN tienen extensiones .tblk, .ovpn o .conf, Tunnelblick puede leerlos todos.

Para instalar un archivo de configuración, arrástrelo y suéltelo en el ícono de Tunnelblick en la barra de menú o en la lista de configuraciones en la pestaña 'Configuraciones' de la ventana 'Detalles de VPN'.

Y luego, presione “Conectar”.

Ahora, debería tener algunas rutas nuevas en su 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 puede ver, hay una ruta a la red de la base de datos local a través de la interfaz VPN, por lo que debería poder acceder al servicio de la base de datos utilizando la dirección IP de la base de datos privada.

$ 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. Ahora tiene su tráfico protegido usando una VPN para conectarse a su nodo de base de datos.

Conclusión

Proteger sus datos es imprescindible si accede a ellos a través de Internet, localmente o en un entorno mixto. Debe saber cómo encriptar y asegurar su acceso remoto.

Como puedes ver, con OpenVPN puedes llegar a la base de datos remota usando la red local a través de una conexión encriptada usando certificados autofirmados. Entonces, OpenVPN parece una gran opción para esta tarea. Es una solución de código abierto y la instalación/configuración es bastante sencilla. Utilizamos una configuración de servidor OpenVPN básica, por lo que puede buscar una configuración más compleja en la documentación oficial de OpenVPN para mejorar su servidor OpenVPN.