+ All Categories
Home > Documents > VPN Linux Spanish

VPN Linux Spanish

Date post: 19-Jul-2015
Category:
Upload: javier-sanz
View: 71 times
Download: 0 times
Share this document with a friend
31
  Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla Copyright  2004-2005 Francisco R. Santonja Rodilla
Transcript
Page 1: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 1/31

 

Implementación de una

Red Privada Virtualen Linux

Francisco R. Santonja Rodilla

Copyright © 2004-2005 Francisco R. Santonja Rodilla

Page 2: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 2/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

1

Índice

0. Índice......................................................................................................... 1

1. Introducción.............................................................................................. 21.1. Tipo de VPN ......................................................................................................21.2. Ventajas.............................................................................................................21.3. Implementaciones..............................................................................................3

2. VPN Sitio a Sitio usando VPND............................................................... 42.1. Instalación..........................................................................................................42.2. Configuración del servidor .................................................................................52.3. Configuración del cliente....................................................................................52.4. Soporte en el servidor para varios clientes.........................................................62.5. Comprobación del funcionamiento de la VPN....................................................72.6. Acceso a recursos desde Redes Windows ........................................................8

3. VPN de acceso remoto usando OpenVPN 2.x ....................................... 103.1. Instalación..........................................................................................................103.2. Configuración de OpenVPN utilizando una clave estática..................................113.3. Implantación de una infraestructura de clave pública sobre la VPN...................133.4. Ejecución de OpenVPN como un servicio de INETD .........................................173.5. Ejecución de OpenVPN como un demonio ........................................................18

4. VPN usando StrongSWAN 2.x................................................................. 194.1. Instalación..........................................................................................................194.2. Configuración de StrongSwan utilizando una clave estática ..............................21

4.3. Implantación de una infraestructura de clave pública sobre la VPN...................224.4. Adaptación a distintas arquitecturas...................................................................234.5. Acceso desde un cliente Windows 2000/XP ......................................................254.6. Consideraciones sobre StrongSWAN ................................................................26

5. Seguridad.................................................................................................. 275.1. Cortafuegos .......................................................................................................275.1. Distribución de contraseñas y configuraciones ..................................................28

6. Bibliografía................................................................................................ 30

Page 3: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 3/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

2

1. Introducción

Una red privada virtual o VPN es una tecnología de red que permite una extensión dela red local sobre una red pública o no controlada, como podría ser el caso de Internet. Esta

tecnología permite mediante encapsulación y encriptación el tráfico de paquetes de la redprivada sobre la red pública, dando unas garantías de seguridad, integridad y confidencialidad.

1.1. Tipos de VPN

Fundamentalmente encontramos 3 tipos de arquitecturas de conexión VPN:

VPN de acceso remoto

Este modelo es el que esta siendo mas usado en la actualidad, permite que usuarios oproveedores conecten con la empresa desde sitios remotos a través de Internet. Una vezautentificado el cliente, se crea un túnel sobre Internet, que permite al usuario trabajar de forma

similar a como lo haría en la red local y con un nivel de acceso similar.

VPN Sitio a Sitio

Este modelo es similar al anterior, la diferencia esta basada en que las clientes del modeloanterior se conectaban de forma dinámica, es decir que no tenían una localización fija (IP). Enlas conexiones Sitio a Sitio, conectamos sitios previamente definidos como pudiera ser un laoficina central de una organización con sus sucursales.

VPN Interna

Este modelo basado en la implementación de la VPN sobre una red local, aunque no esta muyextendido tiene capacidades interesantes, ya que permite aislar zonas dentro de la red local,

por ejemplo un servidor que contuviera información sensible, como nominas, etc. Actualmenteeste modelo esta comenzando a difundirse con la aparición de redes inalámbricas, para definirdistintos niveles de acceso y aumentar la seguridad de las mismas.

1.2. Ventajas

La principal ventaja que ha motivado la expansión de las redes privadas virtuales ha sido lareducción de costes. En el caso de las redes de acceso remoto en una primera etapa se viocon la reducción en el coste de las llamadas, convirtiéndose llamadas a larga distancia enllamadas locales al ISP y en la actualidad se ha reducido aun más con la aparición de tarifasplanas y los nuevos servicios de banda ancha. También en el caso de la redes Sitio a Sitio, sehan reducido los costes frente al uso de enlaces WAN dedicados a los servicios de Internet debanda ancha.

Además de la reducción de costes esta tecnología también ha añadido otras mejoras comopueden ser el aumento de las capacidades de los enlaces en el caso de las conexiones demarcado frente al uso de banda ancha.

El uso de redes VPN abre también las puertas a mejoras en otros campos como podrían ser eltele-trabajo o la tele-formación, puesto que un usuario puede tener a su alcance los mismosrecursos en su hogar que en la red de área local.

Page 4: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 4/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

3

1.3. Implementaciones

En la actualidad podríamos clasificar las distintas implementaciones dentro de 3 categorías:Soluciones basadas en hardware, soluciones basadas en software y soluciones mixtas o

basadas en firewall. Comentaremos brevemente las distintas implementaciones pero ennuestro caso nos centraremos en las aplicaciones VPN basadas en software. Las solucioneshardware tienen la ventaja de tener un mayor rendimiento y facilidad de configuración aunqueno ofrece la flexibilidad de las implementaciones por software. Las soluciones por firewallañaden un nivel de seguridad superior aunque esto también produce una perdida derendimiento, que muchas veces supone la inclusión de hardware adicional para soportar lacarga de la VPN. Finalmente las aplicaciones VPN por software son las mas configurables,aunque tienen un rendimiento menor y una mayor dificultad de configuración puesto que a laseguridad de la VPN, se une la del sistema.

En cuanto a implementaciones software encontramos soluciones que utilizan distintosprotocolos:

IPSec

Es un estándar de la IETF que provee confidencialidad, integridad, autenticidad y protección,utilizando para ello dos protocolos Authentification Protocol  (AH) y Encapsulated Security Payload (ESP). Actualmente hay varias implementaciones para la plataforma Linux que utilizaneste estándar, entre ellas podríamos destacar FreeS/WAN que actualmente ha derivado en dosevoluciones distintas StrongSWAN y OpenSWAN.

SSL/TLS

El protocolo SSL/TLS permite la definición de canales seguros sobre TCP. El protocolo SSLestá compuesto por dos capas, la primera capa (SSL Record Protocol), encapsula losprotocolos de nivel mas alto y la segunda capa (SSL Handshake protocol) gestiona lanegociación de los algoritmos de encriptación, y la autentificación entre el cliente y el servidor.Una vez terminada la autentificación, se establece el túnel y se pasa al control a la capa deaplicación. Una solución basada en este protocolo es OpenVPN que comentaremos mas tarde.

L2TP

El Layer-2 Tunneling Protocol  es un protocolo utilizado para encapsular paquetes PPP através de UDP. Este protocolo se encarga de la confidencialidad, autenticidad e integridadentre los extremos del túnel.

PPTP

