Como instalar el servidor OpenVPN Debian 10/9

¿Cómo estais? soy Luis. Os traigo un nuevo post sobre el sistema operativo mas molón. Encantado linuxeros.

Una red privada virtual (VPN) es un protocolo utilizado para añadir seguridad y privacidad en redes privadas y públicas. Las VPN envían tráfico entre dos o más dispositivos de una red en un túnel cifrado. Una vez realizada una conexión VPN, todo el tráfico de la red se cifra al final del cliente. Las VPN enmascaran su dirección IP de forma que sus acciones en línea sean prácticamente irremediables.

Proporciona cifrado y anonimato, y protege sus actividades en línea, compras en línea, envío de correos electrónicos y también ayuda a mantener la navegación por la web anónima.

En este tutorial, le mostraremos cómo instalar y configurar el servidor y el cliente OpenVPN en el servidor Debian 10.

comenzando

Antes de empezar, es una buena idea actualizar los paquetes de su sistema a la versión más reciente.

Ejecute el siguiente para actualizar y actualizar los paquetes de su sistema:

apt-get update -y
apt-get upgrade -y

Una vez el sistema esté actualizado, puede pasar al siguiente paso.

Paso 1: active el reenvío IP

A continuación, deberá habilitar el reenvío de IP en su sistema. El reenvío IP permite al sistema operativo aceptar los paquetes de red entrantes y reenviarlos a la otra red si el destino se encuentra en otra red.

Para habilitar el reenvío de IP, edite el archivo /etc/sysctl.conf:

nano /etc/sysctl.conf

Añada la siguiente línea:

net.ipv4.ip_forward = 1

Guarde el archivo cuando haya terminado. A continuación, ejecute el siguiente para aplicar los cambios:

sysctl -p

Paso 2: instale el servidor OpenVPN

Por defecto, el paquete OpenVPN está disponible en el depósito predeterminado de Debian 10. Puede instalarlo con el siguiente orden:

apt-get install openvpn -y

Una vez finalizada la instalación, también deberá copiar el directorio easy-rsa para gestionar los certificados SSL.

Ejecute el siguiente para copiar el directorio easy-rsa del directorio / usr / share en el directorio / etc / openvpn.

cp -r /usr/share/easy-rsa /etc/openvpn/

Paso 3: configure la autoridad de certificación

Easy RSA utiliza un conjunto de escrituras para generar claves y certificados. En primer lugar, debe configurar la autoridad de certificación en su sistema.

Para ello, cambie el directorio en / etc / openvpn / easy-rsa y cree un archivo de configuración de Easy RSA nuevo:

cd /etc/openvpn/easy-rsa
nano vars

Añada las líneas siguientes, incluidos su país, ciudad y dirección electrónica preferida:

set_var EASYRSA                 "$PWD"
set_var EASYRSA_PKI             "$EASYRSA/pki"
set_var EASYRSA_DN              "cn_only"
set_var EASYRSA_REQ_COUNTRY     "INDIA"
set_var EASYRSA_REQ_PROVINCE    "Gujrat"
set_var EASYRSA_REQ_CITY        "Ahmedabad"
set_var EASYRSA_REQ_ORG         "Blog linux CERTIFICATE AUTHORITY"
set_var EASYRSA_REQ_EMAIL	"[email protected]"
set_var EASYRSA_REQ_OU          "Blog linux EASY CA"
set_var EASYRSA_KEY_SIZE        2048
set_var EASYRSA_ALGO            rsa
set_var EASYRSA_CA_EXPIRE	7500
set_var EASYRSA_CERT_EXPIRE     365
set_var EASYRSA_NS_SUPPORT	"no"
set_var EASYRSA_NS_COMMENT	"Blog linux CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR         "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF        "$EASYRSA/openssl-easyrsa.cnf"
set_var EASYRSA_DIGEST          "sha256"

Guarde el archivo cuando haya terminado.

A continuación, ejecute el siguiente para iniciar el directorio PKI.

./easyrsa init-pki

salida:

Note: using Easy-RSA configuration from: ./vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/pki

A continuación, cree los certificados de CA con el orden siguiente:

./easyrsa build-ca

