Czy możliwe są dopasowania symboli wieloznacznych IPv6 w Cisco IOS?

9

Facebook jest bardzo sprytny, jeśli chodzi o schemat adresów IPv6, ale pomyślałem o listach ACL i czy można napisać listę ACL IPv6 Cisco IOS, która pasuje? W IPv4 możesz dopasować środkowy oktet, taki jak 10.xxx.10.xxx, aby trafić dowolny „x” za pomocą „nie przejmuj się”. Nie sądzę, że jest to możliwe w IPv6, przynajmniej nie w IOS 15.1.

W przypadku mojego przykładu, ponieważ Facebook jest sprytny, łatwo można po prostu dopasować na FACE: B00C, jeśli możesz. W pewien sposób to upraszcza, ponieważ bez sprawdzania, który blok został przypisany, mogę po prostu dopasować w tym zakresie.

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

Oczywistym i normalnym sposobem jest dopasowanie na 2A03: 2880: F000 :: / 48, ale niestety nie jestem pewien, czy FB ma większy zasięg (prawdopodobnie tak jest). Więc w tym konkretnym przypadku, gdybym mógł dopasować tylko część FACE: B00C, mógłbym dopasować wszystko, czego używają, zakładając, że nie przechodzą do FACE: B00D

Ponieważ nie mogę wprowadzić maski wieloznacznej w IOS dla i ACL IPv6, nie sądzę, że możesz to zrobić, ale jestem ciekawy, czy ktoś ma ciekawe obejście. Myślę, że przydałoby się to wiedzieć, ponieważ w pewnym momencie może być konieczne filtrowanie podbloku tylko z powodu DDoS lub agresywnego ruchu, nie chcąc blokować całego / 32 dla jakiegoś dużego dostawcy.

Ponadto może to pozwolić na przekierowanie lub ustalanie priorytetów ruchu w oparciu o zasady. Jeśli zdam sobie sprawę, że reklamy są w innym bloku, mógłbym QoS je inaczej, na przykład, fajna funkcja dla niskiej przepustowości, przeciążonych łączy satelitarnych.

EDYCJA: Aby trochę wyjaśnić. Mogą wystąpić przypadki, w których muszę zablokować lub zezwolić na określone zakresy w dużym bloku, takim jak / 32. Mogą być nieco przylegające i zamiast setek wpisów, symbol wieloznaczny może pasować do ich dużych części. Można to również wykorzystać do inżynierii ruchu w sposób, w jaki mógłbym przekierować wszystkie bloki 10.x.10.0, gdzie jeśli x jest nieparzysty, przechodzi jedną trasę w porównaniu do innej.

Innym przykładem jest DDoS, w którym źródłowy adres IPvv6 jest sfałszowany wzorem, który zapisuje nazwę grupy hakerów. Stanie się to przynajmniej raz, byłoby miło móc go filtrować.

Kompaktowa lista ACL jest czystsza, ale nie zawsze łatwiejsza do zarządzania. Te rzeczy mogą być dobrymi lub złymi pomysłami / praktykami, nie tutaj, aby się z tym kłócić, po prostu próbując zrozumieć, jakie narzędzia mam, a jakie narzędzia muszę stworzyć.

John Spade - „DaSpadeR”
źródło
Pomóż nam zrozumieć, w jaki sposób korzystasz z list ACL, jeśli je otrzymałeś. Czy to dla bezpieczeństwa? Jeśli tak, to czy istnieją zapory ogniowe, do których można to przeładować? Jaki rodzaj zapory ogniowej?
Mike Pennington
Nie zawracaj sobie głowy Jeśli szukasz Facebooka, po prostu dopasuj ich prefiksy i gotowe. Ostatnio widziałem taki, którego ...:face:b00c:0:1nie podejmie twoje podejście.
Michael Hampton
Jeśli chcesz zablokować zakresy, użyj podsieci. Jeśli jest to więcej niż / 48 użyj / 47, / 46 ... itd. Nie jestem pewien, co osiągnąłbyś dzięki dopasowaniu „symboli wieloznacznych” w tym scenariuszu. Czy możesz coś więcej wyjaśnić?
Sebastian Wiesinger
Czy jakaś odpowiedź ci pomogła? jeśli tak, powinieneś zaakceptować odpowiedź, aby pytanie nie wyskakiwało wiecznie, szukając odpowiedzi. Alternatywnie możesz podać i zaakceptować własną odpowiedź.
Ron Maupin

