SlideShare una empresa de Scribd logo
1 de 10
Descargar para leer sin conexión
Servidor VPN en Linux con
OPENVPN
Bilal Jebari
www.bilaljebari.gq
www.bilaljebari.blogspot.com
Bilal Jebari | Servidor VPN con OPENVPN Página 1 de 9
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 2 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 3 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 4 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 5 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 6 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 7 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 8 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 9 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

Más contenido relacionado

La actualidad más candente

Instalación Servidor DNS
Instalación Servidor DNSInstalación Servidor DNS
Instalación Servidor DNS
Samlith Urbina
 
Manual de squid creado por juanextk
Manual de squid creado por juanextkManual de squid creado por juanextk
Manual de squid creado por juanextk
juanextk
 
Configuracion de proxy squid en centos
Configuracion de proxy squid en centosConfiguracion de proxy squid en centos
Configuracion de proxy squid en centos
murilloyair
 
Manual de configuracion de proxy SQUID
Manual de configuracion de proxy SQUIDManual de configuracion de proxy SQUID
Manual de configuracion de proxy SQUID
Andres Ldño
 
Tutorial linux centos configuraciones básicas
Tutorial linux centos configuraciones básicasTutorial linux centos configuraciones básicas
Tutorial linux centos configuraciones básicas
UTP
 
Bitácora de comandos montar un sitio en un server
Bitácora de comandos montar un sitio en un serverBitácora de comandos montar un sitio en un server
Bitácora de comandos montar un sitio en un server
Learn Pure Insanity
 

La actualidad más candente (20)

Configurar un servidor dns (bind) en linux ubuntu (1)
Configurar un servidor dns (bind) en linux ubuntu (1)Configurar un servidor dns (bind) en linux ubuntu (1)
Configurar un servidor dns (bind) en linux ubuntu (1)
 
Configuración Servidor DHCP
Configuración Servidor DHCPConfiguración Servidor DHCP
Configuración Servidor DHCP
 
Proxy Squid en Ubuntu
Proxy Squid en UbuntuProxy Squid en Ubuntu
Proxy Squid en Ubuntu
 
Reporte servidorftp
Reporte servidorftpReporte servidorftp
Reporte servidorftp
 
Instalación y configuración de servidor DNS
Instalación y configuración de servidor DNSInstalación y configuración de servidor DNS
Instalación y configuración de servidor DNS
 
DNS (Bind) con Fedora.
DNS (Bind) con Fedora.DNS (Bind) con Fedora.
DNS (Bind) con Fedora.
 
Instalación Servidor DNS
Instalación Servidor DNSInstalación Servidor DNS
Instalación Servidor DNS
 
Servidor HTTP Apache
Servidor HTTP ApacheServidor HTTP Apache
Servidor HTTP Apache
 
Manual de squid creado por juanextk
Manual de squid creado por juanextkManual de squid creado por juanextk
Manual de squid creado por juanextk
 
Instalando nagios kuman hoy luis
Instalando nagios kuman hoy luisInstalando nagios kuman hoy luis
Instalando nagios kuman hoy luis
 
Configuracion de proxy squid en centos
Configuracion de proxy squid en centosConfiguracion de proxy squid en centos
Configuracion de proxy squid en centos
 
Squid
Squid Squid
Squid
 
Squid proxy transparente en ubuntu
Squid proxy transparente en ubuntuSquid proxy transparente en ubuntu
Squid proxy transparente en ubuntu
 
Proxy
ProxyProxy
Proxy
 
Manual de configuracion de proxy SQUID
Manual de configuracion de proxy SQUIDManual de configuracion de proxy SQUID
Manual de configuracion de proxy SQUID
 
Instalación de Servidores GNU/Linux - PROXY SQUID (parte 3)
Instalación de Servidores GNU/Linux - PROXY SQUID (parte 3)Instalación de Servidores GNU/Linux - PROXY SQUID (parte 3)
Instalación de Servidores GNU/Linux - PROXY SQUID (parte 3)
 
Tutorial linux centos configuraciones básicas
Tutorial linux centos configuraciones básicasTutorial linux centos configuraciones básicas
Tutorial linux centos configuraciones básicas
 
Manual Servidor Proxy Squid3
Manual Servidor Proxy Squid3Manual Servidor Proxy Squid3
Manual Servidor Proxy Squid3
 