Deberá obtener la siguiente salida:

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019

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)
Can't load /etc/openvpn/easy-rsa/pki/.rnd into RNG
140218549745472:error:2406F079:random number generator:RAND_load_file:Cannot open file:crypto/rand/randfile.c:98:Filename=/etc/openvpn/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]:

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/etc/openvpn/easy-rsa/pki/ca.crt

El orden anterior generará dos ficheros llamados ca.key y ca.crt. Estos certificados se utilizarán para firmar los certificados de su servidor y de sus clientes.

Paso 4: generar archivos de certificados de servidor

A continuación, deberá generar un par de claves y una solicitud de certificado para el servidor.

Ejecute el siguiente para generar la clave de servidor llamada linux-server:

./easyrsa gen-req linux-server nopass

Deberá obtener la siguiente salida:

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019
Generating a RSA private key
...........................+++++
...............................................................................................................................................................................................................................................................................................+++++
writing new private key to '/etc/openvpn/easy-rsa/pki/private/linux-server.key.kOlBTwtY6a'
-----
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) [linux-server]:

Keypair and certificate request completed. Your files are:
req: /etc/openvpn/easy-rsa/pki/reqs/linux-server.req
key: /etc/openvpn/easy-rsa/pki/private/linux-server.key

Paso 5: firme la clave del servidor mediante CA

A continuación, deberá firmar la clave linux-server mediante el certificado de CA:

Ejecute el siguiente para firmar la clave del servidor:

./easyrsa sign-req server linux-server

Deberá obtener la siguiente salida:

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 365 days:

subject=
    commonName                = linux-server


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes
Using configuration from /etc/openvpn/easy-rsa/pki/safessl-easyrsa.cnf
Enter pass phrase for /etc/openvpn/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:'linux-server'
Certificate is to be certified until Feb 16 05:00:50 2021 GMT (365 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /etc/openvpn/easy-rsa/pki/issued/linux-server.crt

A continuación, verifique el archivo de certificado generado con el orden siguiente:

openssl verify -CAfile pki/ca.crt pki/issued/linux-server.crt 

Si todo está bien, debería obtener la siguiente salida:

pki/issued/linux-server.crt: OK

A continuación, ejecute el siguiente para generar una clave Diffie-Hellman fuerte que se utilizará para el intercambio de claves:

./easyrsa gen-dh

Deberá obtener la siguiente salida:

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
....+................................+........................................+.....++*++*++*++*

DH parameters of size 2048 created at /etc/openvpn/easy-rsa/pki/dh.pem

Después de crear todos los archivos de certificados, copie al directorio / etc / openvpn / server /:

cp pki/ca.crt /etc/openvpn/server/
cp pki/dh.pem /etc/openvpn/server/
cp pki/private/linux-server.key /etc/openvpn/server/
cp pki/issued/linux-server.crt /etc/openvpn/server/

Paso 6: generar certificado de cliente y archivo de claves

A continuación, tendrá que generar la clave y el archivo de certificado para el cliente.

Primero, ejecute el siguiente para crear el archivo de clave de cliente:

./easyrsa gen-req client nopass

Debería ver la salida siguiente:

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019
Generating a RSA private key
......................................................+++++
...+++++
writing new private key to '/etc/openvpn/easy-rsa/pki/private/client.key.e38GUtzHie'
-----
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) [client]:

Keypair and certificate request completed. Your files are:
req: /etc/openvpn/easy-rsa/pki/reqs/client.req
key: /etc/openvpn/easy-rsa/pki/private/client.key

A continuación, firme la clave del cliente mediante el certificado de CA:

./easyrsa sign-req client client

Deberá obtener la siguiente salida:

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019


You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a client certificate for 365 days:

