FPM. Flexible Packet Matching

Conocido como Flexible Packet Matching, es una de las herramientas poderosas que permite el IOS en clasificar tramas y paquetes al nivel de lugares específicos de un protocolo como el TOS, asociar un bit en alguna sección del protocolo, hasta incluso ver patrones en cualquier sección de la data usando regexp (los mismos usados para el filtrado de los AS Path en BGP).

Requiere de los siguientes pasos para funcionar:
(1) Loading protocol headers.
(2) Defining a protocol stack.
(3) Defining a traffic filter.
(4) Applying the policy & Verifying

(1) Cargando los protocolos de encabezados

El IOS trae consigo ciertos PHDF predeterminados a cargar y utilizar. En teoría es posible de generar tu propio encabezado si sabes manejarlo de manera XML. Si se domina es posible crear la trama para formatos de paquetes de cualquier tipo como h323, ospf, pim, etc. Lastimosamente hasta el momento no conozco como usarlo (quizas en otro blog lo explique cuando lo aprenda), pero puedo dejarle el link por si se animan a aprenderlo:
http://www.cisco.com/en/US/docs/ios/sec_data_plane/configuration/guide/sec_flex_pkt_xml_cfg_ps6441_TSD_Products_Configuration_Guide_Chapter.html

(2) Apilando los protocolos a usar

Existen dos modos para la asociación de protocolos:

  • class-map type stack CMAP_STACK
  • class-map type access-control CMAP_AC

El modo Stack utiliza la apilación de protocolos, uno detras de otros. Veamos la siguiente imágen:

fpm-fig2.png

Solo permite stack-all en este modo. Se tiene que ver como cubos de legos que embonan uno detras de otro. Por ejemplo:

ETHER -- IP -- IP -- TCP

Esto colocado en comandos sería:
class-map type stack TCP_IN_IP_IN_ETHER
 statck-start l2-start
 match field ETHER type eq 0x800 next IP
 match field layer 2 IP protocol eq 0x4 next IP
 match field layer 3 IP protocol eq 0x6 next TCP

En teoría no permite mucha flexibilidad, pero según lo que pude probar, se puede utilizar cualquier identificación de la sección a verificar (gracias a los PHDF cargados incialmente), pero el problema es que solamente 1 en cada bloque puede ser verificado. En este ejemplo utilizan esta habilidad solo para la sección de protocol para el siguiente bloque.

El modo access-control permite la limitante que no permite el stack y permite que sea match-all o match-any. Se puede hacer referencia tantas veces sea necesario, pero en teoría debe estar acompañado de un stack para su funcionamiento. La única manera de usarlo sin la asociación de un modo stack es realizando coincidencias de match l2-start y match l3-start

(3) Definiendo filtros

Luego de la clasificación, viene la parte de que hacer con esos paquetes o tramas. Existen opciones como drop, redirect interface o copy interface. Cada uno de ellos realiza su politica.

(4) Aplicarlo a la interfaz

Simplemente dirigirse a la interfaz y aplicarlo de la siguiente manera:

interface FastEthernet0/0
  service-policy type access-control input PMAP_AC_FILTER

Un pequeño resúmen:

load protocol system:fpm/phdf/ip.phdf
load protocol system:fpm/phdf/udp.phdf
load protocol system:fpm/phdf/tcp.phdf
class-map type stack match-all IP-TCP
  match field IP protocol eq 0x6 next TCP
class-map type access-control match-all blaster
  match field tcp dest-port eq 135
  match start l3-start offset 3 size 2 eq 0x0030
policy-map type access-control fpm-tcp-policy
  class blaster
      drop
policy-map type access-control fpm-policy
   class IP-TCP
        service-policy fpm-tcp-policy
interface FastEthernet0/0
  service-policy type access-control input PMAP_AC_FILTER

Referencias:
http://blog.ine.com/2009/06/14/understanding-flexible-packet-matching/
http://www.cisco.com/en/US/docs/ios/12_4t/12_4t4/ht_fpm.html

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License