Instalacion backup pc
Instalacion backup pcInstalacion backup pc
Instalacion backup pc
 
Bitácora de comandos montar un sitio en un server
Bitácora de comandos montar un sitio en un serverBitácora de comandos montar un sitio en un server
Bitácora de comandos montar un sitio en un server
 

Destacado

Cc cleaner félix adrian
Cc cleaner félix adrianCc cleaner félix adrian
Cc cleaner félix adrian
AdrianGCSD
 

Destacado (20)

Team viewer cristian ceballos
Team viewer cristian ceballosTeam viewer cristian ceballos
Team viewer cristian ceballos
 
Libro preguntas excel 1 smr1516 final
Libro preguntas excel 1 smr1516 finalLibro preguntas excel 1 smr1516 final
Libro preguntas excel 1 smr1516 final
 
Glary Utilities
Glary UtilitiesGlary Utilities
Glary Utilities
 
Taller final word
Taller final wordTaller final word
Taller final word
 
Amp win off presentación
Amp win off presentaciónAmp win off presentación
Amp win off presentación
 
Trabajo toolwiz time freezem
Trabajo toolwiz time freezemTrabajo toolwiz time freezem
Trabajo toolwiz time freezem
 
Resumen comandos UNIX
Resumen comandos UNIXResumen comandos UNIX
Resumen comandos UNIX
 
Cc cleaner félix adrian
Cc cleaner félix adrianCc cleaner félix adrian
Cc cleaner félix adrian
 
I LOVE PDF
I LOVE PDFI LOVE PDF
I LOVE PDF
 
Sergio gonzález mateu 1 smr
Sergio gonzález mateu 1 smrSergio gonzález mateu 1 smr
Sergio gonzález mateu 1 smr
 
Itic15 flipped classroom con google martín garcía valle final
Itic15 flipped classroom con google martín garcía valle finalItic15 flipped classroom con google martín garcía valle final
Itic15 flipped classroom con google martín garcía valle final
 
Trabajo pw paco y santi(2)
Trabajo pw paco y santi(2)Trabajo pw paco y santi(2)
Trabajo pw paco y santi(2)
 
Mp3tag
Mp3tagMp3tag
Mp3tag
 
KeePass
KeePassKeePass
KeePass
 
Skype 1
Skype 1Skype 1
Skype 1
 
Virtual box
Virtual boxVirtual box
Virtual box
 
Bluestacks Proyecto cristian delgado cazaña
 Bluestacks Proyecto cristian delgado cazaña Bluestacks Proyecto cristian delgado cazaña
Bluestacks Proyecto cristian delgado cazaña
 
Microsoft word
Microsoft wordMicrosoft word
Microsoft word
 
Ccleaner Cristian Rodriguez Viera
Ccleaner Cristian Rodriguez VieraCcleaner Cristian Rodriguez Viera
Ccleaner Cristian Rodriguez Viera
 
Revo uninstaller
Revo uninstaller Revo uninstaller
Revo uninstaller
 

Similar a Servidor VPN en Linux - Bilal Jebari

188997662 como-configurar-servidor-punto-multipunto-con-open vpn-y-cliente-en...
188997662 como-configurar-servidor-punto-multipunto-con-open vpn-y-cliente-en...188997662 como-configurar-servidor-punto-multipunto-con-open vpn-y-cliente-en...
188997662 como-configurar-servidor-punto-multipunto-con-open vpn-y-cliente-en...
Agencia Aduanera Almeida
 
Seg t2 practicas_certificado ssl
Seg t2 practicas_certificado sslSeg t2 practicas_certificado ssl
Seg t2 practicas_certificado ssl
garciadebora
 
Configuración de clientes y servidores DNS para Windows y Linux
Configuración de clientes y servidores DNS para Windows y LinuxConfiguración de clientes y servidores DNS para Windows y Linux
Configuración de clientes y servidores DNS para Windows y Linux
Miguel Fernando
 

Similar a Servidor VPN en Linux - Bilal Jebari (20)

Servicio VPN con OpenVPN y Latch sobre Raspberry Pi
Servicio VPN con OpenVPN y Latch sobre Raspberry PiServicio VPN con OpenVPN y Latch sobre Raspberry Pi
Servicio VPN con OpenVPN y Latch sobre Raspberry Pi
 
