Возможны ли подстановочные знаки IPv6 в Cisco IOS?

9

Facebook очень сообразителен с их схемой адресов IPv6, но это заставило меня задуматься о списках ACL, и можно ли написать соответствующий ACL Cisco IOS IPv6? В IPv4 вы можете сопоставить средний октет, такой как 10.xxx.10.xxx, чтобы ударить любой «x» с помощью «пофиг». Я не думаю, что это возможно в IPv6, по крайней мере, в IOS 15.1.

В случае с моим примером, поскольку Facebook был хитрым, он позволяет легко сравнивать FACE: B00C, если вы можете. В некотором смысле это упрощается, потому что, не смотря на то, какой блок был назначен, я могу просто сопоставить этот диапазон.

2A03: 2880: F000: [0000-FFFF]: СТОРОНА: B00C :: / 96

Очевидный и нормальный способ состоит в том, чтобы соответствовать 2A03: 2880: F000 :: / 48, но, к сожалению, я не уверен с первого взгляда, имеет ли FB больший диапазон (вероятно, делает). Так что в этом конкретном случае, если бы я мог сопоставить только по части FACE: B00C, я мог бы сопоставить все, что они используют, предполагая, что они не переходят в FACE: B00D

Поскольку я не могу ввести маску подстановки в IOS для и ACL IPv6, я не думаю, что вы можете сделать это, но мне любопытно, есть ли у кого-нибудь интересный обходной путь. Я думаю, что было бы полезно знать это, потому что в какой-то момент мне может понадобиться отфильтровать субблок только из-за DDoS или агрессивного трафика, не желая блокировать весь / 32 для какого-то крупного провайдера.

Кроме того, это может позволить перенаправление трафика на основе политик или расстановку приоритетов. Если я понимаю, что рекламные объявления находятся в другом блоке, я могу по-разному их QoS, например, хорошая функция для перегруженных спутниковых каналов с низкой пропускной способностью.

РЕДАКТИРОВАТЬ: чтобы уточнить немного. Могут быть случаи, когда мне нужно заблокировать или разрешить определенные диапазоны в большом блоке, например / 32. Они могут быть немного смежными, и вместо сотен записей подстановочный знак может соответствовать большим их частям. Это также может быть использовано для организации трафика таким же образом, как я мог бы маршрутизировать все блоки 10.x.10.0, где, если x нечетно, он идет один маршрут против другого маршрута.

Другим примером является DDoS, где IP-адрес источника IPv6 подделывается с помощью шаблона, который записывает имя группы хакеров. Это произойдет хотя бы один раз, было бы неплохо иметь возможность фильтровать по нему.

Компактный ACL чище, но не всегда более управляем. Эти вещи могут быть хорошими или плохими идеями / практикой, не для того, чтобы спорить об этом, просто пытаться понять, какие инструменты у меня есть, и какие инструменты мне, возможно, придется создавать.

Джон Спэйд - 'DaSpadeR'
источник
Пожалуйста, помогите нам понять, как бы вы использовали ACL, если бы получили их. Это для безопасности? Если да, то есть ли брандмауэры, на которые вы могли бы это разгрузить? Что за брандмауэр?
Майк Пеннингтон
Не беспокойся Если вы ищете Facebook, просто сопоставьте их префиксы и покончите с этим. Я недавно видел тот, который был ...:face:b00c:0:1ваш подход не поймет.
Майкл Хэмптон
Если вы хотите заблокировать диапазоны, используйте подсети. Если это больше, чем / 48, использовать / 47, / 46 ... и т. Д. Я не уверен, чего бы вы достигли с помощью подстановочного сопоставления в этом сценарии. Не могли бы вы уточнить немного больше?
Себастьян Визингер
Вам помог какой-нибудь ответ? если это так, вы должны принять ответ, чтобы вопрос не появлялся вечно, ища ответ. Кроме того, вы можете предоставить и принять свой собственный ответ.
Рон Мопин

Ответы:

6

К сожалению, Cisco покончила с подстановочными масками в IPv6. Это в основном хорошая вещь, за исключением данного конкретного случая. Однако, чтобы ваша идея работала, вы должны полагаться на то, что Facebook будет «умным» и последовательным, что, вероятно, больше, чем можно надеяться.

Но если вы хотите обрабатывать трафик Facebook иначе, чем другой трафик, вы можете просто отфильтровать назначенный им адресный блок. Тот, который вы упоминаете в своем вопросе, фактически назначен на Facebook Ирландия: 2a03: 2880 :: / 32.

Но так же легко искать других в реестрах.

Рон Транк
источник
Забавно, потому что это блок в Facebook, к которому я подключаюсь из своей лаборатории во Флориде. GeoIP - другая напыщенная речь. Да, хорошо, принять / отфильтровать / заблокировать все / 32. Концептуальная причина, которую я спрашиваю, более практична, когда провайдер назначает серию блоков, которые являются оскорбительными. Я хочу заблокировать, но я не могу заблокировать все / 32 только определенные / 48 или / 64. Использование FACE: B00C является простым иллюстративным примером, но в равной степени это может быть 2001: 2880: 0100-0FF0: FACE: B00C Я хочу заблокировать. Это не будет общий фильтр, но я бы всегда хотел принять : C0FF: EE:
Джон Спейд - 'DaSpadeR'
1
@ JohnSpade-'DaSpadeR 'A /32достаточно большой, чтобы разбить его на очень много подсетей и направить их по всему миру. Это столько же подсетей, сколько IP-адресов IPv4! Запись whois практически не имеет значения в этот момент. А геолокация пока не очень хороша для адресов IPv6.
Майкл Хэмптон
5

Я немного поиграл с FPM и думаю, что он может сделать то, что вы ищете:

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

Я должен был свернуть свой собственный файл ipv6.phdf для этого:

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

К сожалению, когда я делаю «показать интерфейс управления доступом типа карты политик fa0 / 1», я не получаю совпадений с 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 

Я подозреваю, что мой эхо-запрос к IPv6-адресу Facebook не проходит через CEF должным образом (в FAQ по FPM сказано, что это необходимо) или я что-то упустил. Тем не менее, я выкладываю это для всех, кто хочет пережевывать это.

Джоди Лемуан
источник
Привет, Джоди, +1 за креативный ответ. Cisco IOS обрабатывает эхо-запросы к маршрутизатору и от него на уровне процесса (т. Е. Без CEF-коммутации) ... возможно, стоит добавить еще один хост за маршрутизатором, чтобы доказать это решение.
Майк Пеннингтон
Привет, Майк. Хорошая точка зрения. Я выполнял все свои тесты ping с моего Mac на Facebook, поэтому, хотя это все еще может быть проблемой переключения процессов, это не потому, что она возникла или завершилась на маршрутизаторе. Все еще пытаюсь понять это. Интересно то, что я даже не получаю совпадения с родительским политикой 0x86dd ethertype.
Джоди Лемуан
Если они не начинаются / не заканчиваются на маршрутизаторе, они должны быть переключены cef, пока включен ipv6 cef.
Майк Пеннингтон
IPv6 CEF определенно включен, так что я думаю, что у нас все хорошо. Действительно интересно, почему нет совпадения по ethertype.
Джоди Лемуан