lunes, abril 24, 2006

Algo acerca de MPLS y sus posibles usos

MPLS es una tecnología con mucho auge, aunque todavía la mayor parte de los administradores de red la desconoce por completo, o desconoce sus posibilidades. En este artículo intentaré dar una introducción a la tecnología y explicar sus usos más comunes.


Qué es

Wikipedia define MPLS como:
MPLS (siglas de Multiprotocol Label Switching) es un mecanismo de transporte de datos estándar creado por la IETF y definido en el RFC 3031. Opera entre la capa de enlace de datos y la capa de red del modelo OSI. Fue diseñado para unificar el servicio de transporte de datos para las redes basadas en circuitos y las basadas en paquetes. Puede ser utilizado para transportar diferentes tipos de tráfico, incluyendo tráfico de voz y de paquetes IP.

MPLS fue originalmente propuesto por un grupo de ingenieros de Cisco, con el nombre de "Tag switching", fue entregado a la IETF y luego del proceso de estandarización cambió de nombre.


Cómo funciona

Es de notar que la conmutación IP es realizada en la capa 3 y está basada en la dirección ip destino (en algunos casos también en la ip de origen); si miramos una tabla de enrutamiento sólo vemos la asociación "red destino" - "próximo salto".
Por ejemplo:
192.168.0.0/24 via 10.10.2.1
192.168.1.0/24 via 10.10.2.2
192.168.2.0/24 via 10.10.2.3
0.0.0.0/0 via 10.10.2.254

El enrutamiento en sí, impone restricciones y ciertos cuidados en nuestras redes, como por ejemplo que en la asignación de direcciones ip no haya colisiones (dos segmentos de red no pueden tener las mismas direcciones).
Lo interesante de MPLS es que la conmutación de paquetes está basada en etiquetas y se realiza entre la capa 2 y la capa 3 (no depende del encabezado ip), estas etiquetas son agregadas antes del ingreso a la red MPLS y son removidas cuando los paquetes salen de ella.
MPLS funciona adicionando a los paquetes un header MPLS, que contiene una o más etiquetas, esto es llamado "label stack".


Cada etiqueta contiene 4 campos:
* 20 bits - Valor de la etiqueta.
* 3 bits - Campo experimental reservado para usos futuros.
* 1 bit - Final de la pila. Si tiene el valor 1 entonces es la última etiqueta de la pila.
* 8 bits - Campo TTL (time to live)


Arquitectura de una red MPLS


Nota: esta imagen fue generada con el simulador "Open SimMpls".

  • LER (Label Edge Router): elemento que inicia o termina el túnel (agrega y quita las etiquetas). Es el punto de entrada/salida a la red MPLS. Un router de entrada se conoce como Ingress Router y uno de salida como Egress Router. Ambos se suelen denominar Edge Label Switch Router, ya que se encuentran en los extremos de la red MPLS.
  • LSR (Label Switching Router): elemento que conmuta etiquetas.
  • LSP (Label Switched Path): nombre genérico de un camino MPLS (para cierto tráfico o FEC), es decir, del túnel MPLS establecido entre los extremos. Se debe tener en cuenta que un LSP es unidireccional.
  • LDP (Label Distribution Protocol): un protocolo para la distribución de etiquetas MPLS.
  • FEC (Forwarding Equivalence Class): nombre que se le da al tráfico que se encamina bajo una etiqueta. Subconjunto de paquetes tratados del mismo modo por el conmutador.


Posibles usos

Los sectores que más provecho pueden sacar de MPLS, son los proveedores de servicio (carriers), las grandes empresas e instituciones gubernamentales (o sea, las grandes redes). Algunas empresas medianas pueden contratar un servicio de VPNs, basado en MPLS de algún proveedor de servicio, aunque la parte divertida la realiza el proveedor.
Los usos más importantes son:

* MPLS-VPN
Con MPLS pueden realizarse robustas VPNs, más escalables y menos costosas que otras alternativas como IPSec, ATM o frame relay; y además agrega QoS.

* Ingeniería de tráfico / QoS / Congestión
El enrutamiento IP tradicional suele llevar a sobrecargar los caminos más cortos (a veces caminos más largos pueden tener menor congestión y menor delay).
Respecto a este problema MPLS puede ser utilizado para:
- Maximizar la utilización de los enlaces y los nodos
- Garantizar el nivel de delay (respetar los SLAs)
- Minimizar el impacto de las fallasLos principales protocolos para realizar ingeniería de trafico con MPLS son CR-LDP y RSVP-TE.

* Integración de redes diversas: ATM, Frame relay, IP, Ethernet y ópticas
Mantener una red, es más barato que mantener muchas. Con MPLS podemos armar una red de transporte universal.