188997662 como-configurar-servidor-punto-multipunto-con-open vpn-y-cliente-en...
188997662 como-configurar-servidor-punto-multipunto-con-open vpn-y-cliente-en...188997662 como-configurar-servidor-punto-multipunto-con-open vpn-y-cliente-en...
188997662 como-configurar-servidor-punto-multipunto-con-open vpn-y-cliente-en...
 
Trabajo de 2 previo en sistemas operativos en red
Trabajo de 2 previo en sistemas operativos en redTrabajo de 2 previo en sistemas operativos en red
Trabajo de 2 previo en sistemas operativos en red
 
Configuraion vpn
Configuraion  vpnConfiguraion  vpn
Configuraion vpn
 
Configuracion vpn
Configuracion  vpnConfiguracion  vpn
Configuracion vpn
 
Vpn
VpnVpn
Vpn
 
OpenVPN
OpenVPNOpenVPN
OpenVPN
 
Vpn linux a linux
Vpn linux a linuxVpn linux a linux
Vpn linux a linux
 
Seg t2 practicas_certificado ssl
Seg t2 practicas_certificado sslSeg t2 practicas_certificado ssl
Seg t2 practicas_certificado ssl
 
How to tickets - Protocolos de Comunicación
How to tickets - Protocolos de ComunicaciónHow to tickets - Protocolos de Comunicación
How to tickets - Protocolos de Comunicación
 
Configuración de clientes y servidores DNS para Windows y Linux
Configuración de clientes y servidores DNS para Windows y LinuxConfiguración de clientes y servidores DNS para Windows y Linux
Configuración de clientes y servidores DNS para Windows y Linux
 
Cómo crear una VPN con OpenVPN
Cómo crear una VPN con OpenVPNCómo crear una VPN con OpenVPN
Cómo crear una VPN con OpenVPN
 
Unidad III: Seguridad de las redes
Unidad III: Seguridad de las redesUnidad III: Seguridad de las redes
Unidad III: Seguridad de las redes
 
Manual de instalacion servicios en red hat
Manual de instalacion servicios en red hatManual de instalacion servicios en red hat
Manual de instalacion servicios en red hat
 
DISEÑO E IMPLANTACIÓN DE UN ENTORNO DE TRABAJO
DISEÑO E IMPLANTACIÓN DE UN ENTORNO DE TRABAJODISEÑO E IMPLANTACIÓN DE UN ENTORNO DE TRABAJO
DISEÑO E IMPLANTACIÓN DE UN ENTORNO DE TRABAJO
 
Edison guaraca
Edison guaracaEdison guaraca
Edison guaraca
 
Lab 3 cifrado criptografia
Lab 3   cifrado criptografiaLab 3   cifrado criptografia
Lab 3 cifrado criptografia
 
Servidor FTP en CentOS 6.5
Servidor FTP en CentOS 6.5Servidor FTP en CentOS 6.5
Servidor FTP en CentOS 6.5
 
Seguridad de las Redes
Seguridad de las RedesSeguridad de las Redes
Seguridad de las Redes
 
Curso Redes Linex 2
Curso Redes Linex 2Curso Redes Linex 2
Curso Redes Linex 2
 

Servidor VPN en Linux - Bilal Jebari

  • 1. Servidor VPN en Linux con OPENVPN Bilal Jebari www.bilaljebari.gq www.bilaljebari.blogspot.com
  • 2. Bilal Jebari | Servidor VPN con OPENVPN Página 1 de 9 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.
  • 3. Bilal Jebari | Servidor VPN con OPENVPN Página 2 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
  • 4. Bilal Jebari | Servidor VPN con OPENVPN Página 3 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.
  • 5. Bilal Jebari | Servidor VPN con OPENVPN Página 4 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
  • 6. Bilal Jebari | Servidor VPN con OPENVPN Página 5 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
  • 7. Bilal Jebari | Servidor VPN con OPENVPN Página 6 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
  • 8. Bilal Jebari | Servidor VPN con OPENVPN Página 7 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).
  • 9. Bilal Jebari | Servidor VPN con OPENVPN Página 8 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
  • 10. Bilal Jebari | Servidor VPN con OPENVPN Página 9 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