sábado, 2 de julio de 2011

Pfsense 2 OpenVPN Site2Site TLS/SSL

Vamos a ver, esta ultimas semanas hemos estado trabajando duro con Pfsense 2.0RC3 Current i386 para unir 2 redes atraves de una VPN, hay ocaciones donde no es posible alquilar una T1 para este tipo de tareas, no quedaria nada de ganancia para la empresa.

Por ello con los costos que se manejan actualmente en las conexiones tipo ADSL/Cable y las velocidades uno en el area voltea a verlas como una opcion.

Ahora hablando de las VPN, he trabajado con OpenVPN desde la version 1.0 de Pfsense si mal no recuerdo, desde que conoci a este firewall basado en FreeBSD me enfoque de lleno en el, ya que yo conoci a el mundo Unix gracias a FreeBSD y aun maestro(Lic. en Informatica Rene) de redes del Instituto Tecnologico de Tijuana, gracias profe.

Bien, anteriormente teniamos que hacer uso de las herramientas de openvpn que son usa serie de scripts que nos generan los archivos necesarios para tener una comunicacion segura, ya que el tema es: OpenVPN SSL/TLS, el cual se basa en tener una llave privada y una publica con la cual el tunel encriptara/desencriptara los paquetes que por ahi fluyan, esto es termimos basicos.

Ahora con pfsense 2.0 esto a cambiado, ya que el trae atraves de su gui las herramientas necesarias para llevar a cabo la generacion de los archivos antes mencionados.

Vamos a mostrar la red que deseamos unir atraves de openvpn.


Como se podra ver es una red muy comun, ahora esa red que se muestra pareciera que todo esta comunicado pero no, ya que solo muestro que ambas redes tiene una conexion a Internet, pero no hay ningun medio de comunicacion seguro entre ambas.

Por default sabemos que pfsense pide como minimo 2 tarjetas de red:
  • LAN
  • WAN
Son las que se muestran en la figura 1.

No voy a entrar en detalle hacerca openssl, PKI, etc, ya que de eso ahi mucho en Internet.

Vamos ensuciarnos las manos.

Certificados

Que necesitamos?

1; CA.
Common Name: ca.

2; Certificado Servidor.
Common Name: server.

Esto nos va generar en total 4 archivos.
  • ca.crt ===> todos deben ternerlo ==> Secreto (No)
  • ca.key ===> todos deben ternerlo ===> Secreto (Si)
  • server.crt ===> Solo el server debe tenerlo ===> Secreto (No)
  • server.key ===> Solo el server debe tenerlo ===> Secreto (Yes)
Estos son los archivos que va a necesitar el server, ahora tambien tenemos que generar los archivos del cliente y tendremos esto:

1; cliente1.
Common Name: cliente1.

Esto nos va generar en total 2 archivos.
  • cliente1.crt ==> Debe tenerlos tanto el cliente1 como el server ===> Secreto(No).
  • cliente1.key ===> Debe tenerlos tanto el cliente1 como el server ===> Secreto (Si)
Algo que tiene openvpn es que uno puede usar los mismos archivos del cliente en N numero de clientes pero no esto no me agrada, por ello yo prefiero generar para cada uno sus respectivas credenciales.

Dyndns

OpenVPN se basa en la direccion de Internet, pero con un servicio de adsl/cable nuestras direcciones publicas cambian y es dificil para OpenVPN mantener a el dia su operacion. Internet no es nada sin los DNS asi que por ello hago uso del servicio de dyndns y tengo lo siguiente:
  • server . dyndns . org
  • cliente1 . dyndns . org
Una vez dados de alta, debemos configurar el servicio de "Dynamic DNS".

Figura 2: Configurando Dinamic Dyndns.

Figura 3: Estatus de Dinamic Dyndns..

Esto debe hacerse en todos sus servers y clientes, la figura 3 nos debe mostrar nuestra IP en color, si no muestra su IP deben solucionarlo, lo que me ha pasado es que a veces el password lo pongo mal.

Creando credenciales--Cert Manager

1; Creando el CA certificado de Autenticidad.

Figura 4: Creando CA.

Figura 5: Ingresando datos de CA.

Debemos poner atención en los datos que ingresamos y siempre recordar el nombre que se ingresa en "Common Name" debe ser unico.

Y sobre todo el valor que elegimos en la duracion de la llave, ya que si se nos olvida y llega su tiempo la conexion se caera automaticamente, pero a muchos les gusta poner datos muy grandes para nunca preocuparse de cambiarlas, yo estoy usando 365 dias, pero me gusta mas hacer esto cada 180 dias.