Point to Point Tunneling Protocol  originalmente desarrollado por 3com, Microsoft y USRobotics entre otros, nos permite encapsular cualquier protocolo de red en datagramas IP,basándose en el protocolo Generic Routing Encapsulation (GRE). Para la autentificacióntenemos tres opciones. CHAP (Intercambia una clave que debe coincidir en ambos extremos),MS-CHAP (Extensión de Microsoft al protocolo CHAP) y PAP consistente en el envío decontraseñas sin encriptar. Para la encriptación PPTP utiliza RC4 de RSA con una clave desesión de 40 bits. Este protocolo pese a ser muy flexible, flojea en cuanto a seguridad. Unaimplementación de este protocolo es el servidor PopTop.

VPND

Virtual Private Network Daemon (VPND). Crea un dispositivo serie virtual y usa encriptaciónBlowfish.

Page 5: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 5/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

4

2. VPN Sitio a Sitio usando VPND

VPND monta una interfaz virtual SLIP en la maquina local y añade hasta 9 rutas estáticas ahosts/redes a la interfaz, conectando al nodo remoto sobre TCP/IP. La transferencia se realizaen bloques de datos encriptados con Blowfish en modo CFB y usa un buffer de blanqueadocircular de 256 bytes para dificultar ataques por fuerza bruta. La longitud de las claves usadaspara la encriptación puede variar entre 0 y 576 bits, dependiendo de las necesidades delsistema.

2.1. Configuración

Los pasos para montar una red virtual sobre este software no son excesivamente complejostan solo requiere:

• Activar el soporte SLIP en el kernel de LINUX ya sea estáticamente mediante larecompilación del propio kernel o mediante módulos cargados en el momento de laoperación (slip.o, cslip.o).

Para ello accederemos a la interface para la configuración del Kernel:

> make menuconfig

Una vez seleccionadas las opciones deseadas recompilaremos el Kernel mediante elsiguiente conjunto de comandos y reiniciaremos:

> make depmake clean

> make bzlilo

> make modules

> make modules_install

> init 6

• Tener instaladas versiones los paquetes zlib y zlib-devel posteriores a la 1.1.3.

Aunque en la mayoría de las distribuciones de LINUX estos paquetes ya vieneninstalados de serie, este paso lo podríamos considerar opcional en el caso de noutilizar la compresión de paquetes (añadiendo las líneas ‘nocompress’ y ‘nocslip’ alfichero de configuración vpnd.conf tanto en el cliente como el servidor).

• Deberíamos también tener presente el dispositivo /dev/random o /dev/urandom. Enel caso no tener el soporte activado en el kernel, podemos recompilar el kernel yactivarlo o continuar sin el a costa del soporte para encriptación de datos.

• Una vez realizada la preparación del sistema operativo podemos proceder a lainstalación del paquete vpnd. En la actualidad esta instalación se puede realizarrapidamente mediante las utilidades graficas para la gestión de paquetesproporcionadas por las distribuciones de LINUX.

• Finalizada la instalación procederemos a la creación de la clave de sesión utilizando lasiguiente orden:

> vpnd –m /etc/vpnd/vpnd.key

Page 6: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 6/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

5

• Tras generar la clave esta debería ser pasada al otro extremo de la VPN, mediante unmedio seguro ya que esta clave es compartida por ambos extremos. Una bueno opciónpara la transferencia de la clave podría ser el envío utilizando SSH.

• Una vez transferida la clave tan solo queda la edición del archivo vpnd.conf tanto en el

cliente como en el servidor, que comentaremos más adelante y el lanzamiento de losdemonios tanto en la maquina servidor como en el cliente mediante la orden:

> /etc/init.d/vpnd start

2.2. Configuración del servidor

Archivo /etc/vpn/vpnd.conf para el servidor:

mode server

server a.b.c.d 2001 # Direccion IP y puerto del servidor client w.x.y.z 2001 # Direccion IP y puerto del cliente

local a.b.c.d # Direccion IP privada del servidor remote w.x.y.z # Direccion IP privada del cliente

# Opciones generales

autoroute

Keepalive 10

noanswer 3

keyfile /etc/vnpd/vnpd.key

pidfile /var/run/vpnd.pid

keyttl 120

ramdomdev /dev/urandom

mtu 1600

suspend 240sendbuf 3072

2.1. Configuración del cliente

Archivo /etc/vpn/vpnd.conf para el cliente:

mode client

client w.x.y.z 2001 # Direccion IP y puerto del clienteserver a.b.c.d 2001 # Direccion IP y puerto del servidor local w.x.y.z # Direccion IP privada del servidor remote a.b.c.d # Direccion IP privada del cliente

# Opciones generales

autoroute

Keepalive 10

noanswer 3

keyfile /etc/vnpd/vnpd.key

pidfile /var/run/vpnd.pid

keyttl 120

ramdomdev /dev/urandom

mtu 1600

Page 7: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 7/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

6

2.5. Soporte en el servidor para varios clientes

Inicialmente el VPND no incluye soporte para varios clientes pero este puede ser configuradolanzando varias instancias del mismo para ello podríamos utilizar un script similar al siguientecomo sustituto de la llamada del demonio original.

#################################### #(/etc/init.d/vpns)#################################### 

VPND=/usr/sbin/vpnd

DESC="Virtual Private Network Daemon (MultiHost)"

NAME=vpnd

VPNPATH=/etc/vpnd/

HOSTPATH=/etc/vpnd/hosts/

test -f $VPND || exit 0

case "$1" in

start)cd $HOSTPATH

for nodo in *;

do

if [ ! -f $VPNPATH/vpnd-$nodo.key ]

then

echo "No se ha encontrado la clave vpnd.key para: $nodo"

exit 0

fi

echo -n "Starting $DESC: para $nodo "

$VPND -f $VPNPATH/vpnd-$nodo.conf

echo "vpnd-$nodo."

done

;;stop)

cd $HOSTPATH

for nodo in *;

do

if [ ! -f $VPNPATH/vpnd-$nodo.key ]

then

echo "No se ha encontrado la clave vpnd.key para: $nodo"

exit 0

fi

echo -n "Stopping $DESC: para $nodo "

kill -9 `cat /var/run/vpnd-$nodo.pid`

echo "vpnd-$nodo."

done;;

restart)

sh /etc/init.d/vpns stop quiet

sleep 3

/etc/init.d/vpns start

;;

*)

echo "Usage: /etc/init.d/$NAME {start|stop|restart}"

exit 1

esac

exit 0

Page 8: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 8/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

7

Además del script requiere unos pequeños cambios en la gestión del servidor que se resumena continuación:

• La creación de un archivo con el nombre del nodo en el directorio /etc/vpnd/hosts:

> touch /etc/vpnd/hosts/XXX

• Uso de archivos de configuración propios para cada host:

> cp /etc/vpnd/vpnd.conf /etc/vpnd/vpnd-XXX.conf

• Generación de claves propias para cada host:

> vpnd –m /etc/vpnd/vpnd-XXX.key

• O el uso de una clave común para todos los hosts:

> cp /etc/vpnd/vpnd.key /etc/vpnd/vpnd-XXX.key

También deberemos tener en cuenta de que cada host se conecte a través de un puertodistinto, puesto que si no tomamos esta precaución continuaremos teniendo el problema deque solo se puede conectar a un host dado que el puerto ya estará previamente reservado

2.6. Comprobación del funcionamiento de la VPN

En caso de que la ejecución del demonio VPND fallara y nos reportara un error a continuacióntenemos una guía de posibles fallos y causas.