Algunas consideraciones
  • Cuando se pensó la conmutación basada en etiquetas, se creía que podía ser mucho más rápida que la basada en los encabezados IP, ya que requiere menos procesamiento y es posible implementarla en hardware; pero el desarrollo de algunas tecnologías como los circuitos ASIC, o la conmutación basada en TCAM y CAM, han hecho posible que la conmutación basada en IP pueda ser tan rápida como la basada en etiquetas.
  • Las VPN basadas en MPLS suelen quedar confinadas a un único proveedor de servicio.
  • Una alternativa a MPLS es L2TPv3, aunque todavía está en borradores.


Referencias

martes, abril 11, 2006

Es habitual encontrar administradores de red, que en un rapto de paranoia o por desconocimiento de las funciones de ICMP, filtran todo el protocolo sin reparar en las consecuencias de esto. Bloquear todo icmp puede traer bastantes molestias, cuando no, serios problemas; por otro lado, no bloquear cierto tipo de mensajes ICMP puede conllevar el riesgo de sufrir algunos ataques basados en las debilidades del protocolo.
En este artículo repaso qué es ICMP, qué permitir y qué denegar de este maravilloso protocolo.

Wikipedia define ICMP como:
"ICMP (Internet Control Message Protocol)
El Protocolo de Control de Mensajes de Internet (ICMP por sus siglas en inglés) es uno de los protocolos centrales de la suite de protocolos de Internet. Es usado principalmente por los Sistemas operativos de las computadoras en una red para enviar mensajes de error, indicando por ejemplo que un servicio determinado no está disponible o que un router o host no puede ser localizado."

Según el modelo OSI ICMP es un protocolo de capa 4, la denominada capa de transporte, esto se debe a que ICMP es encapsulado en paquetes IP.
Ahora ¿qué transporta ICMP? Para empezar, no transporta datos de las aplicaciones de usuario, sino información de control. Esta información de control es usada como soporte de los otros protocolos de transporte.
ICMP está definido por las primeras RFCs (rfc792 y rfc1122.txt), la primera data de 1981. Podemos encontrar una lista de los tipos de mensajes ICMP en:
http://www.iana.org/assignments/icmp-parameters

Usos útiles de ICMP
(lo que no se debe filtrar sin razón)

Destination Unreachable - Para indicar el fracaso de muchos protocolos (como TCP, UDP, GRE, etc.) se usan paquetes de icmp, en particular de tipo 3 "Destination Unreachable" (destino-inalcanzable). Bloquear estos paquetes significa que nunca obtendrá errores como `Host unreachable' o `No route lo host'. Cualquier conexión a un destino inalcanzable esperará hasta el timeout, esto es irritante, pero difícilmente fatal.

Fragmentation needed - Un problema peor se puede generar si filtramos los paquetes de ICMP que participan en el descubrimiento del MTU "Max Transfer Unit". Todas las buenas implementaciones de TCP/IP intentan utilizar el tamaño de paquete más grande que se pueda, esto reduce drásticamente la sobrecarga causada por los encabezados.
Para descubrir el MTU hasta algún destino, se utiliza una técnica conocida como PMTU-D "Path MTU - Discovery", la cual depende de un paquete icmp de tipo "destination-unreachable" con código "Fragmentation needed but DF set" (tipo 3, código 4).
Si filtramos este tipo de paquetes ICMP, se reducirá el rendimiento de TCP para sitios que tengan un MTU pequeño y en algunos casos estos sitios se harán inalcanzables.
Más información en:
- http://www.netheaven.com/pmtu.html
- http://www.ietf.org/internet-drafts/draft-ietf-pmtud-method-06.txt
- http://www.lartc.org/howto/lartc.cookbook.mtu-mss.html

Security Failures - IPSec, el protocolo más usado para realizar VPNs, utiliza un tipo especial de mensajes icmp para informar errores de autenticación, si los filtramos desconoceremos de las causas por las que fallan nuestros túneles.
Más en: http://www.ietf.org/rfc/rfc2521.txt

Time to Live exceeded in Transit - El comando traceroute o tracert, está implementado transmitiendo datagramas UDP con distintos valores en el campo TTL "Time To Live" de la cabecera IP.
El campo TTL es reducido en cada salto (cada vez que pasa por un router); cuando un router reduce el campo TTL de un paquete a cero, lo descarta y genera un paquete ICMP con código "Time to Live exceeded in Transit" - "Tiempo de Vida Excedido en tránsito".
Volviendo al comando traceroute, dijimos que éste genera paquetes UDP con distintos TTL, luego espera por los paquetes icmp con código "Time to Live exceeded in Transit" o "port unreachable", los cuales tienen como ip de origen la ip del router que los originó, con esta información genera la ruta que le solicitamos.