Otro campo que deben ustedes juzgar en sus pruebas es el tamaño en bits de la llave, esto tiene una relacion con el CPU, ya que mientras mas grande, mas segura pero esto sacrifica CPU, si van a conectar varias redes aun punto central recordar que el server debe ser un equipo con un buen CPU.

Figura 6: Resultado de la creacion del CA.

Como podran ver ya tenemos el CA del server, con este vamos a firmar todos los certificados que vamos a crear enseguida.


Figura 7: Creacion de certificados.

Figura 8: Creando el certificado del servidor.

Ver la figura 8, hemos basado los datos en los que ingresamos cuando creamos los CA, recordar siempre nuestro "Common Name".

Figura 9: Creando certificado de nuestro cliente.

Figura 10: Listado de certificados creados.

Figura 11: Nuestro CA mostrando los certificados firmados.

Ya tenemos todos nuestros archivos creados, es momento de ir a openvpn a configurar nuestro 1er servidor.

OpenVPN

Vamos mostrando en nuestra red quien sera el server y quien sera el cliente1 para mayor claridad.


Figura 12: Detalle de red con OpenVPN.

La figura 12 muestra claramente donde vamos a iniciar la configuracion, sera en la red marcado como "OpenVPN-server" ahi es donde mi cliente desea entrar a utilizar mis recursos que son impresoras, servidor ERP, servidores de bases de datos, correo, archivos compartidos, etc.

Recordar que en OpenVPN no cambia el diseño servidor-cliente, por cada red que deseamos conectar a nuestro tunel(server) creamos un cliente, empezamos.

Figura 13: Creando el servidor.

Figura 14: Configurando el server.

Nuestro tunel cruzara por la red: 10.0.99.0/24, ninguna de sus redes debe hacer uso de esta red, el server siempre tomas las primera IP de esa red:

Figura 15: Interface del server.

Figura 16: Mostrando el server creado.

Ahora, yo deseo agregar unos parametros para mi cliente importantisimos de lo contrario mi tunel no funcionara bien. Para ello hago uso de la etiqueta que dice "Custom specific override¨.

Figura 17: Agregando parametros adicionales a mi cliente1.

Figura 18: Estatus de la opcion personalizada.

Hasta aqui hemos terminado la configuraciion de nuestro servidor de parte de OpenVPN, lo que sigue es abrir el puerto en el firewall para permitir el acceso a server por parte de los clientes, datos de la conexion:
  • Interface: WAN.
  • Protocolo: UDP.
  • Puerto: 1194 (Default).
Con esto se supone que nuestro servidor debe estar escuchando por peticiones en ese puerto via UDP, vamos a revisar:

Figura19: Server escuchando peticiones.

Lo que sigue es abrir el puerto 1194 en la WAN:

Figura 20: Regla para OpenVPN.

Figura 21: Estatus de la regla.

Algo que hace Pfsense automaticamente es agregar una interface llamada "Openvpn" en las reglas de su firewall y es sencilla "Todo entra y sale", que es lo hace en la v. 1.2.3, la diferencia es que ahora uno ya puede controlarla aun mas por que ya podemos configurar nuestras reglas como en la LAN/WAN,algo que muchos pediamos en las versiones anteriores, por fin se cumplio.

Figura 22: Regla de VPN en el firewall.

Ya con esto podemos recibir a nuestros clientes.

Configuracion de nuestro 1er cliente

Vamos sobre nuestro 1er cliente que desea accesar atraves de OpenVPN de manera segura.

Pero antes de llegar a openvpn, debemos recordar que nuestro cliente necesita ciertas credenciales para entablar esa comunicacion, arriba se los aclare, necesitamos por parte del server:
  • ca.crt
  • ca.key
  • cliente1.crt
  • cliente1.key
Vamos a bajarlos a nuestra computadora, ustedes deciden como llevarlos hasta el server yo uso memorias usb y voy fisicamente a el cliente1 para darselos.

Figura 23: Bajando archivos CA.

Figura 24: Bajando archivos de nuestro cliente.

Una vez que tiene su cliente esos archivos es momento de darselos, para ello deben abrirlos en con algun editor de texto, yo estoy usando WordPad, copeo el contenido y lo pego donde lo necesito:

Figura 25: Agregando CA as cliente1.

Figura 26: Contenido ejemplo de el contenido de las credenciales.

Figura 27: Pegando el contenido en cada campo.

Figura 28: CA dado de alta en nuestro cliente1.

Figuara 29: Dando de alta los certificados del cliente1.

Figura 30: Agregar el contenido donde se indica.

Figura 31: Certificados de cliente1 dados de alta.