Crypto init failed, reason <TO BE ADDED LATER>El dispositivo /dev/random o /dev/urandom no esta presente, deberíamos activar elsoporte para el generador de números aleatorios en el núcleo.

Crypto init failed, reason 1

Ha habido un problema con el envío de la clave. Podría ser debido a que la clave no es lacorrecta, a una mala conexión TCP con pérdida de paquetes o simplemente a que losbuffers de transmisión no han sido limpiados todavía.

Slip link failed, reason 4Significa que el la conexión ha fallado, esto indica que el cliente no puede conectar con elservidor (servidor caído) o que el servidor no puede crear el enlazar el socket del cliente(otro instancia de VPND se esta ejecutando en el mismo puerto).

Este error también puede producirse si se utiliza la opción ‘suspend' y se ha iniciado unadesconexión automática en el caso de conexiones dial up, esto indicaría que el soportepara SLIP o CSLIP no ha sido configurado correctamente. En caso de utilizar el soporteSLIP mediante módulos podemos comprobar si se han cargado correctamente con elcomando ’lsmod’ 

Page 9: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 9/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

8

Peer link failed, reason 105

Este error se debe a un fallo en la recepción de datos, normalmente es causado por unamala conexión TCP. Esto puede ser solucionado con las opciones ‘rxmax’ (aumentando el

tiempo de retransmisión) y ‘sendbuf’ (aumentando el tamaño de buffer) en el archivo deconfiguración. Otra posible causa de este error seria la falta de la librería zlib que podría

ser subsanada mediante la opción ‘nocompress’ (desactivando la compresión de datos).

Peer link failed, reason 106

Este error se debe a un fallo en el envío de datos y tanto las causas como las solucionesson las mismas que en el caso del problema de recepción datos. 

Tras la ejecución sin mensajes de error de demonio comprobaremos que la interfaz SLIP hayasido creada y funcione correctamente para ello con la llamada a ‘ifconfig –a’ deberíamosobtener un resultado similar al siguiente:

> ifconfig -a

sl0 Link encap: VJ Serial Line IP

Inet addr: 10.0.0.1 P-t-P: 10.0.0.2 Mask : 255.255.255

UP POINTOPOINT RUNNING NOARP MULTICAST MTU: 1600 Metric: 1

Rx packets:0 errors: 0 dropped:0 overruns: 0 frame: 0 compressed: 0

Tx packets:0 errors: 0 dropped:0 overruns: 0 carrier: 0 collisions: 0

compressed: 0 txqueuelen: 10

RX bytes: 0 (0.0 b) TX bytes; 0 (0.0 b)

Una vez comprobado el correcto funcionamiento de la interfaz SLIP, tan solo queda realizaralguna prueba mediante los comandos ‘ping’ y ‘traceroute’ a la IP virtual del host remoto,para ver si los paquetes llegan correctamente (ping) y si el enrutamiento también se realizacorrectamente (traceroute).

2.7. Acceso a recursos desde Redes Windows

Aunque VPND ha sido creado para trabajar en entornos Linux también cabe laposibilidad del acceso desde entornos de trabajo de Windows mediante el NETBIOSforwarding. Así podemos configurar un grupo de trabajo de Windows con un host Linux conacceso a la VPN para que poder acceder a recursos remotos de la VPN.

El entorno de red de Microsoft se basa en una tecnología llamada NETBIOS sobreTCP/IP. Aunque esto funciona bien sobre una LAN debido a que se basa en difusiones, peroen redes WAN esto falla porque muchos routers no pueden redirigir las difusiones NETBIOS oexisten fallos en las la traducción de direcciones de red (NAT). En el caso de poder acceder ala red utilizando UNC (\\servidor\recurso), pero las maquinas no son visibles desde el entornode trabajo, son necesarias difusiones NETBIOS. Para ello se puede configurar la maquinaLinux (con un kernel posterior a la versión 2.2.0) para que realice el NETBIOS forwarding.

El siguiente paso seria modificación del código de Samba y su posterior recompilación paraque acepte el soporte para NETBIOS forwarding. El código fuente de Samba lo podemosobtener en http://www.samba.org y el parche nbfw para Samba 2.0.x en la siguiente dirección:http://malt-whisky.student.utwente.nl/nbfw/download.html

Page 10: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 10/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

9

Una vez descargados los ficheros necesarios procederemos al parcheado y recompilación:

cd /usr/src/samba-2.0.x/source

patch -p0 < /tmp/nbfw-0.28/nbfw.diff

./configure

make

make install

Una vez compilado Samba con soporte para NETBIOS forwarding necesitamos modificar/etc/smb.conf con especial atención a las líneas en negrita creándolas si no estuvieranpresentes.

[global]

workgroup = DOMINIO

server string = Samba Server

share modes = yes

interfaces = 10.0.0.1/24 192.168.1.1/24

nbfw backend hosts = 10.0.0.1 192.168.1.3nbfw deny hosts =nbfw netbios names = "DOMINIO" MAQUINA1 MAQUINA2

encrypt passwords = yes

name resolve order = lmhosts bcast

Finalmente solo queda modificar un par de líneas en /etc/init.d/samba para que reconozca el

soporte para NETBIOS forwarding:

start-stop-daemon --start --quiet --exec /usr/sbin/nmbdnbfw -- -D -a

start-stop-daemon --start --quiet --exec /usr/sbin/smbdnbfw -- -D

Page 11: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 11/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

10

3. VPN de acceso remoto usando OpenVPN 2.x

3.1. Instalación

Para la instalación de OpenVPN deberemos cumplir los siguientes requisitos:

Una versión del kernel de Linux posterior a la 2.2.0 El controlador TUN/TAP instalado para permitir a los programas del espacio de usuario

controlar un dispositivo IP punto-a-punto (TUN) o Ethernet virtual (TAP). La librería OpenSSL versión 0.9.5 o superior, necesaria para poder compilar con el

soporte el soporte para encriptación activado. Disponible en: http://www.openssl.org/  La librería de compresión en tiempo real LZO, para el soporte de paquetes

comprimidos, disponible en: http://www.oberhumer.com/opensource/lzo/  La librería Pthread para reducir el tiempo de latencia en las negociaciones SSL/TLS.

Instalación del Controlador TUN/TAP

En caso de tener una versión del kernel de Linux 2.2, deberíamos descargar la versión 1.1 delcontrolador TUN/TAP disponible en http://vtun.sourceforge.net/tun/ . En caso de tener unaversión 2.4 o posterior, no será necesario.

Para la instalación del controlador seguiremos los siguientes pasos:

Crearemos un nodo para el dispositivo

mknod /dev/net/tun c 10 200

Añadiremos la siguiente línea a /etc/modules.conf:

alias char-major-10-200 tun

Cargaremos el controlador

modprobe tun

Finalmente activaremos el enrutado:

echo 1 > /proc/sys/net/ipv4/ip_forward

Instalación de OpenVPN

Una vez instalado el controlador TUN/TAP y las librerías auxiliares procederemos con lainstalación de OpenVPN.

En primer lugar nos descargaremos la aplicación desde la pagina la pagina oficial:http://openvpn.sourceforge.net/ 

Descomprimiremos el paquetetar -zxf openvpn-2.0_rc1.tar.gz

