lunes, 27 de febrero de 2012

Access-list: Filtrado de paquetes fragmentados

Una cosa a tener en cuenta en el mundo del networking es, que no todos los medios nos ofrecen la misma MTU. MTU significa Maximum Uransmition Unit, y es el tamaño máximo de trama de nivel 2 que admite el medio de transmisión.

Por defecto Ethernet tiene una MTU de 1500bytes, en cambio hay medios ópticos que admiten 4000 o mas bytes, un servicio MPLS sobre Ethernet añade un cierto payload, por tanto tampoco pueden ofrecer 1500bytes, un túnel GRE como hemos visto en artículos anteriores ofrece una MTU sobre Ethernet de 1475bytes.

El caso es que si queremos transmitir un paquete que a nivel 3 tiene mas bytes, que la MTU que tiene el Medio a nivel 2, lo que se hace es fragmentar el paquete. Fragmentar consiste en enviar el paquete en “trocitos” de nivel 2 hasta el siguiente salto, estos trocitos no contienen toda la información de nivel 3, por tanto para poder determinar el siguiente  salto por defecto los routers deberán cachear los paquetes fragmentados, y después adaptar el paquete de nivel 3 a la MTU del camino que lleva al siguiente salto.

Ese proceso que conlleva el uso de fragmentación de paquetes supone un cierto stress extra para los routers, y también supone un cierto problema para algunos firewalls no muy avanzados ya que no son capaces de analizar ciertos paquetes.

En algunos entornos para evitar esto lo que se hace es denegar los paquetes fragmentados, algo que puede llegar a ser medio viable en algunas redes corporativas, pero no sería viable en ningún operador.
Estos paquetes fragmentados se pueden filtrar con Access list, no es algo demasiado complicado de hacer con una lista extendida.




Access-list extended SIN_FRAGMENTACION
 Deny ip any any fragments
 Permit ip any any

lunes, 20 de febrero de 2012

Tuneles GRE: La navaja suiza del networking

Los túneles GRE son una herramienta todoterreno que te puede echar una mano para prácticamente todo, permitiendote saltarte limitaciones de protocolos y tecnologías múltiples y diversas.

El hecho de ser una herramienta tan flexible, que te saca de tantos apuros, hace que el 95% de las veces se hagan "chapuzas" con ellos. Antes de explicar un poco los túneles GRE mi recomendación es, que salvo para circunstancias muy excepcionales intentes evitar los túneles GRE ya que prácticamente siempre va a haber una alternativa mejor diseñada, mas limpia, mejor optimizada, y con un troubleshooting mas sencillo.

¿Que es un tunel GRE?

GRE significa Generic Routing Encapsulation, es una encapsulación para tuneles, por defecto no lleva encriptación, es facil de implementar, funciona bajo IPV4 pero se puede usar direccionamiento de IPV4 e IPV6, y lo mas importante que permite establecer routing dinámico a traves del tunel.

¿Como se configura?

router(config)#interface tunnel X
router(config-if)# tunnel source ( ip | interface )
router(config-if)# tunnel destination ( destination_ip )
router(config-if)#ip address x.x.x.x y.y.y.y
router(config-if)# ipv6 address ( ipv6_address ) ( ipv6_mask )

¿ Como funcionan ?

Es un protocolo que funciona a nivel 4 y admite una MTU máxima de 1475 bytes, por tanto si prevees que sobre el tunel tiene que fluir tráfico que no admita fragmentación, y que tenga mas de 1475 bytes lo mejor es ir olvidandose. El que avisa no es traidor.

Ejemplo con routing dinámico:



R4:
interface Loopback1
 ip address 4.4.4.4 255.255.255.255
!
interface Loopback2
 ip address 1.2.3.4 255.255.255.255
!
interface Tunnel1
 ip address 10.0.0.1 255.255.255.252
 tunnel source Loopback1
 tunnel destination 6.6.6.6
!
interface Ethernet0/0
 ip address 192.168.1.1 255.255.255.0
 half-duplex
!
router eigrp 100
 network 1.2.3.4 0.0.0.0
 network 10.0.0.1 0.0.0.0
 auto-summary
!
router rip
 version 2
 network 4.0.0.0
 network 192.168.1.0
!
R5:

interface Ethernet0/0
 ip address 192.168.1.2 255.255.255.0
 half-duplex
!
interface Ethernet0/1
 ip address 192.168.2.1 255.255.255.0
 half-duplex

 router rip
 version 2
 network 192.168.1.0
 network 192.168.2.0
 R6:
 interface Ethernet0/1
 ip address 192.168.2.2 255.255.255.0
 half-duplex

 interface Loopback1
 ip address 6.6.6.6 255.255.255.255
!
interface Loopback2
 ip address 4.3.2.1 255.255.255.255
!
interface Tunnel1
 ip address 10.0.0.2 255.255.255.252
 tunnel source Loopback1
 tunnel destination 4.4.4.4


router eigrp 100
 network 4.3.2.1 0.0.0.0
 network 10.0.0.2 0.0.0.0
 no auto-summary
!
router rip
 version 2
 network 6.0.0.0
 network 192.168.2.0

lunes, 13 de febrero de 2012

TCP Intercept:


TCP Intercept es una tecnología que permite interceptar las sesiones con origen o destino de un flujo(una ACL), estableciendose la sesión contra el router, que será el intermediario de la sesión.

Se usa particularmente para ataques de SYN flood, y en general para ataques de denegación de servicio basados en sesiones.


Tiene un monton de opciones a configurar, tiempo de inactividad, numero de conexiones con syn pero sin ACK...etc.



access-list 146 permit ip any 155.1.146.0 0.0.0.255  <---el trafico que interceptas
ip tcp intercept list 146 
ip tcp intercept connection-timeout 30 <----inactividad


lunes, 6 de febrero de 2012

Filtrado a nivel 7 con NBAR


NBAR es una tecnología que permite el reconocimiento de aplicaciones y protocolos a nivel de aplicación, sin trabajar tan solo a nivel de puerto como hace un firewall, lo que permite NBAR, es leer a nivel de cabeceras html...etc

Una funcionalidad de seguridad que se le puede dar a NBAR es descartar los paquetes de los protocolos no permitidos.

En este ejemplo vamos a descartar los paquetes de bittorrent, da igual que cambie de puerto el bittorrent, NBAR se basa en patrones de tráfico a nivel de aplicación, y descartará el tráfico.

Ejemplo:


class-map match-all TORRENTE
   match protocol bittorrent
policy-map ELIMINAR
  class TORRENTE
   drop
 
int fa0/0
    service-policy output ELIMINAR


Lo malo que tienen todo este tipo de trabajos de inspección a nivel 7, es que incurre en una mayor carga de trabajo para el router. Cosa aplicable a cualquier tecnología de este tipo, por lo que se recomienda hacerlo en equipos que no están demasiado justos de CPU y memoria.