Ya tenemos de lado del cliente todo lo necesario, lo que sigue es configurar nuestro openvpn para entablar la comunicacion con nuestro server.

Figura 32: Configurando cliente1.

Figura 33: Configuracion de cliente1.

Figura 34: Finalizacion de cliente1.

Figura 35: Estatus de OpenVPN en el server.

Figura 36: Estatus de OpenVPN en cliente1.

Probando Comunicacion

Ya nuestro tunel esta arriba, nuestro pfsense-cliente estos datos de interface del tunel:

Figura 37: Interface vpn del cliente1.

Ahora el tunel esta creado, pero si ustedes de cualquier lado del tunel tratan de llegar a los clientes no pasaran, porque una cosa es comunicacion entre el tunel 10.0.99.0/24 y otra cosa esa comunicacion entre las redes fisicas 192.168.2.0/24 y 192.168.50.0/24. Entonces la regla del tunel esta libre, ustedes deben abrir a nivel LAN en ambos lados para que fluya la comunicacion entre las 2 redes. En su firewall de lado del server abran una regla que permita todo de su LAN hacia la red 192.168.50.0/24, lo mismo del lado del cliente, una regla LAN que permita el trafico hacia la 192.168.2.0/24, pueden crear hasta un alias si gustan, esto es para pruebas, cuando se vayan a produccion deben permitir solo lo necesario.

Pingeo entre ambos servidores

Figura 38: Pingeo operando en ambos lados.

Figura 39: Pingeo de lado del cliente.

Figura 40: Pingeo de lado del server.

Listo.

Parece que la comunicacion esta operando, espero les sirva a alguien, lo que sigue es ajustar o probar varias tipos de escenarios principalmente lo referente a el tamaño de las llaves, el algoritmo de encriptacion, mientras mas fuerte creemos las llaves o elijamos un algoritmo mas alto recordar que su CPU sera afectado, pero esto sus pruebas se los diran y ustedes tendran que tomar la decision, saludos.

Versiones de pfsense

Figura 41: Version de pfsense para este manual.

Necesitan soporte en Baja California y sus alrededores: pmoreno@bajaopensolutions.com

NOTE: If u want this manual to be translate to English let me know please!!!

40 comentarios:

Alex dijo...

Excelente muchas gracias, estoy intentando seguir tu tutorial para crear un Tunel VPN con pfsense y Zentyal, espero y funcione.

Pedro Moreno dijo...

Ya dijo, suerte!!!

Alex dijo...

Que tal, mira con respecto a la configuracion del cliente en la parte que haces mencion de extraer el shared key del cliente, ahi no especificas correctamente de donde extraerlo, ademas haces mencion que lo saquemos del mismo cliente cuando lo tuve que sacar de la configuracion del server, no se si lo interprete mal yo pero kreo ke no.

Por otro lado no sabes como hacerle para que se configuren varios clientes de diferentes redes o es necesario crear un server para cada cliente.


Por cierto funciona correctamente, ya lo probre en la version 2.0 RELEASE y todo sin problemas gracias.

Pedro Moreno dijo...

Cierto, una disculpa,la shared sale del server tambien, un error humano.

Lo bueno que lograstes salir del hoyo.

Por otro lado, hablas de varias redes, si solo es un server a el que tus redes desean cruzar, debes crear solamente las llaves para cada cliente nomas toma en cuenta la maquina que sserver debe tener poder para procesar todo los tuneles de todas las redes que deseas cruzar por ahi.

Saludos!!!

Alejandro Diaz dijo...

Que tal Pedro, te queria hacer una pregunta, si has configurando IPsec en pfsense 2.0?

Pedro Moreno dijo...

Hola Alejandro.

No he utilizado IPsec.

Saludos!!!

pannegro dijo...

mi consulta es la siguiente y se pueden conectar usuarios externos? osea si se les crea certificados y demases pueden acceder a esta vpn?

Pedro Moreno dijo...

Hola pannegro.

Claro que si, siempre y cuando sea atraves de openvpn, puedes hacerlo desde windows, linux, unix, mac.

Como tu dices con sus respectivas llaves, ahora esto de las llaves es para administrar mejor quien entra, ya que puedes usar 1 sola llave para todos, pero no es recomendado.

Tambien recordar que las llaves tiene fecha de caducidad, a lo mejor le permites entrar a alguien solo 1 semana por ejemplo.

Tu debes de saber como vas a administrarlas, openvpn es un gran software, lee su doc te lo recomiendo, saludos!!!

Anónimo dijo...

Buenas estoy intentando montar una vpn multisite para conectar varias redes me podria indicar. Gracias un saludo.

Pedro Moreno dijo...

