martes, 21 de enero de 2014

Mikrotik to Cisco ASA IPsec VPN multiple policies

Vamos a empezar nuestra serie de artículos dedicados al mundo de Mikrotik.

Tenemos el siguiente escenario, la sede central tiene un cisco Asa con 3 vlans internas, las cuales queremos ver a través de la vpn, por otro lado tenemos el mkrotik que únicamente tiene una red la cual no queremos que se vea desde la sede central.

Cisco Asa:

   Wan: 1.1.1.1
   IDRAC: 172.16.0.0/24
   DMZ: 10.0.1.0/24
   INSIDE: 192.168.100.0/24


Mikrotik:

   Wan: 2.2.2.2
   LAN: 192.168.5.0/24








Configuración del ASA via ASDM 7.1


Nos vamos al menú "Wizards/Vpn Wizards/Site-to-site VPN Wizard" y en la segunda pantalla le indicamos la ip publica del mikrotik y la interfaz del ASA donde esta la salida a internet, normalmente Outside.

 
 
En la siguiente pantalla dejamos seleccionado Ike versión 1 (ya se que no es la mejor opción, pero ahora mismo es la que tengo probada, cuando comprueba que fuciona con la versión 2 modificare el tutorial)
 
 
 

En la siguiente pantalla tenemos que seleccionar las redes que van a ir por la VPN, en local network tenemos que añadir las 3 redes que queremos proteger y la red interna de destino.

 
 
 
En la siguiente pantalla nos pedirá la clave compartida de IKE v1, le ponemos la que queramos y nos la apuntamos para poner la misma en el mikrotik
 
 
 

En la siguiente pantalla configuramos los algoritmos de cifrado, lo dejamos como esta, a pesar de que se podría afinar mas, esto os lo dejo para que penséis un poquito :P, sin tocar nada funciona.
 
 
 
En la ultima pantalla "Miscellaneous" hay que seleccionar la ultima casilla "Exemp Asa side Host/network from address translation" y seleccionar una interfaz, aquí es donde viene el ki de la cuestión ya que esto no te lo hace el wizard y luego tendremos que añadir manualmente.
Como solo nos deja seleccionar 1 interfaz y tenemos 3 redes, tendremos que seleccionar la interfaz de 1 sola de las redes, por ejemplo DMZ.
 
 
 
Una vez hecho esto ya solo nos queda darle a siguiente y en la siguiente pantalla le damos a finalizar.
 
Ahora nos vamos a la pestaña de configuración/site-to-site VPN/advanced/Ike Parameters y el parámetro "Identity sent to Peer" lo ponemos en "Address"
 
 
Ahora solo nos falta añadir las excepciones al nat que faltan, para ello nos vamos a "Configuration/firewall/Nat Rules" y le damos a "Add Nat Rule Before "Network Object" Nat Rules... Como ya tenemos añadido a través del wizard la red DMZ nos faltaran las otras 2, primero crearemos la red idrac y luego la red inside. Ojo, hay que dar de alta los network objects para poder añadirlo en el source address y el destination address, sino nos dara error.
 
 
 
Con la Nat Rule de Inside hacemos lo mismo exactamente, una vez realizado esto, tenemos que asegurarnos de que están de las primeras reglas por delante de "Network Object NAT" sino no funcionara.
 
Con esto dejamos listo la parte de Cisco ASA.
 
 
 

Mikrotik:

Primero que nada creamos un "IPsec Proposal y seleccionamos "sha1" y "aes-256"
 
 
 
 
 
Ahora creamos las 3 "IPsec Policy", tenemos que crear un IPsec Policy por cada red que tenemos que acceder del otro extremo, 192.168.100.0/24 10.0.1.0/24 y 172.16.0.0/24
 
 
 
En la pestaña de Action nos aseguramos de que en "level" este seleccionado "unique" y que Proposal este el que hemos creado en el paso anterior "Asa_IPSEC"
 
 
Una vez tenemos los 3 creados creamos un "new peer", aquí le tendremos que poner la preshared key que pusimos previamente en el cisco Asa.
En Hash Algorithm pondremos "sha1", en Encryption Algorithm "aes-256", en Lifetime todo a 0 y en Lifebytes "10" en DPD Interval "60" y en DPD Máximum Failures "1"
 

 
 
Por ultimo ya solo nos queda crear las reglas de Nat para evitar que mande nuestro trafico a internet y lo mande por el túnel.
Primero creamos una Address Lists, le llamaremos ASA y metemos las 3 redes a las que queremos llegar a través de la VPN
 
 
 
Ahora vamos a la pestaña NAT y le damos a añadir, en la pestaña Chain seleccionamos "srcnat", en src Address ponemos el rango local, en este caso 192.168.5.0/24
 
 
 