Y procederemos a la instalación propiamente dicha:

./configure

make

make install

Page 12: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 12/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

11

Comprobaciones del correcto funcionamiento de OpenVPN

Pruebas de criptográficas:

./openvpn --genkey --secret key

./openvpn --test-crypto --secret key

Pruebas de negociación SSL/TLS (Ejecutar en dos terminales distintas durante 2minutos):

./openvpn --config sample-config-files/loopback-client

./openvpn --config sample-config-files/loopback-server

3.2. Configuración de OpenVPN utilizando una clave estática

Una vez instalado OpenVPN el metodo mas simple para montar la red privada virtual, es

utilizando una clave estatica compartida entre el cliente y el servidor. Para ello en primer lugargeneraremos la clave utilizando el siguiente comando:

openvpn --genkey --secret static.key

La clave estatica generada tendra un formato similar siguiente y debera ser distribuida al clientemediante un metodo:

-----BEGIN OpenVPN Static key V1-----

e5e4d6af39289d53

171ecc237a8f996a

97743d146661405e

c724d5913c550a0c

30a48e52dfbeceb6

e2e7bd4a8357df78

4609fe35bbe99c32

bdf974952ade8fb9

71c204aaf4f256ba

eeda7aed4822ff98

fd66da2efa9bf8c5

e70996353e0f96a9

c94c9f9afb17637b

283da25cc99b37bf

6f7e15b38aedc3e8

e6adb40fca5c5463

-----END OpenVPN Static key V1-----

Configuración del Servidor OpenVPN

Ahora deberemos crear un archivo de configuración para el servidor OpenVPN. Para evitarproblemas con las rutas en nuestro caso hemos preferido que el propio servidor se encarguede pasar la configuración de las rutas al cliente mediante el comando push del archivo deconfiguración. El comando push envia ordenes al cliente que se ejecutaran tras la orden pull del archivo de comunicación, otra posibilidad seria pasar un script con los comando deenrutado y añadir una linea up <script> en el archivo de configuración del cliente. Acontinuación podemos ver un ejemplo de nuestra elección:

Page 13: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 13/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

12

# openvpn-server.conf 

# Modo Tunnel

dev tun

# Ejecutar en modo servidor mode server

# Dirección IP del servidor y del punto de enlace (Gateway)

ifconfig 10.1.0.1 10.1.0.2

# Rango de direcciones IP reservadas para los clientes

ifconfig-pool 10.1.0.4 10.1.0.254

# Configuración de rutas para en el servidor 

route 10.1.0.0 255.255.255.0

# Comando route enviado al cliente

push "route 10.1.0.1 255.255.255.255"

# Archivo con la clave compartida

secret static.key

Una vez tenemos el archivo de configuración del servidor podremos poner en marcha elservidor usando el siguiente comando:

openvpn --config openvpn-server.conf

Configuración del Cliente

El cliente OpenVPN necesitara tambien un archivo de configuración similar al siguiente, que elservidor le transferira por un medio seguro junto con la clave compartida. Aquí podemos ver unejemplo de configuración:

# openvpn-client.conf 

# Modo tunel

dev tun

# Dirección del servidor  

remote vpn.myservidor.com

# Clave Privada del cliente

secret static.key

# Obtener el resto de parámetros desde el servidor 

pull

Tras obtener ambos archivos y poner el marcha el servidor el cliente se puede poner enfuncionamiento mediante el siguiente comando, aunque mas adelante podremos ver métodosmas sofisticados de inicialización:

openvpn --config openvpn-client.conf

Page 14: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 14/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

13

3.3. Implantación de una infraestructura de clave pública sobre la VPN

En primer lugar deberemos configurar OpenSSL (La librería criptográfica sobre la que se apoyaOpenVPN) para que actué como Autoridad Certificadora raíz creando un certificadoautofirmado sobre toda jerarquía de autentificación.

Entonces crearemos peticiones de certificado de los clientes y los certificados de ediciónactuales.

El siguiente paso será utilizar entorno de pruebas de OpenSSL para comprobar que todofunciona correctamente y pasaremos a la configuración del cliente y servidor de OpenVPN.

Finalmente generando una lista de revocación de certificados (CRL) revocando un certificadode un usuario, generando la lista que contendrá el certificado revocado y finalizando el accesodel usuario a la VPN.

Configuración de OpenSSL

Para la configuración de OpenSSL deberemos de editar el archivo /etc/openssl.cnf, a

continuación podemos ver una posible configuración comentada que podría ser utilizada paranuestros fines:

# openssl.cnf 

############################################################ # Configuración Autoridad Certificadora (CA)

############################################################ 

[ ca ]

default_ca = CA_default

[ CA_default ]

dir = /root/CA-DB # Directorio Basecrl_dir = $dir/crl # Dir. CRL database = $dir/index.txt # Indice de la BBDD new_certs_dir = $dir/newcerts # Dir. Nuevos certificadoscertificate = $dir/cacert.pem # Certificado Raizserial = $dir/serial # Siguiente ID certificadocrl = $dir/crl.pem # CRL actual

unique_subject = yes

# Clave privada de la CA 

private_key = $dir/private/cakey.pem

# Archivo de números aleatoriosRANDFILE = $dir/private/.rand

# Duracion de los certificados

default_days = 365

default_crl_days= 30

# Función Hashing 

default_md = md5

x509_extensions = user_extensions

Page 15: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 15/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

14

# Politicas de administración

policy = policy_any

[ policy_any ]

organizationName = match

organizationalUnitName = optionalcommonName = supplied

############################################################ # Configuración de las peticiones de certificados############################################################ 

[ req ]

# Longitud y archivo de la clave privada

default_bits = 1024

default_keyfile = privkey.pem

distinguished_name = req_distinguished_name

# Información sobre nuestro certificado

[ req_distinguished_name ]

organizationName = Nombre de la Organización

organizationName_default = Nombre de la Organización

organizationalUnitName = Departamento

commonName = Nombre del administrador

commonName_max = 64

# Certificados autofirmados

x509_extensions = CA_extensions

[ user_extensions ]

# No permitimos nuestros certificados firmen otros certificados

basicConstraints = CA:FALSE

[ CA_extensions ]

# Permitimos que el certificado raiz firme otros certificados

basicConstraints = CA:TRUE

Creación de una autoridad certificadora raíz (CA)

En primer lugar deberemos crear la estructura de directorios para el almacén de certificados,en concordancia al archivo de configuración openssl.conf:

mkdir CA-DB

cd CA-DB

mkdir crl

mkdir newcerts

mkdir private

Page 16: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 16/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

15

Tras ello procederemos la inicialización de los identificadores de certificados y a la creación delarchivo de índices:

echo "01" > serial

touch index.txt

Una vez creada la estructura de directorios, crearemos nuestro certificado raíz autofirmado,que servirá como base para el resto de certificados, la opción –x509 creara un certificadoautofirmado en vez de una petición de certificado:

openssl req -new -x509 -keyout private/cakey.pem -out cacert.pem 

Creación de Certificados de Usuario

En primer lugar crearemos un certificado para el servidor OpenVPN que será utilizado para elinicio automático del servicio:

openssl req -new -nodes –keyout vpnkey.pem -out vpncert-req.pem

