¿Son posibles las coincidencias de comodines IPv6 en Cisco IOS?

9

Facebook es muy inteligente con su esquema de direcciones IPv6, pero me hizo pensar en ACL y ¿Es posible escribir una ACL IPv6 de Cisco IOS que coincida? En IPv4, puede hacer coincidir un octeto medio como 10.xxx.10.xxx para golpear cualquier 'x' con 'no me importa'. No creo que esto sea posible en IPv6, al menos no a partir del IOS 15.1.

En el caso de mi ejemplo, dado que Facebook ha sido inteligente, hace que sea fácil hacer coincidir FACE: B00C si pudiera. En cierto modo, esto se simplifica porque sin buscar qué bloque se asignó, puedo igualar ese rango.

2A03: 2880: F000: [0000-FFFF]: CARA: B00C :: / 96

La forma obvia y normal es hacer coincidir 2A03: 2880: F000 :: / 48 pero, desafortunadamente, no estoy seguro de un vistazo si FB tiene un rango mayor (probablemente sí). Entonces, en este caso particular, si pudiera igualar solo la parte FACE: B00C, podría igualar todo lo que están usando, suponiendo que no pasen a FACE: B00D

Como no puedo ingresar una máscara comodín en IOS para ACL de IPv6, no creo que pueda hacerlo, pero tengo curiosidad si alguien tiene una solución interesante. Creo que sería útil saber esto porque en algún momento es posible que necesite filtrar un subbloque solo debido a DDoS o tráfico agresivo sin querer bloquear un / 32 completo para algún proveedor grande.

Además, esto podría permitir la redirección o la priorización del tráfico basado en políticas. Si me doy cuenta de que los anuncios están en un bloque diferente, podría QoS de manera diferente, por ejemplo, una buena característica para enlaces satelitales congestionados de bajo ancho de banda.

EDITAR: Para aclarar un poco. Puede haber casos en los que necesite bloquear o permitir ciertos rangos dentro de un bloque grande como un / 32. Estos pueden ser ligeramente contiguos y, en lugar de cientos de entradas, un comodín puede coincidir con grandes porciones de ellas. Esto también podría usarse para la ingeniería de tráfico de la manera en que podría enrutar todos los bloques 10.x.10.0 donde si x es impar, va de una ruta a otra incluso.

Otro ejemplo es un DDoS donde la IP de origen de IPv6 se está falsificando con un patrón que deletrea el nombre del grupo de los hackers. Esto sucederá al menos una vez, sería bueno poder filtrarlo.

Una ACL compacta es más limpia pero no siempre más manejable. Estas cosas pueden ser buenas o malas ideas / prácticas, no aquí para argumentar eso, solo tratando de entender qué herramientas tengo frente a qué herramientas puedo tener que crear.

John Spade - 'DaSpadeR'
fuente
Ayúdenos a comprender cómo usaría las ACL si las tuviera. ¿Es esto por seguridad? Si es así, ¿hay firewalls en los que pueda descargar esto? ¿Qué tipo de firewall?
Mike Pennington
No te molestes. Si está buscando Facebook, solo combine sus prefijos y termine con ellos. Hace poco vi uno que era ...:face:b00c:0:1su enfoque no recogerá.
Michael Hampton
Si desea bloquear rangos, use subredes. Si es más que un / 48 use / 47, / 46 ... etc. No estoy seguro de lo que podría lograr con la coincidencia de "comodines" en este escenario. ¿Puedes quizás aclarar un poco más?
Sebastian Wiesinger
¿Alguna respuesta te ayudó? Si es así, debe aceptar la respuesta para que la pregunta no siga apareciendo para siempre, buscando una respuesta. Alternativamente, puede proporcionar y aceptar su propia respuesta.
Ron Maupin

Respuestas:

6

Desafortunadamente, Cisco eliminó las máscaras comodín en IPv6. Eso es principalmente algo bueno, EXCEPTO en este caso particular. Sin embargo, para que su idea funcione, debe confiar en que Facebook sea "inteligente" y consistente, lo que probablemente sea más de lo que uno puede esperar.

Pero si desea procesar el tráfico de Facebook de manera diferente a otro tráfico, simplemente puede filtrar en el bloque de direcciones asignado. El que mencionas en tu pregunta está asignado a Facebook Irlanda: 2a03: 2880 :: / 32.

Pero es igual de fácil buscar a otros en los registros.

Ron Trunk
fuente
Divertido, porque ese es el bloque en Facebook al que me estoy conectando desde mi laboratorio en Florida. GeoIP es otra diatriba. Sí, bien, aceptar / filtrar / bloquear todo / 32. La razón conceptual que estoy preguntando es más práctica, donde un ISP asigna una serie de bloques que son abusivos. Quiero bloquear, pero no puedo bloquear todo / 32 solo / 48s o / 64s específicos. El uso de FACE: B00C es un ejemplo ilustrativo fácil, pero igualmente podría ser 2001: 2880: 0100-0FF0: FACE: B00C Quiero bloquear. No va a ser un filtro común, pero me gustaría aceptar siempre : C0FF: EE:
John Spade - 'DaSpadeR'
1
@ JohnSpade-'DaSpadeR 'A /32es lo suficientemente grande como para dividirlo en muchas subredes y enrutarlas en todo el mundo. ¡ Son tantas subredes como direcciones IP IPv4! El registro whois es casi irrelevante en ese punto. Y la geolocalización aún no es muy buena para las direcciones IPv6.
Michael Hampton
5

