Introducción
OpenVPN es una solución de red privada virtual (VPN) de código abierto que permite crear conexiones seguras entre dispositivos, protegiendo el tráfico de red contra intercepciones. Su flexibilidad y soporte para cifrado fuerte lo hacen ideal para empresas y usuarios que necesitan acceso remoto seguro o interconexión entre redes.
Este artículo detalla el proceso de instalación y configuración de un servidor y un cliente OpenVPN en Linux, abordando también la creación de certificados digitales utilizando el script Easy-RSA. El proceso de generación de certificados se presentará de forma breve y técnica, con enfoque en la aplicación práctica para el funcionamiento de OpenVPN.
Para un entendimiento más profundo sobre la gestión de certificados, incluyendo aspectos conceptuales, criterios de seguridad y detalles sobre el uso de Easy-RSA, recomendamos la lectura del artículo complementario:
Entorno de instalación
Las configuraciones demostradas en este artículo fueron probadas en Slackware Linux 15.0 (64 bits), utilizando OpenVPN 2.5.5 y Easy-RSA 3.3.0.
Este tutorial puede adaptarse a otras distribuciones de Linux con pocas modificaciones, principalmente en el comando de instalación de OpenVPN y en el método de inicio automático del servicio. Siempre que sea posible, se presentarán comandos específicos para diferentes distribuciones, aunque estos comandos no han sido probados.
En el resto, los pasos para la descarga de Easy-RSA, configuraciones y creación de certificados deben ser los mismos en la mayoría de las distribuciones.
Instalación de OpenVPN
OpenVPN está disponible en los repositorios oficiales de Slackware.
# bash
# Slackware
slackpkg install openvpn
Comandos para instalación en otras distribuciones:
# bash
# Debian y Ubuntu sudo apt install openvpn # Fedora sudo dnf install openvpn # Arch Linux sudo pacman -S openvpn # openSUSE sudo zypper install openvpn
Descarga de Easy-RSA
Easy-RSA es un script que facilita la creación y gestión de claves y certificados necesarios para la comunicación segura entre cliente y servidor. El script debe ejecutarse como un usuario común, sin necesidad de permisos administrativos.
Por razones de seguridad, Easy-RSA se instalará en una memoria USB, cuyo camino será representado aquí por el punto de montaje /mnt/usb. Utilizar una memoria USB permite mantener la estructura de gestión de certificados fuera de línea, reduciendo riesgos de exposición de claves privadas. Para más detalles sobre las prácticas de seguridad involucradas, consulte el artículo mencionado en la introducción.
Para descargar Easy-RSA directamente en la memoria USB, utilice los siguientes comandos:
$ bash
cd /mnt/usb git clone https://github.com/OpenVPN/easy-rsa
Configurando EasyRSA
Antes de iniciar, es necesario ajustar el valor de algunas variables predeterminadas de los scripts para garantizar la consistencia de los datos durante la emisión de certificados. Haga una copia del archivo de ejemplo vars.example a vars:
$ bash
cd easy-rsa/easyrsa3/ cp vars.example vars vi vars
Ahora, personalice el archivo vars con su editor favorito. Elimine el comentario de las líneas siguientes y configure con sus informaciones:
vars
# Campos organizacionales set_var EASYRSA_REQ_COUNTRY "MX" # País set_var EASYRSA_REQ_PROVINCE "Jalisco" # Estado set_var EASYRSA_REQ_CITY "Guadalajara" # Ciudad set_var EASYRSA_REQ_ORG "Mi empresa" # Nombre de la organización set_var EASYRSA_REQ_EMAIL "contacto@miempresa.com" # Correo electrónico set_var EASYRSA_REQ_OU "Departamento de TI" # Unidad Organizacional # Expiración (en días) set_var EASYRSA_CA_EXPIRE 7300 # Validez de la CA set_var EASYRSA_CERT_EXPIRE 3650 # Validez de los certificados emitidos
El primer conjunto de variables se refiere a los campos organizacionales, valores que se incorporarán a los certificados emitidos. El segundo conjunto de variables define el tiempo de expiración del certificado de la (CA) y de los certificados generados para el servidor y clientes de la VPN.
Las demás variables presentes en el archivo vars solo deben ser alteradas con conocimiento previo de sus funciones y no serán abordadas en este artículo.
Ejecutando Easy-RSA
El script easyrsa está ubicado en easy-rsa/easyrsa3, a partir del directorio inicial clonado con el comando git. El formato básico de ejecución del comando es:
./easyrsa comando [ opciones ]
Donde comando es el nombre del comando a ejecutar y opciones son los parámetros que personalizan el comando. Para obtener ayuda sobre un comando específico use:
./easyrsa help [ comando ]
Cuando se ejecuta sin ningún parámetro, el script ./easyrsa mostrará una lista de comandos disponibles.
Iniciando la PKI
En español, PKI significa Infraestructura de Claves Públicas. Este paso crea la estructura básica de directorios necesarios para la gestión de las claves y certificados. Ejecute el comando ./easyrsa init-pki.
$ bash
# Acceda al directorio de EasyRSA cd /mnt/usb/easy-rsa/easyrsa3/ # Inicie la PKI ./easyrsa init-pki
Con la Infraestructura de Claves Públicas creada, está listo para crear una Autoridad Certificadora (CA). Observe que se creó una nueva carpeta llamada pki/ en la cual se almacenarán, entre otras cosas, las solicitudes, las claves privadas y los certificados emitidos.
Creando su propia Autoridad Certificadora (CA)
Una CA es la entidad responsable de emitir y gestionar certificados digitales, que garantizan la seguridad y autenticidad en las comunicaciones en línea.
Durante la creación de la clave privada de la CA, se solicitará una contraseña a partir de la cual se generará el cifrado del archivo. Ingrese una contraseña fuerte y recuérdela, ya que será necesaria al firmar nuevos certificados.
También será necesario ingresar un nombre (Common Name) que se usará solo para visualización. Elija un nombre para representar su CA; opciones comunes incluyen: nombre del usuario, del host o del servidor.
Ejecute el comando ./easyrsa build-ca:
# bash
# Acceda al directorio de EasyRSA cd /mnt/usb/easy-rsa/easyrsa3/ # Cree la CA ./easyrsa build-ca
Si todo ocurre correctamente, será posible visualizar algunos nuevos archivos dentro de la carpeta pki/, entre ellos el certificado ca.crt.
Generando la clave TLS y los parámetros Diffie-Hellman (DH)
Antes de continuar con la creación de las claves y certificados para el cliente y el servidor de la VPN, aún son necesarios dos archivos más. La clave TLS impide que terceros interfieran o descubran que la VPN está en operación, mientras que los parámetros Diffie-Hellman (DH) permiten que OpenVPN cree un secreto compartido sin que la clave real sea transmitida.
$ bash
# Genera la clave TLS ./easyrsa gen-tls-crypt-key # Genera los parámetros Diffie-Hellman (DH) ./easyrsa gen-dh
La clave TLS podrá encontrarse en pki/private/easyrsa-tls.key y el archivo que contiene los parámetros DH en pki/dh.pem.
Escenario ficticio
Para ilustrar los próximos ejemplos, consideremos un escenario ficticio en el que empleados de una oficina trabajan remotamente y necesitan conectarse a la red de la empresa para desempeñar sus funciones.
En este contexto, el servidor OpenVPN será instalado en la oficina, mientras que los clientes VPN serán configurados en los dispositivos de los empleados en sus residencias.
Generando clave y certificado para el servidor
En este paso, se generarán una clave privada y una solicitud para el servidor de la VPN. La solicitud, al ser firmada por la CA, se convertirá en un certificado. Se usará el parámetro nopass para deshabilitar el uso de contraseña en el cifrado de la clave.
El uso de una contraseña exige que se ingrese cada vez que se inicie el servicio de VPN, lo que puede no ser viable en servidores remotos o que no tengan un teclado de fácil acceso. El comando sigue el formato:
./easyrsa gen-req [ nombre-del-servidor ] [ opciones ]
Confirme el nombre del servidor cuando se solicite durante el proceso.
$ bash
./easyrsa gen-req oficina nopass
La solicitud fue generada en pki/reqs/oficina.req y la clave privada está en pki/private/oficina.key.
Firme la solicitud con el siguiente comando. Responda yes cuando se solicite para confirmar los detalles de la solicitud e ingrese la contraseña de la CA para concluir la firma.
$ bash
./easyrsa sign-req server oficina
El certificado estará disponible en pki/issued/oficina.crt.
Configurando el servidor
A partir de este momento, todos los comandos deben ejecutarse como root o usando sudo. Copie los siguientes archivos generados por Easy-RSA al directorio de configuración de OpenVPN:
# bash
cp /mnt/usb/easy-rsa/easyrsa3/pki/ca.crt /etc/openvpn/certs/ cp /mnt/usb/easy-rsa/easyrsa3/pki/issued/oficina.crt /etc/openvpn/certs/ cp /mnt/usb/easy-rsa/easyrsa3/pki/dh.pem /etc/openvpn/certs/ cp /mnt/usb/easy-rsa/easyrsa3/pki/private/oficina.key /etc/openvpn/keys/ cp /mnt/usb/easy-rsa/easyrsa3/pki/private/easyrsa-tls.key /etc/openvpn/keys/
En Slackware, el directorio de configuración de OpenVPN contiene un enlace a archivos de ejemplo. Haga una copia del archivo server.conf para la carpeta de OpenVPN y renómbrelo a oficina.conf. Si utiliza otra distribución y no encuentra este archivo, se proporcionará una versión completa del archivo de configuración.
# bash
cd /etc/openvpn/ cp sample-config-files/server.conf oficina.conf
Cree el directorio ccd/ dentro de la carpeta de OpenVPN. Se usará para configuraciones específicas de los clientes:
# bash
mkdir /etc/openvpn/ccd
Abra el archivo oficina.conf con su editor de texto favorito. A continuación, un ejemplo comentado de un archivo de configuración funcional para un servidor OpenVPN:
oficina.conf
############################################### # Ejemplo de configuración para un servidor # # OpenVPN con soporte para múltiples clientes # ############################################### local x.x.x.x # Dirección IP local en la que OpenVPN debe escuchar port 1194 # Puerto TCP/UDP utilizado por OpenVPN proto udp # Protocolo de transporte (TCP o UDP) dev tun # Tipo de túnel: enrutado (tun) o Ethernet (tap) ca /etc/openvpn/certs/ca.crt # Certificado de la CA dh /etc/openvpn/certs/dh.pem # Parámetros Diffie-Hellman (DH) cert /etc/openvpn/certs/oficina.crt # Certificado del servidor key /etc/openvpn/keys/oficina.key # Clave privada del servidor tls-auth /etc/openvpn/keys/easyrsa-tls.key 0 # Clave TLS (0 en el servidor y 1 en el cliente) ;crl-verify /etc/openvpn/crl.pem # Lista de Certificados Revocados topology subnet # Subred /24 (255.255.255.0) server 10.8.0.0 255.255.255.0 # Define la red VPN, el servidor será 10.8.0.1 ifconfig-pool-persist ipp.txt # Registro de las IPs asignadas a los clientes # Envía una ruta a los clientes, # permitiendo acceso a las redes internas push "route 192.168.10.0 255.255.255.0" # Define un directorio para configuraciones # específicas de cada cliente. Permite # asignar IPs fijas y rutas. client-config-dir ccd # Elimine el comentario para permitir que # los clientes se comuniquen entre sí ;client-to-client # Envía un ping cada 10 segundos y considera # al cliente desconectado después de 120 segundos keepalive 10 120 cipher AES-256-GCM # Algoritmo de cifrado predeterminado data-ciphers AES-256-GCM:AES-128-GCM:AES-256-CBC # Algoritmos soportados ;data-ciphers-fallback AES-256-CBC # Soporte para versiones antiguas # Desactiva la compresión por motivos de seguridad allow-compression no # Número máximo de clientes conectados simultáneamente max-clients 100 # Reduce privilegios después de la inicialización user nobody group nobody # Mejora la estabilidad de la conexión persist-key # Evita recargar las claves después de una reconexión persist-tun # Mantiene la interfaz VPN activa durante una reconexión # Ruta para los archivos de registro status /var/log/openvpn-status.log log-append /var/log/openvpn.log verb 3 # Nivel de detalle de los registros mute 20 # Silencia mensajes repetidos en el registro después de 20 apariciones # Notifica a los clientes cuando el servidor es # reiniciado para que puedan reconectarse explicit-exit-notify 1
Puede habilitar el servicio solo para IPv4 usando proto udp4 o solo para IPv6 con proto udp6. Si prefiere TCP, utilice proto tcp4 o proto tcp6.
Es posible configurar múltiples servidores OpenVPN simultáneamente. Para ello, basta con generar los certificados correspondientes y crear un archivo de configuración separado para cada servidor dentro del directorio de OpenVPN. Por ejemplo, puede tener oficina.conf, rh.conf, ti.conf, etc. En Slackware, el script de inicio de OpenVPN cargará automáticamente todos los archivos de configuración que terminen en .conf dentro de /etc/openvpn.
La entrada ;crl-verify /etc/openvpn/crl.pem se refiere a la lista de certificados revocados. Más información sobre este recurso puede encontrarse aquí.
Permisos de archivos y directorios
Para aumentar la seguridad, es necesario definir permisos adecuados para los archivos y directorios dentro de /etc/openvpn, garantizando que solo los usuarios autorizados tengan acceso.
# bash
# Define root como propietario de los # archivos y directorios de OpenVPN chown -R root:root /etc/openvpn # Solo root puede leer y escribir # en los archivos de configuración chmod 600 *.conf # Define root como propietario y # asigna el grupo nobody a la carpeta # ccd/ y al archivo ipp.txt chown -R root:nobody ccd/ ipp.txt # Solo lectura para root en las # claves y certificados chmod -R 400 keys/ certs/ # Acceso total para root, lectura # y ejecución para nobody en ccd/ chmod 750 ccd/ # Permite lectura y escritura para # root y nobody en el archivo ipp.txt chmod 660 ipp.txt
En Linux, las carpetas necesitan el permiso de ejecución (x) para ser accedidas, excepto para el usuario root. Por eso, los directorios que almacenan claves y certificados están configurados como solo lectura.
Las claves, los certificados y los archivos de configuración principales (.conf) se leen antes de que los privilegios se reduzcan al usuario nobody. Por lo tanto, estos archivos deben pertenecer al usuario y grupo root. Las claves y certificados solo necesitan permiso de lectura (400). Los archivos de configuración principales (.conf) necesitan permiso de lectura y escritura (600) para root.
El usuario nobody necesita permiso de lectura y ejecución en el directorio ccd/ para acceder a los archivos de configuración específicos de los clientes. Además, necesita permiso de lectura y escritura en el archivo ipp.txt, que registra las direcciones IP asignadas.
Para verificar la estructura de directorios y los permisos aplicados, utilice el comando:
# bash
tree -ugp ├── [drwxr-x--- root nobody ] ccd ├── [dr-------- root root ] certs │ ├── [-r-------- root root ] ca.crt │ ├── [-r-------- root root ] dh.pem │ └── [-r-------- root root ] oficina.crt ├── [-rw------- root root ] oficina.conf ├── [-rw-rw---- root nobody ] ipp.txt ├── [dr-------- root root ] keys │ ├── [-r-------- root root ] easyrsa-tls.key │ └── [-r-------- root root ] oficina.key
Iniciando el servidor OpenVPN
Los siguientes comandos son específicos para Slackware. Si está utilizando otra distribución, consulte la documentación correspondiente, ya que el proceso puede variar.
Antes de iniciar el servicio, conceda permiso de ejecución al script de inicio de OpenVPN:
# bash
chmod +x /etc/rc.d/rc.openvpn
Al definir este permiso, el script se ejecutará automáticamente al iniciar el sistema.
Comandos para manipular el servicio:
# bash
# Inicia el servicio /etc/rc.d/rc.openvpn start # Detiene el servicio /etc/rc.d/rc.openvpn stop # Reinicia el servicio /etc/rc.d/rc.openvpn restart
Consultando los registros
Verificar los registros es esencial para garantizar que OpenVPN esté funcionando correctamente. Para facilitar la depuración, se recomienda abrir múltiples terminales y monitorear los registros mientras inicia y detiene el servicio.
Para seguir los registros en tiempo real, utilice los siguientes comandos:
# bash
# Registro del servicio tail -f /var/log/openvpn.log # Registro de las conexiones tail -f /var/log/openvpn-status.log # Registro del sistema tail -f /var/log/syslog
Los comandos anteriores muestran nuevos mensajes a medida que se registran, hasta que se interrumpan manualmente.
Depurando errores
Si ocurre un problema en la configuración, OpenVPN generalmente indicará el error en los registros. Por ejemplo, si el directorio ccd/ no se creó o si sus permisos no permiten el acceso del usuario nobody, puede recibir el siguiente mensaje:
Options error: --client-config-dir fails with 'ccd': No such file or directory (errno=2)
Verifique los registros para identificar y corregir errores durante la inicialización del servicio. Si OpenVPN se inicia correctamente, el archivo openvpn.log mostrará el siguiente mensaje: Initialization Sequence Completed.
Importante
En este ejemplo, OpenVPN fue configurado para reducir los privilegios después de la inicialización, cambiando al usuario nobody. Sin embargo, al detener OpenVPN en Slackware, tanto en el servidor como en el cliente, ocurren errores de permisos al eliminar IPs y rutas. Estas fallas generan mensajes como los siguientes en los registros:
/var/log/openvpn.log
/usr/sbin/ip addr del dev tun0 10.8.0.1/24 RTNETLINK answers: Operation not permitted Linux ip addr del failed: external program exited with error status: 2
Para solucionar este problema, se probaron varios enfoques sin éxito, como la ejecución de scripts externos mediante las opciones down y down-pre junto con la directiva script-security, la configuración de sudo para permitir que el usuario nobody ejecute el comando ip y el uso del plugin openvpn-plugin-down-root.so.
La buena noticia es que, incluso con los mensajes de error, las acciones necesarias se ejecutan correctamente: las IPs y rutas se eliminan y la interfaz VPN se desactiva como se esperaba. Durante las pruebas realizadas para este material, no se identificaron problemas funcionales derivados de este error, por lo que la opción adoptada fue simplemente ignorarlo.
Si desea evitar estos mensajes, una alternativa es ejecutar OpenVPN directamente como root, sin reducir los privilegios. Sin embargo, esto puede tener implicaciones de seguridad.
Verificando la VPN
Confirme si la interfaz de la VPN fue creada:
# bash
ifconfig
tun0: flags=4305[UP,POINTOPOINT,RUNNING,NOARP,MULTICAST] mtu 1500
inet 10.8.0.1 netmask 255.255.255.0 destination 10.8.0.1
Si la interfaz está activa, su servidor está funcionando y listo para recibir conexiones. Ahora, vamos a la configuración del cliente.
Generando clave y certificado para el cliente
En este paso, se generará una clave privada y una solicitud de certificado para el cliente de la VPN. Ejecute los comandos desde el directorio base de Easy-RSA. En el ejemplo, usamos /mnt/usb/easy-rsa/easyrsa3/. Cuando se solicite, confirme el nombre del cliente. Aquí, utilizaremos casa.
$ bash
./easyrsa gen-req casa nopass
Esto generará la solicitud en pki/reqs/casa.req y la clave privada en pki/private/casa.key.
Firme la solicitud usando la clave privada de la CA. Responda yes cuando se solicite para confirmar los detalles e ingrese la contraseña de la CA cuando se solicite:
$ bash
./easyrsa sign-req client casa
El certificado del cliente se generará en pki/issued/casa.crt.
Configurando el cliente
Copie los archivos generados por Easy-RSA al directorio de configuración de OpenVPN. En este artículo, los archivos están almacenados en una memoria USB. Si los transfiere a un lugar remoto, utilice métodos seguros como SSH (scp, sftp) o HTTPS:
# bash
cp /mnt/usb/easy-rsa/easyrsa3/pki/ca.crt /etc/openvpn/certs/ cp /mnt/usb/easy-rsa/easyrsa3/pki/issued/casa.crt /etc/openvpn/certs/ cp /mnt/usb/easy-rsa/easyrsa3/pki/private/casa.key /etc/openvpn/keys/ cp /mnt/usb/easy-rsa/easyrsa3/pki/private/easyrsa-tls.key /etc/openvpn/keys/
Cree el archivo de configuración casa.conf en el directorio de configuración de OpenVPN. Puede usar el archivo de ejemplo client.conf, disponible en sample-config-files, como base.
Abra el archivo casa.conf con su editor favorito.
# bash
vi /etc/openvpn/casa.conf
A continuación, un ejemplo comentado de un archivo de configuración funcional para un cliente OpenVPN:
casa.conf
#################################################### # Ejemplo de configuración para un cliente OpenVPN # #################################################### client # Configura como cliente dev tun # Utiliza un túnel enrutado (tun) proto udp # TCP o UDP? remote 10.0.0.68 1194 # IP y puerto del servidor ca /etc/openvpn/certs/ca.crt # Certificado de la CA cert /etc/openvpn/certs/casa.crt # Certificado del cliente key /etc/openvpn/keys/casa.key # Clave privada del cliente tls-auth /etc/openvpn/keys/easyrsa-tls.key 1 # Clave TLS (1 en el cliente) # Si se usa un nombre de dominio en el parámetro # "remote", esta opción hace que el cliente # intente resolverlo indefinidamente resolv-retry infinite # Usa puertos aleatorios en la conexión con el servidor nobind # Reduce los privilegios después de la inicialización user nobody group nobody # Mejora la estabilidad de la conexión persist-key # Mantiene las claves cargadas después de una reconexión persist-tun # Mantiene la interfaz de red activa durante una reconexión # Exige que el certificado del servidor sea validado correctamente remote-cert-tls server # Define el algoritmo de cifrado para la comunicación cipher AES-256-GCM # Ruta para los archivos de registro status /var/log/openvpn-status.log log-append /var/log/openvpn.log verb 3 # Nivel de detalle de los mensajes del registro mute 20 # Silencia mensajes repetidos en el registro después de 20 ocurrencias
Iniciando el cliente OpenVPN
Conceda permiso de ejecución al script de inicio de OpenVPN:
# bash
chmod +x /etc/rc.d/rc.openvpn
Con este permiso, el script podrá ejecutarse manualmente y también se iniciará automáticamente junto con el sistema.
Comandos para manipular el servicio:
# bash
# Inicia el servicio /etc/rc.d/rc.openvpn start # Detiene el servicio /etc/rc.d/rc.openvpn stop # Reinicia el servicio /etc/rc.d/rc.openvpn restart
Consultando los registros
Al igual que en el servidor, los registros son esenciales para diagnosticar problemas y verificar si el cliente OpenVPN está funcionando correctamente.
Utilice los siguientes comandos para monitorear los registros en tiempo real:
# bash
# Registro del servicio tail -f /var/log/openvpn.log # Registro de las conexiones tail -f /var/log/openvpn-status.log # Registro del sistema tail -f /var/log/syslog
Verificando la VPN
Si el mensaje Initialization Sequence Completed aparece en el archivo openvpn.log, esto indica que el cliente se inició correctamente. Para confirmar que la VPN está funcionando como se espera, verifique si la interfaz de la VPN fue creada y si las rutas configuradas con el comando push en el servidor se aplicaron correctamente:
# bash
# Verifica si la interfaz tun0 fue creada ifconfig tun0: flags=4305[UP,POINTOPOINT,RUNNING,NOARP,MULTICAST] mtu 1500 inet 10.8.0.2 netmask 255.255.255.0 destination 10.8.0.2 # Lista las rutas de red configuradas route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.10.0 10.8.0.1 255.255.255.0 UG 0 0 0 tun0
Si todo está correcto, su túnel VPN está activo y listo para usar.
Conclusión
Este texto ofrece una guía detallada para la configuración de un túnel OpenVPN en Linux, utilizando Easy-RSA para la gestión de certificados y claves. Cubre desde la instalación de los paquetes necesarios hasta la creación y firma de certificados, configuración del servidor y cliente OpenVPN, ajustes de permisos de archivos y directorios, y verificación de registros para asegurar el funcionamiento correcto del servicio.
Para un entendimiento más profundo sobre la gestión de certificados, incluyendo aspectos conceptuales, criterios de seguridad y detalles sobre el uso de Easy-RSA, recomendamos la lectura del artículo complementario:
Referencias
Artículos antiguos de este mismo sitio sirvieron como punto de partida para la elaboración de este texto. También se utilizaron los manuales (man page) disponibles en Slackware Linux.
- https://openvpn.net/community-resources/how-to/
- https://easy-rsa.readthedocs.io/en/latest/
- https://telazul.drusian.com.br/pt/artigo/configuracao-do-openvpn-server-e-easy-rsa-3-no-slackware
- https://telazul.drusian.com.br/pt/artigo/configuracao-do-openvpn-cliente-e-easy-rsa-3-no-slackware