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!!!