Odpowiedzi:

6

Niestety, Cisco wyeliminowało maski wieloznaczne w IPv6. To w większości dobra rzecz, Z WYJĄTKIEM w tym konkretnym przypadku. Jednak, aby Twój pomysł zadziałał, musisz polegać na tym, że Facebook jest „sprytny” i konsekwentny, co jest prawdopodobnie więcej niż można oczekiwać.

Ale jeśli chcesz przetwarzać ruch na Facebooku inaczej niż inny ruch, możesz po prostu filtrować według przypisanego bloku adresu. Ten, o którym wspominasz w swoim pytaniu, jest faktycznie przypisany do Facebook Ireland: 2a03: 2880 :: / 32.

Ale równie łatwo jest szukać innych w rejestrach.

Ron Trunk
źródło
Zabawne, bo to blok na Facebooku, z którym łączę się z mojego laboratorium na Florydzie. GeoIP to kolejna rant. Tak, w porządku, zaakceptuj / odfiltruj / zablokuj całość / 32. Koncepcyjny powód, dla którego pytam, jest bardziej praktyczny, gdy dostawca usług internetowych przypisuje serię bloków, które są obelżywe. Chcę zablokować, ale nie mogę zablokować całego / 32 tylko określonych / 48s lub / 64s. Zastosowanie FACE: B00C jest łatwym ilustrującym przykładem, ale równie dobrze może to być 2001: 2880: 0100-0FF0: FACE: B00C Chcę zablokować. To nie będzie wspólny filtr, ale zawsze chciałbym zaakceptować : C0FF: EE:
John Spade - „DaSpadeR”
1
@ JohnSpade-„DaSpadeR” A /32jest na tyle duży, że można go podzielić na bardzo wiele podsieci i kierować nimi na cały świat. To tyle podsieci, ile adresów IP IPv4! Zapis Whois jest w tym momencie prawie nieistotny. Geolokalizacja nie jest jeszcze zbyt dobra dla adresów IPv6.
Michael Hampton
5

Grałem z FPM i myślę, że może to zrobić to, czego szukasz:

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

Musiałem stworzyć własny plik ipv6.phdf dla tego:

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

Niestety, kiedy wykonuję „Pokaż interfejs kontroli dostępu typu mapa-mapa fa0 / 1”, nie otrzymuję żadnych dopasowań dla typu ethernetowego:

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 

Podejrzewam, że moje pingi na adres IPv6 Facebooka nie działają poprawnie w CEF ( FAQ FPM mówi, że jest to wymagane) lub coś mi brakuje. Mimo to udostępniam to każdemu, kto chce to przeżuć.

Jody Lemoine
źródło
Cześć Jody, +1 za twórczą odpowiedź. Cisco IOS obsługuje pingi do i z routera na poziomie procesu (tj. Bez przełączania CEF) ... być może warto dodać kolejny host za routerem, aby udowodnić rozwiązanie.
Mike Pennington
Hej Mike. Słuszna uwaga. Robiłem wszystkie testy pingowania z komputera Mac na Facebook, więc chociaż może to być problem z przełączaniem procesów, nie dzieje się tak dlatego, że pochodzi z routera. Wciąż próbuję to rozgryźć. Ciekawe jest to, że nawet nie dostaję dopasowania do eteru 0x86dd zasad nadrzędnych.
Jody Lemoine
Jeśli nie powstają / nie kończą się na routerze, powinny zostać przełączone na cef, o ile włączony jest ipv6 cef.
Mike Pennington
IPv6 CEF jest zdecydowanie włączony, więc myślę, że jesteśmy w tym dobrzy. Naprawdę zastanawiam się, dlaczego nie ma zgodności z typem eteru.
Jody Lemoine