subject=
    commonName                = client


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes
Using configuration from /etc/openvpn/easy-rsa/pki/safessl-easyrsa.cnf
Enter pass phrase for /etc/openvpn/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:'client'
Certificate is to be certified until Feb 16 05:11:19 2021 GMT (365 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /etc/openvpn/easy-rsa/pki/issued/client.crt

A continuación, copie todos los archivos de certificados y certificados del cliente en el directorio / etc / openvpn / cliente /:

cp pki/ca.crt /etc/openvpn/client/
cp pki/issued/client.crt /etc/openvpn/client/
cp pki/private/client.key /etc/openvpn/client/

Paso 7: configure el servidor OpenVPN

A continuación, cree un nuevo archivo de configuración de OpenVPN dentro del directorio / etc / openvpn /:

nano /etc/openvpn/server.conf

Añada las siguientes líneas:

port 1194
proto udp
dev tun
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/linux-server.crt
key /etc/openvpn/server/linux-server.key
dh /etc/openvpn/server/dh.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1"

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
duplicate-cn
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache
keepalive 20 60
persist-key
persist-tun
compress lz4
daemon
user nobody
group nogroup
log-append /var/log/openvpn.log
verb 3

Guarde el archivo cuando haya terminado.

Paso 8: inicie el servicio OpenVPN

OpenVPN ya está instalado y configurado. Ahora puede iniciar el servicio OpenVPN y habilitarlo para que se inicie tras el reinicio del sistema mediante el siguiente orden:

systemctl start [email protected]
systemctl enable [email protected]

Ejecute el siguiente para verificar el estado del servicio OpenVPN:

systemctl status [email protected]

Deberá obtener la siguiente salida:

● [email protected] - OpenVPN connection to server
   Loaded: loaded (/lib/systemd/system/[email protected]; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2020-02-21 15:38:31 UTC; 4s ago
     Docs: man:openvpn(8)
           https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
           https://community.openvpn.net/openvpn/wiki/HOWTO
 Main PID: 3044 (openvpn)
   Status: "Initialization Sequence Completed"
    Tasks: 1 (limit: 2359)
   Memory: 1.3M
   CGroup: /system.slice/system-openvpn.slice/[email protected]
           └─3044 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --config /etc/openvpn/server.

Feb 21 15:38:31 debian10 systemd[1]: Starting OpenVPN connection to server...
Feb 21 15:38:31 debian10 systemd[1]: Started OpenVPN connection to server.

Una vez el servicio OpenVPN haya comenzado con éxito, creará una nueva interfaz de red llamada tun0. Puede comprobarlo con el siguiente orden:

ip a show tun0

Debería obtener la nueva interfaz tun0 en la siguiente salida:

59: tun0:  mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::90:e3c0:5f1a:27f5/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever

Paso 9: generar la configuración del cliente

A continuación, cree un archivo de configuración del cliente OpenVPN nuevo llamado client.ovpn. Necesitará este archivo para conectar el servidor OpenVPN desde el sistema cliente.

nano /etc/openvpn/client/client.ovpn

Añada las siguientes líneas:

client
dev tun
proto udp
remote vpn-server-ip 1194
ca ca.crt
cert client.crt
key client.key
cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
resolv-retry infinite
compress lz4
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3

Guarde el archivo cuando haya terminado.

Paso 10: configure el direccionamiento mediante UFW

Por defecto, el cortafuegos UFW no está instalado en Debian 10. Puede instalarlo con el siguiente orden:

apt-get install ufw -y

Después de instalar el cortafuegos UFW, deberá añadir reglas de cortafuegos para habilitar la simulación para que sus clientes VPN accedan a Internet.

Primero, debe configurar UFW para aceptar los paquetes reenviados. Puede hacerlo editando / etc / default / ufw:

nano /etc/default/ufw

Cambie la línea siguiente:

DEFAULT_FORWARD_POLICY="ACCEPT"

Guarde y cierre el archivo. A continuación, abra el archivo /etc/ufw/before.rules:

nano /etc/ufw/before.rules

Añada las siguientes líneas al final del archivo:

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/16 -o ens3 -j MASQUERADE
COMMIT

Guarde el archivo cuando haya terminado.

Nota: Sustituya ens3 por el nombre de su interfaz de red pública.

A continuación, permita el puerto predeterminado OpenVPN 1194 y OpenSSH con el orden siguiente:

ufw allow 1194/udp
ufw allow OpenSSH

A continuación, vuelva a cargar el cortafuegos UFW mediante el siguiente orden:

ufw disable
ufw enable

Paso 11: conecte OpenVPN desde el cliente

Primero, inicie sesión en la máquina cliente y el correspondiente paquete OpenVPN con el orden siguiente:

apt-get install openvpn -y

A continuación, necesitará descargar los ficheros de configuración del cliente OpenVPN desde el servidor OpenVPN en la máquina cliente.

En la máquina cliente, ejecute el siguiente para descargar todo el archivo de configuración del cliente:

scp -r [email protected]:/etc/openvpn/client .

Una vez descargado, cambie el directorio al cliente y ejecute el siguiente para conectarse al servidor OpenVPN:

cd client
openvpn --config client.ovpn

Debería ver la salida siguiente:

Fri Feb 21 15:39:18 2020 TCP/UDP: Preserving recently used remote address: [AF_INET]69.87.218.145:1194
Fri Feb 21 15:39:18 2020 Socket Buffers: R=[212992->212992] S=[212992->212992]
Fri Feb 21 15:39:18 2020 UDP link local: (not bound)
Fri Feb 21 15:39:18 2020 UDP link remote: [AF_INET]69.87.218.145:1194
Fri Feb 21 15:39:18 2020 TLS: Initial packet from [AF_INET]69.87.218.145:1194, sid=6d27e1cb 524bd8cd
Fri Feb 21 15:39:18 2020 VERIFY OK: depth=1, CN=Easy-RSA CA
Fri Feb 21 15:39:18 2020 VERIFY OK: depth=0, CN=linux-server
Fri Feb 21 15:39:18 2020 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, 2048 bit RSA
Fri Feb 21 15:39:18 2020 [linux-server] Peer Connection Initiated with [AF_INET]69.87.218.145:1194
Fri Feb 21 15:39:19 2020 SENT CONTROL [linux-server]: 'PUSH_REQUEST' (status=1)
Fri Feb 21 15:39:19 2020 PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1,dhcp-option DNS 208.67.222.222,dhcp-option DNS 208.67.220.220,route 10.8.0.1,topology net30,ping 20,ping-restart 60,ifconfig 10.8.0.6 10.8.0.5,peer-id 0,cipher AES-256-GCM'
Fri Feb 21 15:39:19 2020 OPTIONS IMPORT: timers and/or timeouts modified
Fri Feb 21 15:39:19 2020 OPTIONS IMPORT: --ifconfig/up options modified
Fri Feb 21 15:39:19 2020 OPTIONS IMPORT: route options modified

Después de una conexión exitosa, OpenVPN asignará una dirección IP en su sistema. Puede comprobarlo con el siguiente orden:

ip a show tun0

salida:

4: tun0:  mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.0.6 peer 10.8.0.5/32 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::7226:57b1:f101:313b/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever

También puede consultar el registro del servidor OpenVPN para verificar el estado de la conexión:

tail -f /var/log/openvpn.log 

Debería ver la salida siguiente:

Fri Feb 21 15:39:18 2020 45.58.34.83:37445 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, 2048 bit RSA
Fri Feb 21 15:39:18 2020 45.58.34.83:37445 [client] Peer Connection Initiated with [AF_INET]45.58.34.83:37445
Fri Feb 21 15:39:18 2020 client/45.58.34.83:37445 MULTI_sva: pool returned IPv4=10.8.0.6, IPv6=(Not enabled)
Fri Feb 21 15:39:18 2020 client/45.58.34.83:37445 MULTI: Learn: 10.8.0.6 -> client/45.58.34.83:37445
Fri Feb 21 15:39:18 2020 client/45.58.34.83:37445 MULTI: primary virtual IP for client/45.58.34.83:37445: 10.8.0.6
Fri Feb 21 15:39:19 2020 client/45.58.34.83:37445 PUSH: Received control message: 'PUSH_REQUEST'
Fri Feb 21 15:39:19 2020 client/45.58.34.83:37445 SENT CONTROL [client]: 'PUSH_REPLY,redirect-gateway def1,dhcp-option DNS 208.67.222.222,dhcp-option DNS 208.67.220.220,route 10.8.0.1,topology net30,ping 20,ping-restart 60,ifconfig 10.8.0.6 10.8.0.5,peer-id 0,cipher AES-256-GCM' (status=1)
Fri Feb 21 15:39:19 2020 client/45.58.34.83:37445 Data Channel: using negotiated cipher 'AES-256-GCM'
Fri Feb 21 15:39:19 2020 client/45.58.34.83:37445 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
Fri Feb 21 15:39:19 2020 client/45.58.34.83:37445 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key

conclusión

Enhorabuena! ha instalado y configurado correctamente el servidor y el cliente OpenVPN en el servidor Debian 10. Ahora puede acceder a Internet de manera segura y proteger su identidad.

El Blog lo hacemos para ayudar y servir de ayuda a la gente Linux. Esperamos que os guste.

Leave a Reply