Google IPSec Site-to-Site VPN entre WatchGuard XTM y Linux OpenSwan | EL TIPO DE INFORMATICA

jueves, 6 de marzo de 2014

IPSec Site-to-Site VPN entre WatchGuard XTM y Linux OpenSwan

Supongamos que tenemos que conectar 2 oficinas a traves una conexión VPN, en una de las oficinas tenemos un equipo WatchGuard XTM como Gateway y en la otra tenemos un equipo Linux con OpenSwan (que es una implementación de IPSec para Linux). Podemos hacer la conexión VPN entre estos 2 equipos (y la red detras de ellos) usando IPSec, solo tenemos que asegurarnos de configurar correctamente los parámetros de  IPsec para cada fase, de manera que en la negociación de los algoritmos criptograficos a utilizar ambos equipos puedan elegir protocolos compatibles. Hay que tener en cuenta que basicamente la conexión IPSec en modo tunel (que es el modo a utilizar cuando queremos crear un VPN) se realizara en 2 fases: en la primera fase (llamada "Main Mode") los 2 puntos se autenticaran uno a otro mediante una clave compartida  o certificados y negociaran los algoritmos de encriptacion a utilizar durante el intercambio de esta clave, y en la segunda fase se negociara la politica IPSec que utilizaran, por ejemplo, el tipo de trafico y las direcciones o segmentos de red en ambos lados que utilizaran el tunel. Esta es una explicación bastante resumida de todo lo que hace IPSec (a mi entender), si quieren entender mejor todo lo que hace IPSec les recomiendo visitar este link.

Para la autenticación entre los puntos de nuestro VPN utilizaremos una clave compartida o "Shared Key", e identificaremos cada punto por la IP externa de cada uno. Vamos a llamar al punto donde esta el WatchGuard XTM el punto A, y su IP sera la 6.6.6.6, la red que estará detrás de este equipo sera la 192.168.1.0/24. El punto donde esta el equipo Linux con OpenSwan sera el punto B y su IP sera 7.7.7.7, la red detras de este sera 192.168.2.0/24. La clave compartida que utilizaremos para autenticarlos sera "MiClaveVpn". Así que el escenario se veria mas o menos de esta forma:

Dagrama Conexion VPN


Como ven, incluyo en el diagrama los routers instalados por el suplidor de Internet en ambos lados, mas adelante veran porque. Ya que tenemos claro el escenario, vamos a empezar la configuración desde el equipo WatchGuard, así que abriremos el "Policy Manager", en el menu superior hacemos clic en "VPN" y seleccionamos "Brach Office Gateways...":

WatchGuard VPN

En la ventana de "Gateways" que abrira, haremos clic en "Add" y nos abrira la siguiente ventana. En esta pondremos el nombre para esta conexión, para este ejemplo le puse "VPN01", insertaremos tambien aqui la clave compartida que definimos para esta conexión (MiClaveVPN). Luego haremos clic en el boton "Add" mostrado mas abajo:


En esta próxima ventana (mostrada en el siguiente grafico) insertaremos la información sobre los dos gateways, como la IP del punto remoto (OpenSwan) y la interface del WachGuard que utilizaremos para esta conexión. En la primera sección de esta ventana (Local Gateway) definiremos el ID de este punto para el tunel, que sera el nombre con el que se identificara el WatchGuard con el punto remoto. Seleccionamos la opción "By Domain Information" y hacemos clic en el boton "Configure" que se encuentra justo al lado, esto nos abrira una nueva ventana donde seleccionaremos "Domain Name", escribiremos al lado la IP con la cual llegaremos al otro punto (para el caso de este ejemplo seria "6.6.6.6") y hacemos clic en OK. Volveremos la ventana anterior donde seleccionaremos la interface externa del WatchGuard correspondiente a la IP con la cual haremos la conexión VPN (en el caso de este ejemplo, la interface externa utilizada se llama "Internet"). En la sección de mas abajo (Remote Gateway) indicaremos la IP del punto remoto, seleccionaremos "Static IP Address" e insertaremos la IP del punto remoto (para este caso 7.7.7.7). Luego al igual que en "Local Gateway" y seleccionaremos la opción "By Domain Information" y haremos clic en "Configure" para escribir en "Domain Name" la IP remota (7.7.7.7), este sera el nombre con el que WatchGuard esperara que se identifique el equipo Linux. Al final la ventana se veria de esta manera:

Configuracion Gateways WatchGuard

Hacemos clic en "Ok" y volveremos a la ventana inicial donde escribimos la clave compartida. En esta ventana haremos clic en el Tab "Phase 1 Settings". Desactivaremos la opción "Dead Peer Detection", se vera entonces de esta manera:

Configuracion VPN Gateways WatchGuard