Request/Reply - La herramienta ping está implementada utilizando los mensajes "Echo request" y "Echo reply" de icmp, si los filtramos no esperemos hacer ping a ningún lado. Es incorrecto pensar que, porque filtremos los "echo request/reply" de/a nuestros hosts, esto los hará invisibles.
Podemos ser objetos de un ataque de Denegación de Servicio "DoS" con estos paquetes, por lo cual es recomendable aplicar un control de ancho de banda sobre ellos.

Parameter Problem - Estos mensajes son usados para indicar que se encontró un problema durante el procesamiento de los parámetros de la cabecera IP, normalmente dado por la mala implementación del Sistema Operativo, origen o destino; estos errores derivan en la pérdida de la conexión. Descubrir dichos errores sin estos mensajes puede ser muy difícil; sin embargo hay quienes bloquean estos mensajes, ya que pueden ser utilizados para hacer "fingerprinting" (Descubrir qué SO estamos corriendo).

Ataques basado en ICMP y Mensajes Obsoletos
(qué filtrar)

Redirect - Existe un tipo de paquete icmp llamado "redirect", que es usado por un router cuando le llega un paquete, para indicarle a otros equipos que existe una ruta alternativa sin pasar por él. Dado este caso, el router genera un mensaje icmp "redirect", con la información de la ruta que él cree mejor, y lo envía al equipo que le entregó el paquete. Si el equipo que recibe el paquete "redirect" tiene "Fé" en lo que le dicen, acepta la nueva ruta.
Este tipo de paquetes icmp debe ser filtrado ya que puede ser utilizado para ejecutar un ataque de "hombre-en-el-medio", por sus siglas en inglés de MITM; y en una red bien mantenida estos mensajes no deberían ser necesarios.

Source Quench - El mensaje source quench es obsoleto y fue pensado originalmente para que un host destino pueda pedir al host origen que baje el ritmo al que está enviando. Actualmente hay mejores mecanismos para manejar el control de ancho de banda. Y este tipo de mensajes puede ser utilizado para implementar un ataque de DoS "Denial Of Service". En la próxima revisión de icmp será declarado obsoleto.

Otros Obsoletos - "Information Request/Reply", "Datagram Conversion", "Domain Name", "Address Mask Request/Reply" y "Address Mask Request/Reply". La mayoría de estos tenían funciones que ahora se cubren con DHCP.


Notas
  • Hay cierto tipo de ataques basados en paquetes icmp que no son tratados en este artículo. Te recomiendo la lectura del borrador de RFC de Fernando Gont, acerca de esto: http://www.gont.com.ar/drafts/icmp-attacks-against-tcp.html
  • En la mayoría de las distribuciones de linux podemos deshabilitar que se acepten los icmp redirect, agregando la siguiente línea al archivo /etc/sysctl.conf:

    net.ipv4.conf.all.accept_redirects = 0

    En cisco por interface con el comando:

    router1(config)# interface Ethernet0
    router1(config-if)#no ip redirects

  • Ejemplo de filtrado con iptables:
    Se puede filtrar los paquetes icmp "source quench" con el siguiente comando:
    $ iptables -I FORWARD -p icmp --icmp-type source-quench -j DROP
    y podemos obtener una lista de los tipos de mensajes icmp con:
    $ iptables -p icmp --help

Referencias
  • http://www.ietf.org/rfc/rfc792.txt
  • http://www.ietf.org/rfc/rfc1122.txt
  • http://www.ietf.org/rfc/rfc2521.txt
  • http://www.iana.org/assignments/icmp-parameters
  • http://www.ietf.org/internet-drafts/draft-ietf-pmtud-method-06.txt
  • http://www.netheaven.com/pmtu.html
  • http://www.lartc.org/howto/lartc.cookbook.mtu-mss.html
  • http://www.aarnet.edu.au/engineering/networkdesign/qos/icmp.html
  • http://www.gont.com.ar/drafts/icmp-attacks-against-tcp.html

domingo, abril 09, 2006

En este espacio publicaré artículos de temas relacionados con las redes y la seguridad informática.
Algo que no encontrarás en este blog son noticias; si es lo que estás buscando te recomiendo otros sitios como bugtraq, securityfocus, slashdot, barrapunto, etc.
Si bien intentaré hacer los artículos de carácter conceptual independientes de plataforma/vendedor, habrá otros muy enfocados en linux.
Veremos que sucede con el correr del tiempo.

Saludos.