Tras ello firmaremos digitalmente el certificado creado inicialmente y el propio OpenSSLactualizará automaticamente la base de datos de certificados:

openssl ca -out vpncert.pem -in vpncert-req.pem

Una vez finalizada la creación del certificado del servidor podemos proceder a la creación decertificados para los clientes de la siguiente forma:

openssl req –new –keyout client1key.pem -out client1cert-req.pem

openssl ca -out client1cert.pem -in client1cert-req.pem

Configuración del Servidor OpenVPN

Tras la creación de la infraestructura de certificados y haberla probados con certificados denuestro servidor y clientes, pasaremos a la configuración del servidor. OpenVPN utiliza unprotocolo de seguridad llamado Diffie-Hellman (RFC 2631) para negociar la autentificación.Para facilitar su uso generaremos un archivo de configuración para este llamado dh1024.pem  como sigue:

openssl dhparam -out dh1024.pem 1024

Ahora deberemos crear un archivo de configuración para el servidor OpenVPN. A continuaciónpodemos ver un ejemplo:

# openvpn-server.conf 

# Modo Tunnel

dev tun

# Ejecutar en modo servidor 

mode server

# Dirección IP del servidor y del punto de enlace (Gateway)

ifconfig 10.1.0.1 10.1.0.2

# Rango de direcciones IP reservadas para los clientes

ifconfig-pool 10.1.0.4 10.1.0.254

Page 17: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 17/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

16

# Configuración de rutas para en el servidor 

route 10.1.0.0 255.255.255.0

# Comando route enviado al cliente

push "route 10.1.0.1 255.255.255.255"

# Servidor TLS para el intercambio de certificadostls-server

# Parámetros para el algoritmo Diffie-Hellman

dh dh1024.pem

# Certificado Raiz

ca CA-DB/cacert.pem

# Certificado del Servidor 

cert vpncert.pem

# Clave Privada del Servidor 

key vpnkey.pem

# Comprobación de certificados de cliente revocados

crl-verify CA-DB/crl/crl.pem

Tras terminar con la configuración de OpenVPN, necesitaremos inicializar una lista derevocación de certificados. Simplemente llamaremos a la autoridad certificadora (CA) para quenos genere uno:

openssl ca -gencrl -out > CA-DB/crl/crl.pem

Finalmente una vez tenemos el archivo de configuración del servidor y creada la lista de

revocación de certificados podremos proceder a su puesta en marcha mediante el siguientecomando:

openvpn --config openvpn-server.conf

Configuración del Cliente

Los pasos de instalación de OpenVPN en el cliente son similares a los del servidor, tan solodeberemos crear un archivo de configuración para el cliente:

# openvpn-client.conf 

# Modo tunel

dev tun

# Dirección del servidor  

remote vpn.myservidor.com

# Cliente TLS para el intercambio de certificados

tls-client

# Archivo de la autoridad certificadora (CA)

ca cacert.pem

# Certificado/Clave Publica del cliente

cert client1cert.pem

Page 18: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 18/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

17

# Clave Privada del cliente

key client1key.pem

# Obtener el resto de parámetros desde el servidor 

pull

Tras la instalación del cliente deberemos distribuir usando un medio seguro estos archivos alcliente, necesarios para la autentificación:

La clave privada del usuario (client1key.pem).

El certificado o clave publica del cliente (client1cert.pem)

Una copia de la autoridad certificadora raíz (cacert.pem) El archivo de configuración del cliente.

Una vez este conjunto se halle en posesión del cliente procederemos a la ejecución del cliente:

openvpn --config openvpn-client.conf

Comprobando el acceso de clientes a la CRL 

El último paso a realizar es evitar el acceso de usuarios no autorizados a nuestra VPN. Paraello revocaremos los certificados y actualizaremos la lista de certificados revocados (CRL).Para saber que certificado pertenece a cada cliente usaremos el archivo index.txt presente enel directorio de certificados y buscaremos la entrada en la que el atributo commonName coincidacon el certificado a revocar (Identificador que asigna la autoridad certificadora al certificado).Tras obtener el identificador, podemos localizar el certificado en newcerts en el directorio decertificados observando el nombre de archivo.

A continuación tenemos un ejemplo de revocación de un certificado para usuario2. Hemos

buscado en index.txt y observamos que tiene el identificador 03 en commonName.

Entonces sabemos que su certificado esta en newcerts/04.pem. Asi que procederemos a surevocación: 

openssl ca -revoke > CA-DB/newcerts/04.pem

Este comando revocará el certificado y actualizara index.txt. Ahora necesitaremos generar unanueva lista (CRL) que contenga este nuevo certificado para que OpenVPN reconozca larevocación:

openssl ca -gencrl -out CA-DB/crl/crl.pem

3.4. Ejecución de OpenVPN como un servicio de INETD

Para la ejecución del servidor OpenVPN como un servicio debemos crear el archivo/etc/xinetd.d/openvpnsiguiente contenido:

service openvpn

{

type = UNLISTED

port = 1194

socket_type = dgram

protocol = udp

wait = yes

user = root

server = /root/openvpn/openvpn

server_args = --inetd –-config /root/openvpn/openvpn-server.conf

disable = yes}

Page 19: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 19/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

18

3.5. Ejecución de OpenVPN como un Demonio

Para la ejecución de OpenVPN utilizaremos uno de los scripts de ejemplo proporcionado conOpenVPN. El script lo podemos encontrar en sample-scripts/openvpn.init y para suinstalación seguiremos los siguientes pasos:

Desde el directorio de openvpn ejecutaremos para copiar el script al directorio deejecución:

cp sample-scripts/openvpn.init /etc/rc.d/init.d/openvpn

Una vez copiado prepararemos el sistema para que arranque automáticamente eldemonio:

chkconfig –-add openvpn

Y finalmente crearemos el directorio /etc/openvpn y añadiremos a este un archivo

<conexion>.conf y otro <conexion>.sh para cada una de las conexiones. El .conf seencargará de guardar la configuración de la conexión mientras que el .sh si estapresente incluira aquellos comandos que pretendamos ejectuar antes de la ejecuciónde openvpn.

Page 20: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 20/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

19

4. VPN de acceso remoto usando StrongSWAN 2.x

4.1. Instalación

Para la instalación de OpenVPN deberemos cumplir los siguientes requisitos:

Una versión del kernel de Linux posterior a la 2.4 La librería GNU Multiprecision Arithmetic (GMP) disponible en la siguiente dirección:

http://www.swox.com/gmp/. En caso de que quisiéramos obtener dinámicamente listas de revocación de

certificados (CRLs) desde un servidor HTTP o usar el protocolo Online CertificateStatus Protocol (OCSP), necesitaremos la librería libcurl disponible en la siguiente

dirección: http://curl.haxx.se . También deberemos quitar el comentario en esta línea de‘programs/pluto/Makefile’:

# Uncomment this line to enable CRL fetching using HTTP

LIBCURL=1

Si además queremos obtener dinámicamente listas de revocación de certificados(CRLs) desde un servidor LDAP, necesitamos la librería libldap que podemos

conseguir en http://www.openldap.org/ y quitar el comentario en una de estas líneas delMakefile dependiendo de la versión de LDAP que pretendamos usar:

# Uncomment to enable dynamic CRL fetching using LDAP V3

LDAP_VERSION=3

