You are on page 1of 10

Servidor VPN en Linux con

OPENVPN

Bilal Jebari

www.bilaljebari.gq

www.bilaljebari.blogspot.com
Introducción

Esta pequeña guía nos servirá de utilidad para ayudarnos a instalar y configurar un Servidor
VPN en nuestro sistema operativo Linux independientemente de la distribución.

En mi caso ha sido creado en una máquina virtual Debian8.6

Espero que les sirva de utilidad y si tienen alguna duda, contacten conmigo, les intentaré
ayudar lo máximo posible.

Bilal Jebari | Servidor VPN con OPENVPN Página 1 de 9


En primer es aconsejable tener el Servidor/Host con IP fija. Voy a usar la IP 10.10.10.220 en el
ServidorVPN
Para editar la configuración usaremos la siguiente orden:

$ nano /etc/network/interfaces

Estos son los valores que debe tener el archivo interfaces (en su caso cambiará dependiendo
de la IP de su red).
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 10.10.10.220
netmask 255.255.255.0
network 10.10.10.0
broadcast 10.10.10.255
gateway 10.10.10.1

Guardamos los cambios.

Si estamos usando una versión antigua de Linux, se recomienda actualizar los paquetes.

$ apt-get update
$ apt-get upgrade

Después procedemos a instalar el paquete OpenVPN.

$ apt-get install openvpn

Durante la instalación debemos aceptar la confirmación pulsando S.

Después de la instalación vamos a copiar el contenido que hay en la carpeta easy-rsa que se
encuentra en /etc/share a nuestro directorio easy-rsa dentro del directorio openvpn. La copia
la haremos de forma recursiva.

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

En caso de error a la hora de copiar la carpeta, es posible que tengamos que instalar easy-rsa.
Para corregir este error, tenemos que hacer lo siguiente:
$ apt-get install easy-rsa

Después de la instalación creamos la carpeta junto con los ficheros de configuración:

$ make-cadir /etc/openvpn/easy-rsa

Bilal Jebari | Servidor VPN con OPENVPN Página 2 de 9


Nos situamos en el directorio /etc/openvpn/easy-rsa y editamos el archivo vars.

$ cd /etc/openvpn/easy-rsa

$ nano vars

Modificamos las variables export EASY_RSA y export KEY_SIZE por los siguientes valores
consecutivamente.

export EASY_RSA = "/etc/openvpn/easy-rsa"

export KEY_SIZE = 1024

Guardamos los cambios

El siguiente paso es generar los certificados CA. Para ello, estando situados en el directorio
easy-rsa ejecutamos los siguientes comandos.

$ source ./vars

$ ./clean-all

$ ./build-ca

Este último es para generar la entidad certificadora. Podemos dejar los valores por defectos o
cambiarlos. Debemos tener especial atención al common ya que es nuestro nombre del
servidor VPN. Es importante porque en el siguiente paso crearemos el certificado del servidor
y debe tener el mismo nombre.

Después de crear el certificado anterior, vamos a crear un certificado para nuestro Servidor
VPN. Debemos prestar atención y dejar los campos por defecto y verificar que el nombre de
nuestro servidor es el que hemos puesto anteriormente.

$ ./build-key-server [Nombre_Servidor]  $ ./build-key-server ServerVPN

Después vamos a crear la clave para el usuario con el nombre que queramos. En mi caso
pondré [bilal]

$ ./build-key-pass [Usuario]  $ ./build-key-pass bilal

Nos volverán a aparecer los campos a rellenar, los dejamos en blanco salvo cuando nos pida
una contraseña, ahí debemos poner una que será necesaria para poder conectarse
posteriormente mediante OpenVPN a nuestro servidor VPN.

Bilal Jebari | Servidor VPN con OPENVPN Página 3 de 9


Esta última operación la podemos hacer las veces que se quiera, dependiendo de los usuarios
que queramos crear.

Bien, después de crear el usuario vamos protegerlo mediante la encriptación des3. Para ello
usamos la siguiente orden dentro del directorio keys.

$ cd keys

$ openssl rsa -in bilal.key -des -out bilal.3des.key

Volvemos al directorio anterior, easy-rsa.

$ cd /etc/openvpn/easy-rsa

Ahora vamos a proceder a generar el intercambio de claves Diffie-Hellman, esto permite que
dos entidades permitan intercambio de las claves a través de un servidor público.

$ ./build-dh

El siguiente paso es proteger nuestro servidor de posibles ataques de DDoS.

$ openvpn --genkey --secret keys/ta.key

Bilal Jebari | Servidor VPN con OPENVPN Página 4 de 9


Ahora creamos el fichero de configuración del servidor VPN. Este fichero tendrá las diferentes
rutas de los certificados, las IP´s, puertos, interfaz, etc.

$ nano /etc/openvpn/server.conf

A continuación os dejo la configuración que tengo yo, podéis usar esta misma reemplazando
los valores que os interese

dev tun
proto udp
port 1194
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/[Poner_Nombre_CERT_Servidor].crt
key /etc/openvpn/easy-rsa/keys/[Poner_Nombre_KEY_Servidor].key
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig 10.8.0.1 10.8.0.2
push "route 10.8.0.1 255.255.255.255"
push "route 10.8.0.0 255.255.255.0"
push "route 10.10.10.220 255.255.255.0" #Sustituir la IP 10.10.10.220 por la vuestra X.X.X.X
push "dhcp-option DNS 8.8.8.8"
push "redirect-gateway def1"
client-to-client
duplicate-cn
keepalive 10 120
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
cipher AES-128-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn-status.log 20
log /var/log/openvpn.log
verb 1