Hacemos clic en "OK" y con esto hemos configurado los Gateways para esta conexión, ahora definiremos el "Tunel" que usara estos Gateways, donde indicaremos las redes detrás de cada Gateway y la dirección del trafico, o sea, si el trafico sera en una sola dirección o en ambas. Para este caso, y quizas para la mayoría, sera en ambas direcciones (bidireccional).  Hacemos clic nuevamente en "VPN" del "Policy Manager", seleccionamos "Brach Office Tunnel..." y luego hacemos clic en "Add". Debemos ponerle un nombre a esta Tunel un nombre, podemos nombrarlo "TUNEL-01", debajo seleccionaremos el Gateway que utilizaremos, que es el que creamos anteriormente "VPN01". Luego hacemos clic en el boton "Add" para indicar cuales seran las redes que transitaran por el tunel. En la local agregaremos "192.168.1.0/24" y en la remota "192.168.2.0/24", nos aseguramos que en la sección "Direction" este indicado "<==>", que indica que el trafico sera bireccional, y luego hacemos clic en OK. Luego hacemos clic en el tab "Phase 2 Settings", en la sección "IPSec Proposals" veremos agregado "ESP-AES-SHA1" por defecto. Agregaremos a esta lista dos mas haciendo clic en "Add", estas seran "ESP-3DES-SHA1" y "ESP-DES-SHA1". Hacemos clic en "OK" y ya tenemos configurado el Tunel para nuestra conexión, al final la ventana del tunel que creamos se veria de esta manera:


Ahora podemos guardar y aplicar la configuración en el WatchGuard y pasar entonces al equipo Linux con Openswan. Primero vamos a asegurarnos que IPTables este configurado adecuadamente, si necesitan un repaso de IPTables les recomiendo que visiten este post. Debemos tener una regla INPUT para la interface externa que permita el trafico UDP a los puertos 4500 y 500 desde la IP 6.6.6.6 (damos por sentado que ya tiene OpenSwan instalado). Si usan una regla "MASQUERADE" asignar la IP externa del equipo al trafico saliente a Internet, o si usan "SNAT", tendrán que hacer una excepcion para que el trafico que se dirija a la red remota con la cual nos conectaremos via VPN no vaya a ser afectada por el NAT configurado por estas reglas, la regla seria de esta manera:

iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -d ! 192.168.1.0/24 -j SNAT --to-source 7.7.7.7

Con esto le decimos a IPTables que enmascare cualquier trafico saliente de la red con excepción del trafico que vaya dirigido a la red remota. Basicamente esto es lo necesario en IPTables, vamos ahora a la configuración de OpenSwan. El archivo de configuración se encuentra en /etc/ipsec.conf, aqui configuraremos los parámetros de IPSec, como los puntos del VPN, las redes a enlazar, etc. el contenido de este archivo para este ejemplo seria el siguiente:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# basic configuration
config setup
        # NAT-TRAVERSAL support, see README.NAT-Traversal
        nat_traversal=yes
        protostack=netkey
        nhelpers=0
        uniqueids=yes

# Add connections here
conn $default
        keyingtries=3

conn vpn-watchguard
        authby=secret
        left=6.6.6.6
        leftsubnet=192.168.1.0/24 
        leftnexthop=6.6.6.5
        leftid=@6.6.6.6
        right=7.7.7.7
        rightid=@7.7.7.7
        rightnexthop=%defaultroute
        rightsubnet=192.168.2.0/24
        type=tunnel
        auto=start
        pfs=no

#Disable Opportunistic Encryption
include /etc/ipsec.d/examples/no_oe.conf

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------          

Todo lo que es "left" se refiere al otro lado de la conexión VPN. La sección "leftnexthop" que señalo en negrita de la configuración anterior, indica el proximo salto antes de llegar al equipo al equipo que manejara el VPN del otro lado del tunel (en este caso el WatchGuard), generalmente habra un router delante que es quien le da la conexión a Internet, como se muestra en el diagrama de mas arriba. El resto de esta configuración es bien descriptiva así que podemos continuar. El siguiente paso sera configurar el "Share Key" o clave compartida para esta conexión VPN, para esto editaremos el archivo "/etc/ipsec.conf" y agregaremos la siguiente linea:


@7.7.7.7 @6.6.6.6 : PSK "MiClaveVPN"

Con esto ya tenemos nuestro OpenSwan configurado para la conexión (mucho mas rapido verda?). Antes de iniciar el tunel, vamos a verificar que esto este bien con Openswan, ejecutaremos el comando "ipsec auto verify" y si todo esta bien deberia devolvernos algo como esto:

Salida del comando ipsec verify

Ahora para iniciar nuestro tunel podemos ejecutar desde este equipo el siguiente comando:


#ipsec auto --start vpn-watchguard 

Ya debe estar arriba nuestro VPN entre WatchGuard y OpenSwan, podemos verificarlo ejecutando "ipsec auto --status", aparecerán varias lineas, pero las que buscaremos serán las siguientes:


Y con esto ya tenemos nuestras redes conectadas via VPN a traves de dos equipos diferentes usando el standard IPSec. En caso de que les de algún error les recomiendo hacer el debugging desde Linux, pueden buscar en el archivo /var/log/auth.log ya que en este archivo Openswan va registrando cada actividad y es mas facil seguir cualquier error. 

1 comentario:

  1. Entiendo tus configuraciones y lo que haces solo que tengo una duda, con las direcciones que les has asignado tanto a tu watchguard y a tu equipo linux, esas direcciones son publicas, en teoria si no tubieses esas direcciones disponibles tendrias que crear tu tunnel entre los router cierto?

    ResponderEliminar