Estaba jugando un poco con FPM y creo que puede hacer lo que estás buscando:

load protocol system:fpm/phdf/ether.phdf
load protocol flash:/fpm/phdf/ipv6.phdf
!
class-map type stack match-all cm-ipv6
 match field ETHER type eq 0x86DD next IPV6
class-map type access-control match-all cm-ipv6-facebook
 match start IPV6 dest-addr offset 9 size 4 eq 0xFACEB00C
!
policy-map type access-control pm-ipv6-facebook
 class cm-ipv6-facebook
   drop
policy-map type access-control pm-filter
 class cm-ipv6
   log
  service-policy pm-ipv6-facebook
!
interface FastEthernet0/1
 service-policy type access-control input pm-filter

Tuve que rodar mi propio archivo ipv6.phdf para este:

<?xml version="1.0" encoding="UTF-8"?>
<phdf>
 <version>1</version>
 <protocol name="ipv6" description="Definition-for-the-IPv6-protocol">
 <field name="version" description="IP version">
  <offset type="fixed-offset" units="bits">0</offset>
  <length type="fixed" units="bits">4</length>
 </field>
 <field name="tc" description="IPv6-Traffic-Class">
  <offset type="fixed-offset" units="bits">4</offset>
  <length type="fixed" units="bits">8</length>
 </field>
  <field name="fl" description="IPv6-Flow-Label">
  <offset type="fixed-offset" units="bits">12</offset>
  <length type="fixed" units="bits">20</length>
 </field>
 <field name="length" description="IPv6-Payload-Length">
  <offset type="fixed-offset" units="bits">32</offset>
  <length type="fixed" units="bits">16</length>
 </field>
 <field name="nh" description="IPv6-Next-Header">
  <offset type="fixed-offset" units="bits">48</offset>
  <length type="fixed" units="bits">8</length>
 </field>
 <field name="hl" description="IPv6-Hop-Limit">
  <offset type="fixed-offset" units="bits">56</offset>
  <length type="fixed" units="bits">8</length>
 </field>
 <field name="source-addr" description="IPv6-Source-Address">
  <offset type="fixed-offset" units="bits">64</offset>
  <length type="fixed" units="bits">128</length>
 </field>
 <field name="dest-addr" description="IPv6-Destination-Address">
  <offset type="fixed-offset" units="bits">192</offset>
  <length type="fixed" units="bits">128</length>
 </field>
 <field name="payload-start" description="IPv6-Payload-Start">
  <offset type="fixed-offset" units="bits">320</offset>
  <length type="fixed" units="bits">0</length>
 </field>
 <headerlength type="fixed" value="320"></headerlength>
 <constraint field="version" value="6" operator="eq"></constraint>
</protocol>
</phdf>

Desafortunadamente, cuando hago una "interfaz de control de acceso de tipo de mapa de política de fa0 / 1", no obtengo coincidencias en el tipo de ethert:

FastEthernet0/1 

  Service-policy access-control input: pm-filter

    Class-map: cm-ipv6 (match-all)
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: field ETHER type eq 0x86DD next IPV6
      log

      Service-policy access-control : pm-ipv6-facebook

        Class-map: cm-ipv6-facebook (match-all)
          0 packets, 0 bytes
          5 minute offered rate 0 bps
          Match: start IPV6 dest-addr offset 9 size 4 eq 0xFACEB00C
      drop

        Class-map: class-default (match-any)
          0 packets, 0 bytes
          5 minute offered rate 0 bps, drop rate 0 bps
          Match: any 

    Class-map: class-default (match-any)
      10000 packets, 1863618 bytes
      5 minute offered rate 14000 bps, drop rate 0 bps
      Match: any 

Sospecho que mis pings a la dirección IPv6 de Facebook no se ejecutan correctamente a través de CEF (las preguntas frecuentes de FPM dicen que es obligatorio) o me falta algo. Aún así, estoy publicando esto para cualquiera que quiera masticarlo.

Jody Lemoine
fuente
Hola Jody, +1 para una respuesta creativa. Cisco IOS maneja los pings hacia y desde el enrutador a nivel de proceso (es decir, no con conmutación CEF) ... quizás valga la pena agregar otro host detrás del enrutador para probar la solución.
Mike Pennington
Hola Mike Buen punto. Estaba haciendo todas mis pruebas de ping desde mi Mac a Facebook, por lo que aunque todavía puede ser un problema de cambio de proceso, no es porque se originó o terminó en el enrutador. Todavía estoy tratando de resolver esto. Lo interesante es que ni siquiera estoy obteniendo una coincidencia en el tipo 0x86dd de la política principal.
Jody Lemoine
Si no se originan / terminan en el enrutador, deben cambiarse cef, siempre que ipv6 cef esté habilitado.
Mike Pennington el
IPv6 CEF definitivamente está activado, así que creo que estamos bien allí. Realmente me pregunto por qué no hay coincidencia en el ethertype.
Jody Lemoine