Hola, multisite? que todos se pueden comunicar o que todos se puedan comunicar a una matriz y que la matriz se pueda comunicar con todos?

Saludos.

Bernat Costa Reimóndez dijo...

Hola,

He intentado seguir el tutorial, pero tengo una duda. En mi caso, no puedo montar el segundo pfsense como cliente. Tengo que montarlo en un cliente OpenVPN Windows. Tengo el servidor OpenVPN configurado como dice el tutorial, en modo P2P, pero no consigo conectar una maquina con windows con el clienteVPN. ¿Me podría asesorar sobre como configurar el cliente Windows?

Mi problema es el siguiente: tengo una lan con un pfsense y un windows externo que quiero conectar a esa lan. Debo poder hacer pings desde la lan al windows externo y viceversa. Solo he conseguido conectarme con modo Remote Acces en el pfsense, pero con ese modo, no puedo acceder desde la lan al windows externo.

Pedro Moreno dijo...

Hola, a ver que configuracion estas usando para tu windows?

Voy a actualizar para meter como configurar un cliente windows, saludos.

Juliancho dijo...

muchas gracias por tu colaboracion y el excelente tutorial me podrias ayudar diciendome que regla le podria agregar al firewall para que se pudieran dar ping ambas redes es que la verdad me funciona el tunel pero no se pueden ver los equipo muchas gracias

Pedro Moreno dijo...

Hola, recuerda que ya tienes 2 tarjetas en tu fw, lan, ovpn.

Tienes 2 redes ya por asi decirlo,

LAN-A 192.168.1.0/24
LAN-B 192.168.2.0/24

Miralas como tal, y por ejemplo si deseas que tus redes puedan pingear, crea 2 reglas:

Regla 1 LAN-A ICMP any de tu lan-a subnet hacia lan-b subnet, yo aqui crearia un alias a la LAN-B y asi la regla solo seria para esa red, mas seguro.

Regla-2 la misma regla en tu tarjeta ovpn de lan-a.

Esto mismo viceversa en el pfsense de tu lan-b.

Asi de simple, checalo, cualquier cosa por aqui andamos saludos!!!

Pedro M Ramírez S dijo...

Hola Pedro saludos, en primer lugar quiero felicitarte por tan importante aporte con este tutorial sobre openvpn en pfsense, estoy trabajando con el tutorial y te pido por favor que coloques el procedimiento por esta misma vía de como extraer la shared key desde el server, gracias nuevamente!!!

Pedro M Ramírez S dijo...

Hola Pedro: hice el procedimiento para extraer la shred key desde el servidor de la siguiente manera: me conecté vía ssh al servidor y ejecuté el siguiente comando: openvpn --genkey --secret shared.key
Luego visualicé contenido con el siguiente comando: cat shared.key
Copié el contenido y lo pegué en un documento de texto para luego pegarlo también en el cliente, espero haberlo hecho bien, de todas maneras si este no es el procedimiento espero me puedas orientar por esta misma vía!

Pedro Moreno dijo...

Hola, mi forma de hacerlo es atraves del mismo GUI, me conecto a ambos equipos remotamente y ahi mismo hago la copia.

Ya se somo muy paranoicos, como tu mencionas via ssh esta excelente.

Saludos!!!

Alvarito dijo...

Hola Pedro,

Primero que nada felicitarte y darte las gracias por la excelente guía, alguna vez cree vpn's en sense 1.2.x y funcionaba bien, instalé el 2.0.3 y no logro comunicar las LAN's de cada VPN, leyendo los comentarios realicé lo que comentaste respecto de crear las reglas, peros sigue sin funcionar...

Ahora mismo voy a probar crear un gw basado en la interfaz ovpns1 (servidor) y ovpnc1 (cliente) para intentar así crear una ruta estatica (que ha cambiado un montón desde el anterior versión).

lo que no entiendo es porque no funcionan las *push "route lanA xxx"*

¿Me podrías orientar que puede estar sucediendo que no se ven las LAN's ?

Gracias!

Pedro Moreno dijo...

Hola Alvarito, en Diagnostic->Routes te aparecen las rutas a esas redes?
Saludos.

Pedro M Ramírez S dijo...

HOLA PEDRO SALUDOS, TENGO MI SERVIDOR CONFIGURADO SITE TO SITE CON OTRA SEDE, AHORA NECESITAN QUE AGREGUE UN CLIENTE WINDOWS QUE PERTENECE A OTRA RED, LEÍ EN POST ANTERIORES QUE IBAS A ACTUALIZAR PARA AGREGAR COMO AGREGAR CLIENTES WINDOWS, TENDRAS ALGO DE INFORMACIÓN AL RESPECTO?