Guardamos los cambios.

Ahora vamos a activar la redirección del tráfico de internet.

$ nano /etc/sysctl.conf

Descomentamos la siguiente línea y ponemos el valor 1. Quedaría de la siguiente manera.

net.ipv4.ip_forward=1

Bilal Jebari | Servidor VPN con OPENVPN Página 5 de 9


Guardamos los cambios.

El siguiente comando es para ejecutar los cambios que acabamos de hacer.

$ sysctl -p

Ya tenemos nuestro servidor configurado.

El siguiente paso es permitir el tráfico por nuestro túnel VPN, y que los clientes VPN puedan
acceder a redes externas públicas y otras subredes dentro de la red VPN.

nano /etc/rc.local

Añadimos las siguientes reglas en nuestro firewall:

iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT


iptables -A FORWARD -s 10.8.0.0/24 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

1ª regla: Permitimos el tráfico por el dispositivo virtual.

2ª regla: Permitimos que los paquetes provenientes de 10.8.0.0/24 pueden enviarse o salir por
la interfaz de salida eth0.

3ª regla: Permitimos al servidor OpenVPN que cuando reciba una petición de cualquiera de los
clientes, proceda el mismo a resolverla y enviarla en representación del cliente.

Guardamos los cambios y reiniciamos nuestro sistema

$ reboot

Hasta aquí la configuración completa del Servidor VPN

Bilal Jebari | Servidor VPN con OPENVPN Página 6 de 9


Procedemos a configurar el cliente para cada usuario que hemos creado anteriormente, en mi
caso será para cliente bilal. Para facilitarnos la tarea vamos a hacer uso de un script
desarrollado por Eric Jodoin que se encargará de crear el fichero .ovpn con los ficheros de
configuración correspondientes. Enlace: https://gist.github.com/laurenorsini/10013430

Para ello tenemos que crear un fichero de texto del cual el script leerá la configuración y
generará el usuario .ovpn.

$ nano /etc/openvpn/easy-rsa/keys/Default.txt

Copiamos la siguiente configuración

client
dev tun
proto udp
remote [IP local, pública o nombre DNS] 1194
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ns-cert-type
server
key-direction 1
cipher AES-128-CBC
comp-lzo
verb 1
mute 20

Dónde pone [IP local, pública o nombre DNS], podemos poner la ip privada, pública, o nombre
dns (eso sí debemos tener abierto el puerto 1194 en nuestro router).

Bilal Jebari | Servidor VPN con OPENVPN Página 7 de 9


Ahora vamos a crear el Script de Eric Jodoin

$ nano /etc/openvpn/easy-rsa/keys/MakeOVPN.sh

Pegamos el Script desde la web del autor.

#!/bin/bash

# Default Variable Declarations


DEFAULT="Default.txt"
FILEEXT=".ovpn"
CRT=".crt"
KEY=".3des.key"
CA="ca.crt"
TA="ta.key"

#Ask for a Client name


echo "Please enter an existing Client Name:"
read NAME

#1st Verify that client’s Public Key Exists


if [ ! -f $NAME$CRT ]; then
echo "[ERROR]: Client Public Key Certificate not found: $NAME$CRT"
exit
fi
echo "Client’s cert found: $NAME$CR"

#Then, verify that there is a private key for that client


if [ ! -f $NAME$KEY ]; then
echo "[ERROR]: Client 3des Private Key not found: $NAME$KEY"
exit
fi
echo "Client’s Private Key found: $NAME$KEY"

#Confirm the CA public key exists


if [ ! -f $CA ]; then
echo "[ERROR]: CA Public Key not found: $CA"
exit
fi
echo "CA public Key found: $CA"

#Confirm the tls-auth ta key file exists


if [ ! -f $TA ]; then
echo "[ERROR]: tls-auth Key not found: $TA"
exit
fi
echo "tls-auth Private Key found: $TA"

#Ready to make a new .opvn file - Start by populating with the


default file
cat $DEFAULT > $NAME$FILEEXT

Bilal Jebari | Servidor VPN con OPENVPN Página 8 de 9


#Now, append the CA Public Cert
echo "<ca>" >> $NAME$FILEEXT
cat $CA >> $NAME$FILEEXT
echo "</ca>" >> $NAME$FILEEXT

#Next append the client Public Cert


echo "<cert>" >> $NAME$FILEEXT
cat $NAME$CRT | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >> $NAME$FILEEXT
echo "</cert>" >> $NAME$FILEEXT

#Then, append the client Private Key


echo "<key>" >> $NAME$FILEEXT
cat $NAME$KEY >> $NAME$FILEEXT
echo "</key>" >> $NAME$FILEEXT

#Finally, append the TA Private Key


echo "<tls-auth>" >> $NAME$FILEEXT
cat $TA >> $NAME$FILEEXT
echo "</tls-auth>" >> $NAME$FILEEXT

echo "Done! $NAME$FILEEXT Successfully Created."

#Script written by Eric Jodoin


\ No newline at end of file

Guardamos los cambios.

Ahora asignamos los permisos de ejecución al Script.

$ cd /etc/openvpn/easy-rsa/keys

$ chmod 700 MakeOVPN.sh

Ejecutamos el Script
$ ./MakeOVPN.sh
Al ejecutar el Script nos pedirá el nombre del usuario creado anteriormente, después nos
aparecerá el siguiente mensaje:
Done! [usuario].ovpn Successfully Created.

Ya podemos copiar el fichero .ovpn del usuario y probar conectarnos a la VPN

Bilal Jebari | Servidor VPN con OPENVPN Página 9 de 9

You might also like