São possíveis correspondências curinga IPv6 no Cisco IOS?

9

O Facebook é muito inteligente com o esquema de endereços IPv6, mas me fez pensar em ACLs e é possível escrever uma ACL Cisco IOS IPv6 que corresponda? No IPv4, você pode corresponder a um octeto do meio, como 10.xxx.10.xxx, para atingir qualquer 'x' com 'não se importa'. Eu não acho que isso seja possível no IPv6, pelo menos não no IOS 15.1.

No caso do meu exemplo, como o Facebook é inteligente, facilita a correspondência no FACE: B00C, se você puder. De certa forma, isso simplifica porque, sem procurar qual bloco foi atribuído, posso apenas corresponder nesse intervalo.

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

A maneira óbvia e normal é combinar em 2A03: 2880: F000 :: / 48, mas infelizmente não tenho certeza se o FB tem um alcance maior (provavelmente). Portanto, nesse caso em particular, se eu pudesse corresponder apenas à parte FACE: B00C, poderia corresponder a tudo o que eles estão usando, supondo que eles não passem para o FACE: B00D

Como não consigo inserir uma máscara curinga no IOS e no IPv6 ACL, não acho que você possa fazer isso, mas estou curioso para saber se alguém tem uma solução alternativa interessante. Eu acho que seria útil saber disso porque, em algum momento, talvez eu precise filtrar um sub-bloco apenas por causa de DDoS ou tráfego agressivo, sem querer bloquear um / 32 inteiro para algum grande provedor.

Além disso, isso pode permitir o redirecionamento ou a priorização de tráfego baseado em políticas. Se eu perceber que os anúncios estão em um bloco diferente, eu poderia fazer o QoS de maneira diferente, por exemplo, um bom recurso para baixa largura de banda e links de satélite congestionados.

EDIT: Para esclarecer um pouco. Pode haver casos em que eu precise bloquear ou permitir determinados intervalos em um bloco grande como um / 32. Elas podem ser um pouco contíguas e, em vez de centenas de entradas, um curinga pode corresponder a grandes partes delas. Isso também poderia ser usado para a engenharia de tráfego da maneira que eu poderia rotear todos os blocos 10.x.10.0, onde x é ímpar, ele vai uma rota vs mesmo para outra rota.

Outro exemplo é um DDoS em que o IP de origem do IPv6 está sendo falsificado com um padrão que indica o nome do grupo dos hackers. Isso acontecerá pelo menos uma vez, seria bom poder filtrá-lo.

Uma ACL compacta é mais limpa, mas nem sempre é mais gerenciável. Essas coisas podem ser boas ou más idéias / práticas, e não aqui para argumentar que, apenas tentando entender quais ferramentas eu tenho versus quais ferramentas eu posso ter que criar.

John Spade - 'DaSpadeR'
fonte
Ajude-nos a entender como você usaria as ACLs se as obtivesse. Isso é por segurança? Em caso afirmativo, existem firewalls para os quais você poderia descarregar isso? Que tipo de firewall?
Mike Pennington
Não se incomode. Se você está procurando pelo Facebook, basta combinar seus prefixos e concluir com ele. Eu vi recentemente um que era o ...:face:b00c:0:1que sua abordagem não adotaria.
Michael Hampton
Se você deseja bloquear intervalos, use sub-redes. Se for mais do que um / 48 use / 47, / 46 ... etc., não tenho certeza do que você faria com a correspondência "curinga" nesse cenário. Talvez você possa esclarecer um pouco mais?
Sebastian Wiesinger
Alguma resposta o ajudou? Nesse caso, você deve aceitar a resposta para que a pergunta não apareça para sempre, procurando uma resposta. Como alternativa, você pode fornecer e aceitar sua própria resposta.
Ron Maupin

Respostas:

6

Infelizmente, a Cisco eliminou as máscaras curinga no IPv6. Isso é principalmente uma coisa boa, EXCETO neste caso particular. Para que sua idéia funcione, você deve confiar no Facebook, que é "inteligente" e consistente, o que provavelmente é mais do que se pode esperar.

Mas se você quiser processar o tráfego do Facebook de maneira diferente do outro tráfego, basta filtrar o bloco de endereços atribuído. O que você mencionou na sua pergunta é realmente atribuído ao Facebook Ireland: 2a03: 2880 :: / 32.

Mas é igualmente fácil procurar outras pessoas nos registros.

Ron Trunk
fonte
Divertido, porque esse é o bloco no Facebook ao qual estou me conectando do meu laboratório na Flórida. GeoIP é outro discurso retórico. Sim, tudo bem, aceite / filtre / bloqueie o todo / 32. A razão conceitual que estou perguntando é mais prática, onde um ISP atribui uma série de blocos que estão sendo abusivos. Quero bloquear, mas não consigo bloquear o todo / 32 / 48s ou / 64s específicos. O uso do FACE: B00C é um exemplo ilustrativo fácil, mas poderia ser igualmente 2001: 2880: 0100-0FF0: FACE: B00C que eu quero bloquear. Não será um filtro comum, mas eu sempre gostaria de aceitar : C0FF: EE:
John Spade - 'DaSpadeR'
11
@ JohnSpade-'DaSpadeR 'A /32é grande o suficiente para que você possa dividi-lo em muitas sub-redes e encaminhá-las para todo o mundo. São tantas sub-redes quanto os endereços IP IPv4! O registro whois é quase irrelevante nesse ponto. E a geolocalização ainda não é muito boa para endereços IPv6.
Michael Hampton
5

Eu estava brincando com o FPM e acho que pode fazer o que você está procurando:

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

Eu tive que rolar meu próprio arquivo 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>

Infelizmente, quando eu faço uma "interface de controle de acesso fa0 / 1 do tipo mapa de políticas", não encontro correspondências no ethertype:

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 

Suspeito que meus pings para o endereço IPv6 do Facebook não estejam sendo executados corretamente pelo CEF (as Perguntas frequentes do FPM dizem que é necessário) ou estou perdendo alguma coisa. Ainda assim, estou divulgando isso para quem quiser mastigar.

Jody Lemoine
fonte
Olá Jody, +1 para uma resposta criativa. O Cisco IOS lida com pings de e para o roteador no nível do processo (ou seja, sem comutação CEF) ... talvez valha a pena adicionar outro host por trás do roteador para provar a solução.
Mike Pennington
Ei Mike. Bom ponto. Eu estava fazendo todos os meus testes de ping do meu Mac para o Facebook, portanto, embora possa ainda ser um problema de mudança de processo, não é porque ele se originou ou terminou no roteador. Ainda tentando descobrir isso. O interessante é que nem estou conseguindo uma correspondência no tipo 0x86dd da política pai.
Jody Lemoine
Se eles não se originam / terminam no roteador, devem ser alternados cef, desde que o ipv6 cef esteja ativado.
Mike Pennington
O IPv6 CEF está definitivamente ativado, então acho que somos bons por lá. Realmente me perguntando por que não há correspondência no ethertype.
Jody Lemoine