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:
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