Configurar OpenVPN

INTRODUCCIÓN

VPN o red privada virtual es una red privada segura a través de una red pública como Internet. Una VPN es un túnel seguro a través de Internet que protege su tráfico de datos y aumenta la privacidad y seguridad de Internet. El acceso a la VPN está restringido por métodos de autenticación seguros.

OpenVPN es un software de código abierto para construir redes privadas virtuales, utiliza la biblioteca OpenSSL para cifrar los datos tunelizados y admite transportes UDP o TCP. OpenVPN puede usar claves previamente compartidas, autenticación basada en certificados y basada en nombre de usuario / contraseña.

En este tutorial, les mostraré cómo implementar una red privada virtual usando OpenVPN bajo el sistema operativo Linux OpenSUSE Leap 15.1

PRERREQUISITOS

OpenSUSE Leap 15.1 – 64bit
Acceso a la cuenta Root
TUN/TAP habilitados.

PASO 1 – Verificar si TUN/TAP esta habilitado

Si se desea crear una VPN en su servidor, hay que asegurarse de que TUN / TAP esté instalado y habilitado en el servidor. Se puede comprobar mediante el siguiente comando:

  # cat /dev/net/tun

Si resultado es:

  # cat: /dev/net/tun: File descriptor in bad state

significa el paquete no está instalado y habrá que instalarlo.

Paso 2 – Instalar OpenVPN

OpenVPN está disponible en el repositorio de OpenSUSE. Se puede instalar con el comando zypper:

  # zypper install openvpn

Paso 3 – Configurar Easy-RSA

Una vez intalado OpenVPN, descargamos easy-rsa para generar un archivo de certificado. Easy-rsa es una utilidad para administrar certificados, puede crear la autoridad certificadora raíz con ella y solicitar y firmar certificados.

Para esto, vamos al directorio OpenVPN (etc/openvpn) y descargamos easy-rsa con el comando wget:

  # cd /etc/openvpn/
  # wget https://github.com/OpenVPN/easy-rsa/archive/release/2.x.zip

Descomprimimos el archivo descargado y movemos el directorio easy-rsa:

  # unzip 2.x.zip
  # mv easy-rsa-release-2.x/easy-rsa/ /etc/openvpn/
  # rm -rf easy-rsa-release-2.x/

Configuramos la clave:

Vamos al directorio easy-rsa y editamos el archivo «vars» para configurar la clave y el certificado:

  # cd easy-rsa/2.0/
  # vi vars

Linea 29 – Modificarla para dejarla como se debajo

export KEY_CONFIG=/etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf

Línea 53 – Puede aumentar el tamaño de la clave. Baja la perfomance

export KEY_SIZE=2048

Línea 56 y 59: en cuántos días vencerán la clave y el certificado.

export CA_EXPIRE=3650
export KEY_EXPIRE=3650

Línea 64 – 72: cambiamos el valor predeterminado de la clave y la información del certificado.

export KEY_COUNTRY="AR"
export KEY_PROVINCE="Santa Fe"
export KEY_CITY="Casilda"
export KEY_ORG="Master Solutions"
export KEY_EMAIL="mimail@mastersolutions.com.ar"
export KEY_OU="MyOrganizationalUnit"
export KEY_NAME="EasyRSA"

Guardamos el archivo y cerramos vi.

Inicializar la PKI

A continuación, inicializamos la PKI (infraestructura de clave pública):

  # source ./vars && ./clean-all && ./build-ca

Dejaremos los valores predeterminados, solo presionamos ‘Enter’.

Generar parámetros de Diffie Hellman

Ejecutamos el siguiente comando:

  # ./build-dh

Y veremos la siguiente salida:

Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
…………………………….

Generamos la clave privada del servidor

Generamos la clave privada con el nombre ‘server’:

  # ./build-key-server server

Presionamos ‘Enter’ y respondemos ‘y’ (dos veces) para confirmar y generar la clave.

Generar clave y certificado para el cliente

Generamos la clave del cliente y el certificado con el nombre ‘ayuale’:

  # ./build-key ayuale

Presionamos ‘Enter’ y respondemos ‘y’ (dos veces) para confirmar la generación de la clave.

La clave y el certificado se han generado en el directorio ‘keys’. Ahora hacemos una copia del directorio ‘keys’ y lo colocamos en el directorio ‘openvpn’.

  # cp -r keys/ /etc/openvpn/

Paso 4: configurar OpenVPN

En este paso, configuraremos OpenVPN para que se ejecute en el protocolo UDP, utilizando el puerto 1194 (default) para la conexión del cliente. Creamos el nuevo archivo de configuración server.conf en el directorio OpenVPN.

  # cd /etc/openvpn/
  # vi server.conf

Pegamos la configuración a continuación:

