Configurar servidor OpenVPN en CentOS 8
Instalar repositorio EPEL
Los últimos paquetes de OpenVPN son proporcionados por los repositorios de EPEL en CentOS 8 y otros derivados similares. EPEL se puede instalar en CentOS 8 ejecutando el siguiente comando:
dnf install epel-release -y
Instalar OpenVPN en CentOS 8
Una vez que los repositorios de EPEL estén en su lugar, ahora puede instalar el paquete OpenVPN en CentOS 8 ejecutando el siguiente comando:
dnf install openvpn
Instalar la utilidad Easy-RSA CA en CentOS 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
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.1c FIPS 28 May 2019 Enter New CA Key Passphrase: ENTER PASSWORD Re-Enter New CA Key Passphrase: RE-ENTER PASSWORD Generating RSA private key, 2048 bit long modulus (2 primes) ...................................................................+++++ .+++++ e is 65537 (0x010001) Can't load /etc/easy-rsa/pki/.rnd into RNG 140160794502976:error:2406F079:random number generator:RAND_load_file:Cannot open file:crypto/rand/randfile.c:98:Filename=/etc/easy-rsa/pki/.rnd 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-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 certificado de CA se almacena en /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
expediente.
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 la frase de contraseña.
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
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 koromicha nopass
donde koromicha 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/{koromicha,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. Puede
cp -rp /etc/easy-rsa/pki/{ca.crt,issued/koromicha.crt,private/koromicha.key} /etc/openvpn/client/koromicha
cp -rp /etc/easy-rsa/pki/{ca.crt,issued/johndoe.crt,private/johndoe.key} /etc/openvpn/client/johndoe/
Configurar servidor OpenVPN en CentOS 8
OpenVPN viene con un archivo de configuración de muestra dentro de su directorio de documentación. Copie el archivo a /etc/openvpn/server/
y modifíquelo según 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 haya terminado 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 el puerto del servicio OpenVPN a través del 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 192.168.43.1 dev enp0s3 src 192.168.43.73 uid 0
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::2ed5:8f74:c456:96b7/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 CentOS 8.
Ahora puede proceder a configurar clientes OpenVPN;
Instale y configure el cliente OpenVPN en CentOS 8/Ubuntu 18.04
Configure la autenticación basada en OpenVPN LDAP.
Configurar la autenticación basada en LDAP de OpenVPN
Tutorial relacionado
Configurar IPSEC VPN usando StrongSwan en Ubuntu 18.04
Configure el cliente VPN strongSwan en Ubuntu 18.04/CentOS 8
Conéctese a Cisco VPN usando un archivo PCF en Ubuntu