# Uncomment to enable dynamic CRL fetching using LDAP V2

#LDAP_VERSION=2

Si queremos también almacenar los certificados X.509 y claves privadas RSA en unaSmartCard o en una llave USB necesitamos la librería OpenSC 0.8.0 o superior

disponible en: http://www.opensc.org/ y quitar el comentario en la siguiente línea delMakefile:

#Uncomment this line to enable smartcard support

SMARTCARD=1

Instalación de StrongSwan en Linux Kernel 2.4

Para la compilación de StrongSwan con un el kernel 2.4 de Linux 2.4, necesitamos lapresencia de un enlace simbólico referenciado via /usr/src/linux.

Antes compilar StrongSwan debemos haber compilado el núcleo al menos una vezcon los siguientes comandos:

make menuconfig;

make dep;

make bzImage;

make modules

Ir al directorio del código de strongswan-2.x.x . En primer lugar debemos quitar el comentario a las opciones de compilación deseadas

en ./programs/pluto/Makefile"

Ahora procederemos a la configuración desde el menú:

Page 21: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 21/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

20

make menumod 

Este comando aplica un parche de encapsulación ESP_IN_UDP a las fuentes delnúcleo requerido para NAT-Traversal.

En el menú "Networking options" debemos activar la siguiente línea para compilar

KLIPS como un modulo "ipsec.o".

<M> IP Security Protocol (strongSwan IPsec)

Una vez modificada la configuración debemos guardar los cambias antes de abandonar"menumod".

Las utilidades de StrongSwan serán automáticamente compiladas e instaladas, junto almodulo ipsec.o y los módulos de criptografía con el comando:

make minstall

En caso de querer usar NAT-Traversal debemos compilar otra vez el núcleo parcheadoejecutando:

make bzImage

y entonces instalar y arrancar el kernel modificado.

Añadir las conexiones a "/etc/ipsec.conf" y iniciar strongSwan con

ipsec setup start

Actualización de StrongSwan en Linux Kernel 2.4

En caso de que quisiéramos actualizar una versión de StrongSwan ya instaladadeberíamos proceder de la siguiente manera:

Ir al directorio del código de strongswan-2.x.x . En primer lugar debemos quitar el comentario a las opciones de compilación deseadas

en ./programs/pluto/Makefile" Ahora procederemos a la compilación e instalación:

make programs; make install

make module; make minstall

Finalmente solo queda añadir las conexiones a "/etc/ipsec.conf" y iniciar strongSwancon:

ipsec setup start

Page 22: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 22/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

21

Instalación de StrongSwan en Linux Kernel 2.6

La versión 2.6 del kernel de Linux, ya lleva incorporado soporte nativo para la pila deprotocolos IPsec, tan solo hay que asegurarse que los siguientes módulos estándisponibles mediante el comando lsmod y en caso de que no estuvieran instalados

instalarlos con modprobe y el nombre del modulo:

af_key ah4 esp4 ipcomp xfrm_user

También deberían estar disponibles los módulos de CryptoAPI con la encriptación y losalgoritmos hash.

Ir al directorio del código de strongswan-2.x.x . En primer lugar debemos quitar el comentario a las opciones de compilación deseadas

en ./programs/pluto/Makefile" Ahora procederemos a la compilación e instalación:

make programs

make install

Finalmente solo queda añadir las conexiones a "/etc/ipsec.conf" y iniciar strongSwancon:

ipsec setup start

4.2. Configuración de StrongSwan utilizando una clave estática

Una vez tenemos completamente instalado StrongSwan y hayamos decidido usar un sistemade clave estatica compartida, en primer lugar deberemos generar una clave publica para el hostlocal. Para ello utilizaremos el siguiente comando, pudiendo especificicar el numero de bits dela clave que por defecto sera 2192: 

ipsec newhostkey --output archivo [--bits n ] 

Esta clave la añadiremos posteriormente al archivo de configuración en la opciónleftrsasigkey, en caso de ya tener una clave pública generada podemos verla con el comando:

ipsec showhostkey --left

Obteniendo una salida similar a la siguiente:

# RSA 2048 bits localhost Mon Jan 3 17:05:41 2005

leftrsasigkey=0sAQPkI9p...

Page 23: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 23/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

22

Tras obtener la clave publica local, procederemos a obtener la clave del host remoto, estapuede ser enviada por un método seguro por el administrador del host o la podemos obtener sitenemos permisos mediante una consola remota SSH, procediendo de forma similar:

ssh2 servremoto.com

ipsec showhostkey --right

Obteniendo la linea que deberemos añadir a nuestro archivo de configuración:

# RSA 2048 bits localhost Mon Jan 3 17:25:41 2005

rightrsasigkey=0sAQOpKcW...

Tras tener ambas contraseñas tan solo debemos editar el archivo de configuración para añadirla conexión:

/etc/ipsec.conf:

conn net2netleft=%defaultroute

leftcert=norteCert.pem

leftsubnet=10.0.1.0/24 # Red local A

leftrsasigkey=0sAQPkI9p... # Clave publica local

right=55.66.77.88 # Servidor B

rightsubnet=10.0.2.0/24 # Red local B

rightrsasigkey=0sAQOpKcW... # Clave publica remota

auto=start

Finalmente activaremos la conexión mediante el comando que tenemos a continuación y sitodo ha funcionado correctamente obtendremos entre los mensajes IPsec SA established:

ipsec auto --up net2net

Si la conexión se ha establecido tambien podriamos realizar alguna que otra prueba haciendoping a equipos de la red remota o con el comando tcpdump para comprobar el tráfico depaquetes.

4.3. Implantación de una infraestructura de clave pública sobre la VPN

Para implantar la infraestructura de certificados sobre StrongSwan, necesitaremos también deOpenSSL, procediendo de una manera similar a OpenVPN (Ver Apartado 2.3):

  Configuración de OpenSSL

  Creación de una autoridad certificadora raíz (CA)  Creación de Certificados de Usuario

Las únicas diferencias en la configuración de OpenSSL, vendrán marcadas por los directoriosque deberán ajustarse a IPSec:

dir = /etc/ipsec.d # Directorio Basecrl_dir = /etc/ipsec.d/crls # Dir. CRL database = $dir/certs/index.txt # Indice de la BBDD new_certs_dir = $dir/certs/newcerts # Dir. Nuevos certificadosserial = $dir/certs/serial # Siguiente ID certificadocertificate = $dir/cacerts/cacert.pem # Certificado Raiz

crl = $crl_dir/crl.pem # CRL actual

Page 24: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 24/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

23

4.4. Adaptación a distintas arquitecturas VPN

Sitio a Sitio

En este modelo conectaremos dos subredes conectadas a través de una puerta de accesos

mediante un túnel:

Configuración para el host en la red A (Norte):

/etc/ipsec.d/cacerts/caCert.pem /etc/ipsec.d/certs/norteCert.pem /etc/ipsec.secrets:

: RSA norteKey.pem “<password opcional>“

/etc/ipsec.conf:

conn net2netleft=%defaultroute

leftcert=norteCert.pem

leftsubnet=10.0.1.0/24 # Red local A

right=55.66.77.88 # Servidor B

rightsubnet=10.0.2.0/24 # Red local B

rightid="C=ES, O=VPN, CN=sur.myservidor.com"