# Cambiar con el puerto que indicamos a openvpn
port 1194
# Podemos usar UPD o TCP
proto udp
# 'dev tun' creará un túnel IP enrutado.
dev tun
#ca certificate
ca /etc/openvpn/keys/ca.crt
#Server Certificate
cert /etc/openvpn/keys/server.crt
#Server Key hay mantenerlo en secreto
key /etc/openvpn/keys/server.key
# Ver el tamaño del dh key en /etc/openvpn/keys/
dh /etc/openvpn/keys/dh2048.pem
# La IP interna se obtendrá cuando ya esté conectado
server 10.10.2.0 255.255.255.0
# esta línea redirigirá todo el tráfico a través de nuestro OpenVPN
push "redirect-gateway def1"
# Proporcione servidores DNS al cliente, puede usar goolge DNS
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
# Permitir que varios clientes se conecten con la misma clave
duplicate-cn
keepalive 20 60
comp-lzo
persist-key
persist-tun
daemon
#  registro de estado
status /var/log/openvpn/openvpn-status.log
# Habilitar el log
log-append /var/log/openvpn/openvpn.log
# Nivel de Log
verb 3

Guarde el archivo y salga del editor.

A continuación, creamos un nuevo directorio y archivo para el registro de los de openvpn:

  # mkdir -p /var/log/openvpn/
  # touch /var/log/openvpn/{openvpn,openvpn-status}.log

Paso 5: configurar SuSEfirewall2

SuSEfirewall2 es un script para generar reglas de iptables basadas en el archivo ‘/etc/sysconfig/SuSEfirewall2’. Instalaremos SuSEfirewall2 y luego configuraremos el puerto para acceder a OpenVPN, luego habilitaremos NAT con un script iptables para OpenVPN.

Instalamos SuSEfirewall2 con el comando zypper:

  # zypper in SuSEfirewall2

Ahora, vamos al directorio sysconfig y editamos el archivo de configuración SuSEfirewall2:

  # cd /etc/sysconfig/
  # vi SuSEfirewall2

Línea 138 – Habilitar ruta.

FW_ROUTE="yes"

Linea 257 – Habilitar el pure TCP  22 para acceso SSH desde fuera de la red.

FW_SERVICES_EXT_TCP="22"

Linea 271 – Habilitar el puerto udp 2034, para acceso de clientes openvpn

FW_SERVICES_EXT_UDP="1194"

Línea 901: Habilite las reglas personalizadas SuSEfirewall2.

FW_CUSTOMRULES="/etc/sysconfig/scripts/SuSEfirewall2-custom"

Guardamos y salimos de vi.

A continuación, editamos las reglas personalizadas de SuSEfirewall2 en el directorio de scripts.

  # cd /etc/sysconfig/scripts/
  # vi SuSEfirewall2-custom

Dentro de la directiva ‘fw_custom_after_chain_creation’, pegamos las nuevas reglas de iptables para OpenVPN:

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.10.2.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.10.2.0/24 -o eth0 -j MASQUERADE

Guardamos y salimos del editor.

Nota:
IP 10.10.2.0/24 es la red del archivo de configuración server.conf OpenVPN.

Ahora podemos habilitar el reenvío agregando esta nueva línea de configuración al archivo sysctl.conf.

  # vi /etc/sysctl.conf

Pegamos la configuración a continuación:

net.ipv4.ip_forward = 1

Guardamos y salimos del editor.

Nota:
Si ya tiene la línea en el archivo, cambie el valor de ‘0’ a ‘1’ en lugar de agregar una nueva línea.

Ahora ejecutamos el siguiente comando para aplicar el cambio de configuración.

  # sysctl -p

Iniciamos o reiniciamos el SuSEfirewall2 y el servidor OpenVPN:

  # systemctl start SuSEfirewall2
  # systemctl start openvpn@server

Si tenemos algún un error, podemos ver el mensaje de error detallado en el registro de OpenVPN.

Agregamos los servicios al inicio del sistema:

  # systemctl enable SuSEfirewall2
  # systemctl enable openvpn@server

Paso 6: configurar el cliente

Descargamos la clave del cliente y el certificado del directorio de claves a su computadora local. Puede usar el comando scp o sftp, estoy aquí usando scp:

Este comando que debe ejecutarse en la computadora local.

  # scp root@serverip:/etc/openvpn/keys/ca.crt ~/myvpn/
  # scp root@serverip:/etc/openvpn/keys/ayuale.crt ~/myvpn/
  # scp root@serverip:/etc/openvpn/keys/ayuale.key ~/myvpn/

En el directorio myvpn, cree un nuevo archivo de configuración para el cliente ‘ayuale.ovpn’.

  # cd ~/myvpn/
  # vi ayuale.ovpn

Luego, pegamos la siguiente configuración:

client
remote [IP_DEL_SERVIDOR] 1194
ca ./ca.crt
cert ./ayuale.crt
key ./ayuale.key
comp-lzo yes
cipher AES-256-CBC
dev tun
proto udp
nobind
auth-nocache
script-security 2
persist-key
persist-tun
remote-cert-tls server

Guardamos y salimos el edito.

Para conectarse a nuestra VPN, se puede instalar un cliente VPN o, si está usando Linux, puede usar el ‘Network-Manager’. Si queremos probar la VPN con una terminal, podemos usar el siguiente comando:

  # cd ~/myvpn/
  # sudo openvpn –config ayuale.ovpn

Clientes

Para Mac: Tunnelblick
Para Windows: OpenVPN Connect

Referencias

https://en.opensuse.org/SDB:OpenVPN_Installation_and_Setup