Cómo instalar y configurar el servidor OpenVPN con clientes Linux y Windows en RHEL / CentOS 7


Una red privada virtual es una solución tecnológica que se utiliza para proporcionar privacidad y seguridad para las conexiones entre redes. El caso más conocido consiste en personas que se conectan a un servidor remoto con tráfico que pasa por una red pública o insegura (como Internet).

Imagine los siguientes escenarios:

En este artículo explicaremos cómo configurar un servidor VPN en una caja RHEL/CentOS 7 usando OpenVPN, una aplicación de tunelización robusta y altamente flexible que usa las características de encriptación, autenticación y certificación de la biblioteca OpenSSL. Para simplificar, solo consideraremos un caso en el que el servidor OpenVPN actúa como una puerta de enlace segura a Internet para un cliente.

Para esta configuración, hemos utilizado tres máquinas, la primera actúa como servidor OpenVPN y las otras dos (Linux y Windows) actúan como clientes para conectarse al servidor OpenVPN remoto.

Nota: Las mismas instrucciones también funcionan en sistemas RHEL/CentOS 6 y Fedora.

Instalación del servidor OpenVPN

Para instalar OpenVPN en un servidor RHEL/CentOS 7, primero deberá habilitar el repositorio EPEL y luego instalar el paquete, junto con easy-rsa, un pequeño paquete de administración de claves RSA que se utiliza principalmente para la administración de claves y también para crear certificados web.

# yum update && yum install epel-release
# yum install openvpn easy-rsa

Cuando se complete la instalación, diríjase al directorio de archivos de configuración de muestra:

# cd /usr/share/doc/openvpn-*/sample/sample-config-files/

y copie el archivo server.conf en/etc/openvpn:

# cp server.conf /etc/openvpn

Ahora estamos listos para comenzar a configurar el servidor.

Generar claves y certificados

El paquete easy-rsa proporciona varios scripts como utilidades, ubicados dentro de /usr/share/easy-rsa/2.0 después de la instalación, para generar claves y certificados. Para nuestra conveniencia, vamos a copiar esos archivos en/etc/openvpn/rsa (primero debe crear este directorio). Ingrese y si se le solicita que sobrescriba los archivos existentes:

# mkdir /etc/openvpn/rsa
# cp –rf /usr/share/easy-rsa/2.0/* /etc/openvpn/rsa

A continuación, usaremos los parámetros en/etc/openvpn/rsa/vars para indicar los valores de nuestras claves y certificados. Cambie los valores según sus necesidades (los campos se explican por sí mismos):

export KEY_SIZE=2048
export CA_EXPIRE=365
export KEY_EXPIRE=365
export KEY_COUNTRY=AR
export KEY_PROVINCE=SL
export KEY_CITY="VillaMercedes"
export KEY_ORG="Tecmint.com"
export KEY_EMAIL="[email protected]"
export KEY_NAME="GabrielCanepa"

Y obtenga el archivo para exportar las variables y sus valores al entorno actual (los necesitará en el siguiente paso). Verá un mensaje que le informa el propósito del script de limpieza total (también presente en el mismo directorio):

# source ./vars

Ahora ejecute los siguientes scripts desde el directorio de claves, en el orden especificado.

# ./clean-all

El script build-ca creará una Autoridad de certificación (certificado + clave) en/etc/openvpn/rsa/keys. Presione Enter para aceptar los valores predeterminados:

./build-ca

A continuación, crearemos la clave y el certificado para el propio servidor. Como antes, acepte los valores predeterminados y luego presione y para confirmar la firma del certificado:

# ./build-key-server server

A continuación, genere el archivo Diffie-Hellman que se usa para el intercambio de información para complementar RSA (esto llevará bastante tiempo). Esto creará un archivo llamado dh2048.pem dentro de/etc/openvpn/rsa/keys:

./build-dh

Finalmente, cree archivos de certificado separados para cada cliente que usará su servidor VPN (cambie el nombre de cliente a su elección):

# ./build-key client

El paso anterior creará un certificado y una clave para un cliente. Siga los mismos pasos que antes para completar el proceso. Más adelante en este tutorial, descargaremos estos archivos a un cliente que los usará para conectarse al servidor VPN.

Configuración del servidor OpenVPN

Ahora profundicemos en /etc/openvpn/server.conf:

1. Especifique la longitud de los parámetros Diffie-Hellman. No utilice un valor inferior a 2048 si no desea exponerse a amenazas de seguridad:

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

2. Todo el tráfico de IP (como la navegación web y las búsquedas de DNS) debe pasar por la VPN. Asegúrese de que la siguiente línea no esté comentada:

push "redirect-gateway def1 bypass-dhcp"

3. Como consecuencia del n. ° 2, debe especificar al menos dos servidores DNS que se utilizarán para resolver nombres. Los predeterminados los proporciona opendns.org y puede usarlos o los de Google (8.8.8.8 y 8.8.4.4):

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

4. Finalmente, como medida de seguridad, nos aseguraremos de que openvpn se ejecute con el mínimo de privilegios cambiando el usuario y el grupo a nadie:

user nobody
group nobody

También necesitamos permitir el tráfico vpn a través del firewalld y habilitar el enmascaramiento:

# firewall-cmd --permanent --add-service=openvpn
# firewall-cmd --add-service=openvpn
# firewall-cmd --permanent --add-masquerade
# firewall-cmd --add-masquerade

Y copie el certificado y los archivos de clave en/etc/openvpn (el siguiente comando asume que su directorio de trabajo actual es/etc/openvpn/rsa/keys):

# cp ca.crt server.crt server.key ../../

Luego habilite el servicio:

# systemctl -f enable [email protected]
# systemctl start [email protected]

En este punto, es una buena idea verificar el estado del servicio.

# systemctl -l status [email protected] 

Si no pudo comenzar,

# journalctl --xn

proporcionará la información de depuración necesaria para solucionar cualquier problema.