rightrsasigkey=%cert

auto=start

Configuración para el host en la red B (Sur):

/etc/ipsec.d/cacerts/caCert.pem /etc/ipsec.d/certs/surCert.pem /etc/ipsec.secrets:

: RSA surKey.pem “<password opcional>“

/etc/ipsec.conf:

conn net2net

left=%defaultroute

leftcert=surCert.pem

leftsubnet=10.0.2.0/24 # Red local B

right=11.22.33.44 # Servidor A

rightsubnet=10.0.1.0/24 # Red local Arightid="C=ES, O=VPN, CN=norte.myservidor.com"

rightrsasigkey=%cert

auto=start

En caso de conectar dos ordenadores independientes utilizando esta configuración tan solodeberemos comentar las líneas rightsubnet y leftsubnet de ipsec.conf.

Acceso Remoto

En este modelo tenemos un servidor que da acceso a un número indeterminado de clientesVPN con IP dinámicas. Una de las mayores diferencias con el modelo anterior es que ambasmaquinas iniciaban la conexión, mientras que en este el servidor autoriza las conexiones, perolas tiene que iniciar el cliente:

Page 25: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 25/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

24

Configuración en el servidor:

/etc/ipsec.d/cacerts/caCert.pem /etc/ipsec.d/certs/serverCert.pem /etc/ipsec.secrets:

: RSA serverKey.pem “<password opcional>“

/etc/ipsec.conf:

conn rw

left=%defaultroute

leftsubnet=10.0.1.0/24 # Red local A

leftcert=serverCert.pem

right=%any

rightrsasigkey=%cert

auto=add # Autoriza una conexión

Configuración los clientes:

/etc/ipsec.d/cacerts/caCert.pem /etc/ipsec.d/certs/clientCert.pem /etc/ipsec.secrets:

: RSA clientKey.pem “<password opcional>“

/etc/ipsec.conf:

conn client

left=%defaultroute

leftcert=clientCert.pemright=11.22.33.44 # Servidor A

rightsubnet=10.0.1.0/24 # Red local A

rightid="C=ES, O=VPN, CN=vpn.myservidor.com"

rightrsasigkey=%cert

auto=start

También podríamos asignar una dirección IP virtual al cliente dentro de la VPN, para ellodeberíamos añadir la siguiente línea a ipsec.conf del servidor en la conexióncorrespondiente:

rightsubnetwithin=10.0.3.0/24

Y esta otra en el archivo ipsec.conf del cliente:

leftsourceip=10.0.3.1

Page 26: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 26/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

25

4.5. Acceso desde un cliente Windows 2000/XP

Instalación y configuración (Windows 2000/XP) 

Windows 2000 y XP tienen el cliente L2TP/IPsec instalado por defecto, aunque seriainteresante que tuvierán instaladas todas las actualizaciones disponibles hasta el momento.

Para evitar que el cliente VPN de Windows, no intente configurar una conexión L2TP en vez dela conexión IPSec, deberemos modificar el registro de Windows, creando un archivo como elsiguiente con el nombre IPsec.reg y añadiendolo al registro:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters]

“ProhibitIpSec”=dword:00000000

En Windows XP podemos tener problemas con el cortafuegos incluido en Windows (ICF), paraevitarlo deberiamos abrir loa puertos UDP 500 y 4500. Este problema no se presenta sitenemos instalado el Service Pack 2, debido a que incluye un cortafuegos diferente.

Configuración de una conexión con clave estatica bajo Windows XP 

Para la configuración de un a conexión L2TP/IPSec con clave estatica, bajo Window XPseguiremos los siguientes pasos:

Iniciaremos el Asistente para una nueva conexión. ( Inicio -> Programas ->Accesorios -> Comunicaciones)

Pulsaremos Siguiente. Seleccionaremos Conectarse a la red de mi lugar de trabajo. Seleccionaremos Conexión de red privada virtual. Introduciremos un nombre para la conexión. Seleccionaremos la conexión a Internet que queremos usar y si nos queremos conectar

automáticamente. Introduciremos la dirección IP del servidor al que nos conectaremos y finalizaremos el

asistente. Iremos a la nueva conexión que hemos creado y pulsaremos el boton derecho del ratón

y seleccionaremos Propiedades  Podemos comprobar si hemos cometido algun error introduciendo los datos en la

pestaña General. Seleccionaremos la pestaña Seguridad y desactivaremos la encriptación L2TP/PPP

desmarcando la casilla Requerir cifrado de datos o si deseamos mayor seguridadmarcando Avanzada (configuración personalizada) y pulsando el botónConfiguración… entraremos en un nuevo cuadro de dialogo donde marcaremos lacasilla de Protocolo de desafio mutuo (CHAP) y en Cifrado de Datosselecciónaremos Cifrado opcional y pulsaremos Aceptar.

Una vez hecho esto pulsaremos el boton Configuración IPSec… de la pestañaSeguridad y marcaremos la casilla Usar clave previamente compartida alautentificar e introduciremos la clave asociada al cliente en el archivo/etc/ipsec.secrets del servidor y pulsaremos Aceptar.

Tras esto iremos a la pestaña Funciones de red y cambiaremos el tipo de red privadavirtual a Red Privada Virtual con L2TP/IPSec.

Finalmente procederemos a la conexión haciendo doble clic en el icono de la conexión.Añadiremos el nombre de usuario y el password y pulsaremos Conectar.

Tras seguir estos pasos deberiamos tener en marcha la conexión You should successively getan IPsec connection, L2TP connection and then a PPP connection. Para comprobar el correctofuncionamiento podemos ver en el servidor Linux /var/log/secure y /var/log/messages 

si se ha producido algun error. Si todo funciona correctamente, podriamos mejorar la seguridadde la conexión añadiendo soporte para certificados.

Page 27: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 27/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

26

4.6. Consideraciones sobre StrongSWAN

StrongSWAN 2.2 esta basado en FreeSWAN 2.0.4 con algunas mejoras en la configuración yel soporte para certificados X.509. He decidido incluir esta implementación debido a que eldesarrollo del proyecto FreeSWAN ha sido descontinuado y a alguna restricción en cuanto a laexportación de métodos de cifrado de este. La configuración de FreeSWAN es prácticamente

similar, las unicas variaciones pueden venir en el procedimiento de instalación. Algunasdistribuciones de Linux (por ejemplo: Suse 8.2) incluyen FreeSWAN y lo instalan por defecto,en estas distribuciones la instalación de StrongSWAN puede llevar problemas si no se eliminapreviamente FreeSWAN, por lo que recomendaria utilizar la versión de FreeSWAN de ladistribución o una actualización de la misma.

Page 28: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 28/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

27

5. Seguridad

5.1. Cortafuegos 

Las soluciones que hemos tratado en los puntos anteriores también se pueden se pueden

utilizar en combinación de un cortafuegos para restringir los accesos a los distintos servicios. Acontinuación hay varios scripts con ejemplos de configuraciones del cortafuegos incluido en lasversiones 2.4 y 2.6 del núcleo de Linux.