ahora nos vamos a la pestaña advanced y en dst. Address list seleccionamos "Asa" 
 
 
El resto lo dejamos por defecto.
Ahora solo tenemos que mover esta regla nat hasta el primer puesto y listo, con esto ya tendremos funcionando la VPN entre las 2 sedes con multiples redes.
 
Espero que le sirva a alguien de ayuda :)


martes, 14 de enero de 2014

Exchange 2010 + nginx reverse proxy + Clientes Outlook 2011 Mac

Parece que la conexión de los clientes Outlook a Exchange da problemas con la autenticación de usuario, con el añadido de que usar un proxy inverso para filtrar las solicitudes elimina ciertas cabeceras necesarias. Al intentar configurar un cliente, fallaba la autenticación en la mayoría de los casos, aunque en alguno de los intentos se crease la cuenta en el Outlook 2011, nunca sincronizaba.

Para la configuración de Outlook es necesario especificar la dirección del servidor Exchange 2010, con la ruta al Exchange Web Services. El resto de parámetros son los comunes: dirección de email, usuario del dominio y contraseña. En los ejemplos, utilizaremos correo.dominio.com como FQDN del servidor.

La dirección típica del EWS es https://correo.dominio.com/ews/exchange.asmx . Ojo porque en la autoconfiguración hay ocasiones en las que el nombre del subdirectorio está escrito en mayúsculas (EWS) y eso puede generar problemas en el entorno case-sensitive del proxy inverso. 

En primer lugar, es necesario activar la autenticación básica. Tenemos que acceder a la administración de IIS del servidor Exchange, y en Default Web Site encontraremos el sitio de EWS. Buscamos la sección IIS -> Autenticación.


Hemos de modificar el parámetro para que la autenticación básica esté Habilitada.


Tras este cambio, procedemos a reiniciar el IIS con el comando iisreset desde una línea de comandos con privilegios.


Para hacer la prueba, intentaremos acceder en local al directorio /ews/exchange.asmx y se debería mostrar un documento XML.

Si la prueba es satisfactoria, el equipo ya se podrá conectar en local al Exchange y autenticarse como es debido, pero en nuestra infraestructura contamos con un servidor proxy inverso nginx que hay que configurar para que deje pasar ciertas cabeceras al Exchange cuando se intenta acceder al mismo desde el exterior.

Accederemos por SSH al servidor ngnix y editaremos el site relacionado con el Exchange (owa):


nano /etc/nginx/sites-enabled/owa


En este fichero, vamos a añadir una sección location /ews para el subdirectorio EWS:

server {
        listen       80;
        server_name correo.dominio.com;
        server_name autodiscover.dominio.com;

        # Redirect any HTTP request to HTTPS
        rewrite ^(.*) https://correo.dominio.com$1 permanent;

        error_log  /var/log/nginx/owa-error.log;
        access_log /var/log/nginx/owa-access.log;
}

server {
        listen       443;
        server_name correo.dominio.com;
        server_name autodiscover.dominio.com;

        # Redirect from "/" to "/owa" by default
        #rewrite ^/$ https://correo.dominio.com/owa permanent;

        # Enable SSL
        ssl                     on;
        ssl_certificate         /etc/nginx/ssl.crt/server.crt;
        ssl_certificate_key     /etc/nginx/ssl.key/server.key;
        ssl_session_timeout     5m;

        # Set global proxy settings
        proxy_read_timeout      360;
        proxy_pass_header       Date;
        proxy_pass_header       Server;
        proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

        location /      { proxy_pass http://192.168.2.2; }
#      location /owa      { proxy_pass http://192.168.2.2/owa; }
        proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

        location /      { proxy_pass http://192.168.2.2; }
#        location /owa      { proxy_pass http://192.168.2.2/owa; }
#        location /rpc      { proxy_pass http://192.168.2.2/rpc; }
#        location /Microsoft-Server-ActiveSync { proxy_pass http://192.168.2.2/Microsoft-Server-ActiveSync; }

        location /ews {
            proxy_http_version      1.1;
            proxy_pass_request_headers on;
            proxy_set_header        Host            $host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            more_set_input_headers  'Authorization: $http_authorization';
            proxy_set_header  Accept-Encoding  "";
            proxy_pass              https://192.168.2.2/ews;
            proxy_redirect          default;
            #headers-more mod needed
            more_set_headers        -s 401 'WWW-Authenticate: Basic realm="correo.dominio.com"';
    }
        error_log /var/log/nginx/owa-ssl-error.log;
        access_log /var/log/nginx/owa-ssl-access.log;

}

(En negrita la sección añadida, ojo con los saltos de línea!)

Para que el parámetro more_set_headers funcione, necesitamos el módulo headers-more incluído en el paquete nginx-extras de Debian.