Configurar servidor OpenVPN en Rocky Linux 8
Instalar repositorio EPEL
Los últimos paquetes de OpenVPN son proporcionados por los repositorios de EPEL en Rocky Linux 8 y otros derivados similares. EPEL se puede instalar en Rocky Linux 8 ejecutando el siguiente comando;
dnf install epel-release -y
Instalar OpenVPN en Rocky Linux 8
Una vez que los repositorios de EPEL estén en su lugar, ahora puede instalar el paquete OpenVPN en Rocky Linux 8 ejecutando el siguiente comando;
dnf install openvpn
Instalar la utilidad Easy-RSA CA en Rocky Linux 8
El paquete Easy-RSA es una utilidad de CA basada en shell que se utiliza para generar pares de claves SSL que se utilizan para proteger las conexiones VPN.
dnf install easy-rsa
Crear infraestructura de clave pública OpenVPN
El primer paso para configurar un servidor OpenVPN es crear una PKI que consta de claves públicas y privadas para el servidor OpenVPN y la conexión de clientes, y un certificado maestro de autoridad certificadora y una clave privada para firmar el servidor OpenVPN y los certificados de cliente. Si es posible, debe crear la PKI en un servidor separado que ejecute OpenVPN por motivos de seguridad.
Inicialice la PKI
Easy-RSA se utiliza para la gestión de PKI. Los scripts de Easy-RSA se instalan en /usr/share/easy-rsa
directorio.
Para asegurarse de que Easy-RSA no sobrescriba cualquier configuración realizada en caso de una actualización, copie los scripts en un directorio diferente, preferiblemente en /etc
directorio.
mkdir /etc/easy-rsa
cp -air /usr/share/easy-rsa/3/* /etc/easy-rsa/
Una vez que los scripts estén en su lugar, navegue hasta el directorio e inicialice la PKI.
cd /etc/easy-rsa/
./easyrsa init-pki
Salida de comando de muestra;
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/easy-rsa/pki
Generar el certificado y la clave de la autoridad certificadora (CA)
A continuación, genere el certificado CA y la clave que se usarán para firmar los certificados ejecutando los siguientes comandos en el directorio Easy-RSA anterior.
./easyrsa build-ca
Esto le pedirá la frase de contraseña de la clave de CA y el nombre común del servidor.
Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 Enter New CA Key Passphrase: Re-Enter New CA Key Passphrase: Generating RSA private key, 2048 bit long modulus (2 primes) ........................................+++++ ....................................................+++++ e is 65537 (0x010001) 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. ----- Common Name (eg: your user, host, or server name) [Easy-RSA CA]:Kifarunix-demo CA CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /etc/easy-rsa/pki/ca.crt
El archivo CA es /etc/easy-rsa/pki/ca.crt
.
Generar parámetros Diffie Hellman
Mientras se encuentra dentro del mismo directorio Easy-RSA que se muestra arriba, ejecute el siguiente comando para generar un archivo de clave Diffie-Hellman que se puede usar para el intercambio de claves durante el protocolo de enlace TLS con los clientes que se conectan.
./easyrsa gen-dh
El comando tardará algún tiempo en completarse. Luego almacena los parámetros DH en /etc/easy-rsa/pki/dh.pem
archivo.
Generar certificado y clave de servidor OpenVPN
Para generar un certificado y una clave privada para el servidor OpenVPN, ejecute el siguiente comando;
cd /etc/easy-rsa
./easyrsa build-server-full server nopass
Cuando se ejecute el comando, se le pedirá que ingrese la frase de contraseña de la clave de CA creada anteriormente.
nopass
deshabilita el uso de frases de contraseña en los certificados.
Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 Generating a RSA private key .....+++++ ...............................+++++ writing new private key to '/etc/easy-rsa/pki/easy-rsa-10170.VLZsfK/tmp.4TRoOP' ----- Using configuration from /etc/easy-rsa/pki/easy-rsa-10170.VLZsfK/tmp.jTJJ7f Enter pass phrase for /etc/easy-rsa/pki/private/ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'server' Certificate is to be certified until Oct 3 18:03:20 2023 GMT (825 days) Write out database with 1 new entries Data Base Updated
Generar clave de código de autenticación de mensajes basado en hash (HMAC)
Para generar una clave de autenticación precompartida TLS/SSL que se usará para agregar una firma HMAC adicional a todos los paquetes de protocolo de enlace SSL/TLS, para evitar ataques DoS e inundaciones de puertos UDP, ejecute el siguiente comando;
openvpn --genkey --secret /etc/easy-rsa/pki/ta.key
Generar un Certificado de Revocación
Para invalidar un certificado previamente firmado, debe generar un certificado de revocación.
./easyrsa gen-crl
Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 Using configuration from /etc/easy-rsa/pki/easy-rsa-10284.mSzk9F/tmp.qdix0A Enter pass phrase for /etc/easy-rsa/pki/private/ca.key: An updated CRL has been created. CRL file: /etc/easy-rsa/pki/crl.pe
El certificado de revocación se almacena como /etc/easy-rsa/pki/crl.pem
.
Copiar certificados y claves del servidor al directorio del servidor
A continuación, copie todos los certificados/claves generados en el directorio de configuración del servidor OpenVPN.
cp -rp /etc/easy-rsa/pki/{ca.crt,dh.pem,ta.key,crl.pem,issued,private} /etc/openvpn/server/
Generar certificado y clave de cliente OpenVPN
Para generar el certificado y la clave privada de los clientes de OpenVPN, ejecute el siguiente comando;
cd /etc/easy-rsa
./easyrsa build-client-full gentoo nopass
Salida de muestra;
Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 Generating a RSA private key ........................+++++ .........................................................................................+++++ writing new private key to '/etc/easy-rsa/pki/easy-rsa-10316.rcXRdS/tmp.tauo7u' ----- Using configuration from /etc/easy-rsa/pki/easy-rsa-10316.rcXRdS/tmp.RxlTaw Enter pass phrase for /etc/easy-rsa/pki/private/ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'gentoo' Certificate is to be certified until Oct 3 18:05:23 2023 GMT (825 days) Write out database with 1 new entries Data Base Updated
donde gentoo es el nombre del cliente para el que se generan el certificado y las claves. Utilice siempre un nombre común exclusivo para cada cliente para el que genere certificados y claves.
Para generar para el segundo cliente,
./easyrsa build-client-full johndoe nopass
Copiar certificados y claves del cliente en el directorio del cliente
Cree un directorio para cada cliente en el directorio del cliente de OpenVPN
mkdir /etc/openvpn/client/{gentoo,johndoe}
A continuación, copie todos los certificados/claves generados por el cliente y el certificado de CA en el directorio de configuración del cliente de OpenVPN. Puedes
cp -rp /etc/easy-rsa/pki/{ca.crt,issued/gentoo.crt,private/gentoo.key} /etc/openvpn/client/gentoo
cp -rp /etc/easy-rsa/pki/{ca.crt,issued/johndoe.crt,private/johndoe.key} /etc/openvpn/client/johndoe/
Configurar servidor OpenVPN en Rocky Linux 8
OpenVPN viene con un archivo de configuración de muestra dentro de su directorio de documentación. Copie el archivo en /etc/openvpn/server/
y modifíquelo para adaptarlo a sus necesidades.
cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/
Abra la configuración para modificarla.
vim /etc/openvpn/server/server.conf
El archivo está muy comentado. Lea los comentarios para cada opción de configuración.
En la forma más básica, a continuación se encuentran nuestras opciones de configuración, sin comentarios.
port 1194 proto udp4 dev tun ca ca.crt cert issued/server.crt key private/server.key # This file should be kept secret dh dh.pem topology subnet server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 192.168.10.3" client-to-client keepalive 10 120 tls-auth ta.key 0 # This file is secret cipher AES-256-CBC comp-lzo user nobody group nobody persist-key persist-tun status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log verb 3 explicit-exit-notify 1 auth SHA512
Guarde y salga de la configuración una vez que termine de modificar.
¿Quiere asignar direcciones IP fijas/estáticas a sus clientes OpenVPN? Siga la guía a continuación;
Asigne direcciones IP estáticas para clientes OpenVPN
Crear directorio de registro;
mkdir /var/log/openvpn/
Explore la configuración y realice más ajustes para satisfacer sus necesidades.
Configurar el enrutamiento del servidor OpenVPN
Para asegurarse de que el tráfico del cliente se enruta a través de la dirección IP del servidor (ayuda a enmascarar la dirección IP del cliente), debe habilitar el reenvío de IP en el servidor OpenVPN;
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
Ejecute el siguiente comando para efectuar los cambios sin reiniciar el servidor.
sysctl --system
Permitir puerto de servicio OpenVPN a través de firewall
firewall-cmd --add-port=1194/udp --permanent
Activar enmascaramiento de IP
firewall-cmd --add-masquerade --permanent
Reenviar el tráfico recibido en la subred OpenVPN especificada, por ejemplo, la 10.8.0.0/24 en nuestro caso, a una interfaz a través de la cual se enviarán los paquetes.
Para encontrar la interfaz a través de la cual se envían los paquetes, ejecute el siguiente comando:
ip route get 8.8.8.8
8.8.8.8 via 10.0.2.2 dev enp0s3 src 10.0.2.15 uid 0
cache
El nombre de la interfaz y la subred definida pueden ser diferentes para su caso. Reemplácelos según corresponda.
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o enp0s3 -j MASQUERADE
Vuelva a cargar firewalld para que los cambios surtan efecto.
firewall-cmd --reload
Inicie y configure la ejecución de OpenVPN en el arranque del sistema.
systemctl enable --now [email protected]
Cuando se ejecuta el servicio OpenVPN, creará una interfaz de tunelización, tun0;
ip add s
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1/24 brd 10.8.0.255 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::afd7:17a6:57ee:7f3b/64 scope link stable-privacy
valid_lft forever preferred_lft forever
Comprobando los registros;
tail /var/log/openvpn/openvpn.log
/sbin/ip addr add dev tun0 10.8.0.1/24 broadcast 10.8.0.255 Socket Buffers: R=[212992->212992] S=[212992->212992] UDPv4 link local (bound): [AF_INET][undef]:1194 UDPv4 link remote: [AF_UNSPEC] GID set to nobody UID set to nobody MULTI: multi_init called, r=256 v=256 IFCONFIG POOL: base=10.8.0.2 size=252, ipv6=0 IFCONFIG POOL LIST Initialization Sequence Completed
Su servidor OpenVPN ahora está en funcionamiento. Eso nos lleva al final de nuestra guía sobre cómo instalar y configurar OpenVPN Server en Rocky Linux 8.
Ahora puede proceder a configurar clientes OpenVPN e interconectarlos a través del servidor vpn.
Instalar y configurar el cliente OpenVPN en Rocky Linux 8
Otros tutoriales
Asigne direcciones IP estáticas para clientes OpenVPN
Configurar la autenticación basada en LDAP de OpenVPN