Este script ha sido diseñado para permitir tan solo los servicios de Correo, Web, SSH y Telneten una red virtual basada en OpenVPN/VPND. El propósito es servir de guía para laconstrucción de cortafuegos dependiendo de las necesidades, actualmente las distribucionesde Linux incluyen distintas utilidades graficas que facilitan esta tarea. También podría ser unbuen punto de partida para utilizar con StrongSWAN u otra solución IPSec pues aunque lapropia pila de protocolos IPSec proporciona mecanismos de seguridad para el bloque deconexiones, las últimas líneas serian necesarias para el uso del enmascaramiento IP y NAT(Traducción de Direcciones de Red).

/etc/rc.d/init.d/firewall.vpn:

#!/bin/bash

LOCAL_IFACE="eth1" # Conexión a la red local 

INET_IFACE="eth0" # Conexión a Internet

PRIVATE=10.0.0.0/24 # Mascara de la red local del servidor  

# Dirección Loopback

LOOP=127.0.0.1

# Borrar reglas antiguas y bloquear todo el tráfico

iptables -F

iptables -P OUTPUT DROPiptables -P INPUT DROP

iptables -P FORWARD DROP

# Registramos los paquetes antes de bloquearlos

iptables -X LOG_DROP

iptables -N LOG_DROP

iptables -A LOG_DROP -j LOG --log-prefix "drop "

iptables -A LOG_DROP -j DROP

# Politicas predeterminadas

iptables -P OUTPUT ACCEPT

iptables -P INPUT LOG_DROP

iptables -P FORWARD LOG_DROP

# Evitar que los paquetes externos utilicen la interface loopback

iptables -A INPUT -i $INET_IFACE -s $LOOP -j LOG_DROP

iptables -A FORWARD -i $INET_IFACE -s $LOOP -j LOG_DROP

iptables -A INPUT -i $INET_IFACE -d $LOOP -j LOG_DROP

iptables -A FORWARD -i $INET_IFACE -d $LOOP -j LOG_DROP

# Eliminamos los paquetes de clases de direcciones reservadas

iptables -A FORWARD -i $INET_IFACE -s 192.168.0.0/16 -j LOG_DROP

iptables -A FORWARD -i $INET_IFACE -s 172.16.0.0/12 -j LOG_DROP

iptables -A FORWARD -i $INET_IFACE -s 10.0.0.0/8 -j LOG_DROP

iptables -A INPUT -i $INET_IFACE -s 192.168.0.0/16 -j LOG_DROP

iptables -A INPUT -i $INET_IFACE -s 172.16.0.0/12 -j LOG_DROP

iptables -A INPUT -i $INET_IFACE -s 10.0.0.0/8 -j LOG_DROP

Page 29: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 29/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

28

# Bloquear el trafico NetBios saliente hacia Internet

iptables -A FORWARD -p tcp --sport 137:139 -o $INET_IFACE -j LOG_DROP

iptables -A FORWARD -p udp --sport 137:139 -o $INET_IFACE -j LOG_DROP

iptables -A OUTPUT -p tcp --sport 137:139 -o $INET_IFACE -j LOG_DROP

iptables -A OUTPUT -p udp --sport 137:139 -o $INET_IFACE -j LOG_DROP

# Validación de la dirección origen de los paquetes salientesiptables -A FORWARD -s ! $PRIVATE -i $LOCAL_IFACE -j LOG_DROP

# Permitir accesos locales a la interface loopback

iptables -A INPUT -s $LOOP -j ACCEPT

iptables -A INPUT -d $LOOP -j ACCEPT

# ICMP aceptados (pueden ser desactivados según necesidades de seguridad)

iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT

iptables -A INPUT -p icmp --icmp-type source-quench -j ACCEPT

iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

# Permitir servicios de Correo, Web, DNS y SSH 

iptables -A INPUT -p tcp --dport http -j ACCEPT

iptables -A INPUT -p tcp --dport https -j ACCEPT

iptables -A INPUT -p tcp --dport ssh -j ACCEPT

iptables -A INPUT -p tcp --dport smtp -j ACCEPT

iptables -A INPUT -p udp --dport domain -j ACCEPT

iptables -A INPUT -p tcp --dport domain -j ACCEPT

####################################################### # PARAMETROS EXCLUSIVOS OPENVPN ####################################################### 

# Permitir paquetes entrantes desde el túnel OpenVPN 

iptables -A INPUT -p udp --dport 1194 -j ACCEPT

# Permitir paquetes desde los dispositivos TUN/TAP 

iptables -A INPUT -i tun+ -j ACCEPT

iptables -A FORWARD -i tun+ -j ACCEPT

iptables -A INPUT -i tap+ -j ACCEPT

iptables -A FORWARD -i tap+ -j ACCEPT

####################################################### # PARAMETROS EXCLUSIVOS VPND ####################################################### 

# iptables -A INPUT -i sl+ -j ACCEPT

# iptables -A FORWARD -i sl+ -j ACCEPT

####################################################### 

# Permitir paquetes desde la red privada

iptables -A INPUT -i $LOCAL_IFACE -j ACCEPT

iptables -A FORWARD -i $LOCAL_IFACE -j ACCEPT

# Mantener estado de las conexiones desde la red local

iptables -A OUTPUT -m state --state NEW -o $INET_IFACE -j ACCEPT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -m state --state NEW -o $INET_IFACE -j ACCEPT

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Enmascarar la red local

iptables -t nat -A POSTROUTING -s $PRIVATE -o $INET_IFACE -j MASQUERADE

Page 30: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 30/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

29

5.2. Distribución de configuraciones y claves

Las redes privadas virtuales tanto basadas en clave estatica compartida, como en certificadosnecesitan un método seguro para la distribución de los archivos de claves y los archivos deconfiguración. La distribución mediante entrega fisica muchas veces no es posible debido a ladistancia, asi que deberemos de recurrir a algu método que nos permita un canal de

distribución seguro atraves de Internet. Una opción podria ser el uso de SSH:

En un sistema basado en certificados deberemos transferir los siguientes archivos:

La clave privada del usuario (client1key.pem).

El certificado o clave publica del cliente (client1cert.pem)

Una copia de la autoridad certificadora raíz (cacert.pem) El archivo de configuración del cliente.

Mientras que en un sistema basado en clave compartida tan solo deberemos transferir:

El archivo que contenga la clave compartida El archivo de configuración del cliente.

A continuación podemos ver como transferir el archivo de configuración de StrongSwan atravesdel comando de copia de SSH, pudiendo proceder con el resto de igual forma:

scp2 /etc/ipsec.conf [email protected]:/etc/ipsec.conf

Page 31: VPN Linux Spanish

5/16/2018 VPN Linux Spanish - slidepdf.com

http://slidepdf.com/reader/full/vpn-linux-spanish 31/31

Implementación de una Red Privada Virtual en Linux Francisco R. Santonja Rodilla

30

6. Bibliografía

  Scott Brumbaugh: "Deploying a VPN with PKI", O'Relly Network, Octubre2004

  James Yonan: "Installation instructions for OpenVPN, a Secure TunnelingDaemon", 2004

  Matthew D. Wilson: "VPN HOWTO", Diciembre 1999

  Andreas Steinmetz: “VPND Frequently Asked Questions”, Noviembre 1999

  Mark Grennan: “Firewall and Proxy Server HOWTO”, Febrero 2000

  Andreas Steffen: ”StrongSwan Configuration Guide”, Octubre 2004


Recommended