alejandro tirado dijo...

Hola me podrias ayudar a conectar 2 redes LAN que estan en diferentes ciudades (Culiacan y DF) Mediante OpenVPN???? que ya busque en toda la web y no encuentro como hacerle :( espero me puedas ayudar mi correo es: jesus.alejandro.tirado@gmail.com
ha y por cierto bonita la cuidad de Tijuana...

Alejandro Diaz dijo...

El tutorial esta muy bien explicado, se mas especifico, que dudas tienes.

Luis A. B. Rojas dijo...

Estimado Pedro, Recibe un cordial saludo desde Venezuela. Primeramente felicitaciones por tu tutorial, esta muy bueno. Sin embargo queria comentarte que no ha sido posible para mi hacer pin desde los equipos (pc windows) que estan conectados al pfsense. Es decir, La vpn esta levantada en ambos extremos ya que al intentar hacer ping desde la sede A a la sede B y viceversa llega perfectamente, pero al intentar hacer ping desde la sede A a un equipo conectado a la sede B no llega, ni de la sede B a la A. Por lo tanto no puedo compartir archivos entre los equipos conectados en ambas sedes que es mi objetivo.
Gracias de ante mano.

Pedro Moreno dijo...

Hola Luis.

Solo para el registro,que version de pfsense estas trabajando?

Bien, dices que todo esta levantado, ya habilitastes la reglas en tu interface OVPN en el firewall para poder comunicar A con B y viceversa?

Si ambas estan en linea, y ya agregastes ambas redes con el push, ya solo faltarian las reglas.

Ya debugeastes la comunicacion con tcpdump? no llega nada?

Saludos.

Anónimo dijo...

Me salvaste !!

Gracias Bro!

Excelente manual

Durden.

Pedro Moreno dijo...

Que buenos, saludos.

Sergio Sam dijo...

hola amigo no entiendo eso de las reglas ... si yo tengo puesto tcp any any any en lan en ipsec en openvpn
y no pasa el ping entre sucursales por mas que agregue los push ...
no entiendo donde tengo que agregar las "reglas" para que pase el ping o el trafico entre sucursales ....
saludos

Alejandro Diaz dijo...

Hola Sergio, el motivo de que no puedas hacer ping, es que en tu regla estas ocupando el protocolo tcp, sin embargo, el ping usa el protocolo ICMP, con eso se deberia de corregir la problematica del ping.

Saludos

Carlos Verdugo dijo...

Hola buenas tardes, estoy conectado en una red VPN: Pfsense y Debian.. Pero no consigo hacer ping. He puesto las reglas de conexión any *** es decir que pueda hacer cualquier cosa todas las redes con cualquier protocolo y nada. Se me pasa algo? Que puedo hacer?

Alejandro Diaz dijo...

Hola Carlos.

Has observado en tus rutas, si se agregaron las redes que estas queriendo alcanzar por la VPN?

netstat -nr

Saludos.

Carlos Verdugo dijo...

Si, se han creado. Podrías ponerte en google + para hablar?.. muchas gracias de antemano y felicidades por el blog.

Pedro Moreno dijo...

Tcpdump, llega trafico?
Saludos.

David dijo...

Excelente entrada.
Me ha servido y mucho!
Funciona todo a la perfección.

Muchas gracias.

Un saludo!

Edwin Enrique Flores Bautista dijo...

Excelente aporte, bien didáctico y detallado

Lima - Perú

juliana tellez crisanto dijo...

hola instale pfsense pero ahora no me puedo conectar con active directory.Me puede ayudar por favor!!!!

Pedro Moreno dijo...

No esta claro tu problema, saludos.

Anónimo dijo...

Hola amigo, estas reglas para que se vean entre redes , tambien es valido para una vpn tipo road warrior?. Gracias.

Pedro Moreno dijo...

Cuando pfsense te da el setup para tu cliente en el lado del roadwarrior creo que el ya te pone todo listo para trabajar, saludos.

Anónimo dijo...

Asi es, me dá hasta la configuracion para simplemente ejecutarla con el cliente pero a la hora de ver entre redes aun no se ven, es por eso que te preguntaba, he estado revisando las reglas del Server pero no logro hacer que se vean entre redes, quiero probar rutas estaticas, que opinas?, una ruta en el server que indique ver la red del cliente por el gateway por defecto, pero como puedo poner una ruta estatita en el PFsense??? Alguna recomendacion ?.

Gracias.

Pedro Moreno dijo...

Hola, aqui te recomiendo abrir tcpdump en la consola y revisar el trafico que esta cruzando por tu tunel y ver si ahi trafico, saludos.