SPS IPv6 ACLs v Cisco IOS - filtrace podle položek základní a rozšiřujících hlaviček, reflexivní a time - based ACLs, doporučená filtrační pravidla na perimetru sítě. Petr Antončík (ant0021), Vojtěch Bazgier (baz0007) Abstrakt: Tento projekt byl vytvořen za účelem porozumění ACL v IPv6 a k nastínění konfigurací jak tyto ACL tvořit a používat v síti. Klíčová slova: ACL, IPv6, Time-based ACL, Reflexive ACL, Pravidla filtrace v síti, Extended a Standard ACL 1 ACL... 2 1.1 Funkce... 2 1.2 Výchozí politiky ACL... 2 1.3 Důvody tvorby ACL... 2 1.4 Typy ACL... 2 1.4.1 Numbered vs Named ACL... 2 1.4.2 Standard vs Extended... 3 2 ACL v IPv6... 3 2.1 ACL IPv6 v Cisco IOS... 3 2.1.1 Implicitní nastavení IPv6 ACL v IOS... 3 2.2 Tvorba IPv6 ACL... 3 2.2.1 Místa implementace IPv6 ACL... 3 2.2.2 Filtrovací kritéria... 4 2.2.3 Vytvoření ACL... 4 2.2.4 Přiřazení na rozhraní... 5 2.3 Další druhy ACL... 5 2.3.1 Time-based ACL... 5 2.3.2 Reflexive ACL... 6 2.4 Pravidla pro filtraci a nasazení ACL... 6 3 Testování... 7 3.1 Konfigurace směrovačů... 7 3.2 Otestování Rozšířeného ACL... 9 3.3 Otestování Time-based ACL... 9 4 Zhodnocení... 10 5 Zdroje... 10 Květen 2015 1/10
1 ACL ACL neboli Access Control list je seznam pravidel, která povolují nebo zakazují provoz skrz síťové zařízení. Jedná se o bezestavovou kontrolu paketů (rámců), které procházejí síťovým prvkem, ať se jedná o směrovač nebo přepínač. Bezestavová kontrola znamená, že každý procházející paket je kontrolován samostatně nikoliv jako soubor tvořený více pakety. Proto se také ACL definují jako paketové filtry. Tyto ACL můžeme vkládat na jakýkoli prvek v síti, který má pro ně podporu v rámci svého operačního systému. Standardně se aplikují na rozhraních buď v in, tedy příchozím směru nebo out, tedy odchozím směru 1.1 Funkce Jelikož se jedná se o sekvenční seznam povolení nebo zamítnutí, jeho fungovaní je zcela jednoduché. Paket který přichází na rozhraní síťového prvku je vzat a porovnán postupně se všemi položkami v seznamu ACL. V případě, že narazí na položku v seznamu, která definuje akci pro daný paket, pak tuto akci vykoná a dále již seznam neprochází. V případě že projde seznam a nenarazí na položku, která by definovala akci pro daný paket, pak provede akci na základě poslední položky v seznamu, která by měla vždy definovat akci jak nakládat s pakety které nevyhovují žádné složce v seznamu. 1.2 Výchozí politiky ACL ACL využívají dvou typu výchozích politik. Jedná se buď o politiku povolování, nebo zamítání. V případě defaultní povolovací politiky se zakazují jednotlivá spojení a porty pro dané adresy. Takovýto seznam pak vypadá následovně. Nejdříve se zakazují jednotlivá spojení od nejužších rozsahů po nejširší, kde na konci seznamu definujeme, že pokud pakety procházející rozhraním nebudou definovány v ACL, tak tyto všechny pakety budou propuštěny a přeposlány dále. Druhý typ politiky je zamítací, ta pracuje naopak oproti povolovací. Zde definujeme pouze spojení, která povolujeme, takže pouze v případě když je paket definován v ACL tak je propuštěn dále. Když ne, tak výchozí poslední pravidlo říká, že všechny ostatní pakety budou zahozeny. 1.3 Důvody tvorby ACL Cílem tvorby ACL je upravit provoz v síti s cílem zvýšení efektivity a bezpečnosti sítě. Na základě ACL může být kontrolován tok dat v síti, přístupy uživatelů do určitých sítí, síťových prvků, nebo k určitým službám, které mohou uživatelé v síti využívat. Příkladem efektivity v síti je, že díky zakázání určitých služeb nebo přístupů, jsou pakety, které tento provoz vytvářejí zakazovaný a nedostávají se do dané části sítě a tím zbytečně nezahlcují síť. V rámci bezpečnosti pak ACL představují jakousi základní implementaci, která bývá rozšířena firewally a dalšími bezpečnostními aplikacemi. 1.4 Typy ACL ACL jsou definována na základě dvojího typu. Prvním rozlišením je dělení ACL na takzvané Numbered a Named ACL. Druhé dělení je pak na Standard a Extended ACL. 1.4.1 Numbered vs Named ACL Rozdíl mezi Numbered a Named ACL je pouze ve stylu zadání jejich názvu. U Numbered ACL jsou položky seznamu ACL přiřazovány k ACL, který je rozlišován na základě čísla, zatím co u Named ACL muže administrátor sám definovat název ACL který nemusí být číselný. U Numbered ACL se využívají dva rozsahy adres. První je se značením 0 99 nebo 1300 1999 a využívá se pro standardní typ ACL. Druhý rozsah je pak využíván v rozmezí 100 199 nebo 2000 2699 a je použit pro rozšířená ACL (Extended). Numbered ACL jsou jedny z prvních a lze je použít pouze pro IPv4 protokol. Květen 2015 2/10
1.4.2 Standard vs Extended Dalším dělením, které je používáno, je dělení na Standardní (Standard) a Rozšířené (Extended) ACL. Rozdíl mezi těmito typy ACL je v tom, jak mohou filtrovat samotný provoz. U standardního ACL je filtrace paketů prováděna pouze na základě IP adres a jejich rozsahů, zatím co u rozšířených ACL můžeme také definovat jednotlivé porty a jejich rozsahy pro dané adresy. 2 ACL v IPv6 Rozdíl ACL mezi použitím v IPv4 a IPv6 je nepatrný. Krom faktu že místo IPv4 adresy a wildcard masky zadávané u IPv4, tak u IPv6 zadáváme IPv6 adresu v hexadecimálním formátu a masku pomocí lomítka. Samozřejmostí je 4x vetší rozsah adres. Dalším rozdílem oproti IPv4 ACL je že zde neexistují Numbered ACL pouze Named. Takže každé ACL je odlišováno svým specifickým jménem. Pokud jde o rozlišení mezi Standard a Extended ACL, tak zde platí stejná pravidla jako u IPV4. 2.1 ACL IPv6 v Cisco IOS V rámci IPv6 můžeme slyšet ještě o jednom typu dělení ACL, a to o dělení na takzvané IPv6 source/destination addresses a IPv6 prefix-lists. IPv6 source/destination addresses jsou standardní ACL, která se běžně používají pro filtrování dat v síti. Je to běžný typ ACL, která také využijeme při testovaní ACL v naší IPv6 topologii. Pokud jde o IPv6 prefix-lists, tak takto označujeme ACL, která využíváme k filtrování takzvaných směrovacích informací. To jsou data (pakety), které jsou přeposílány mezi síťovými prvky za účelem vytvoření dynamické topologie pomocí dynamických protokolů jako je OSPFv3 RIPng a další. Cílem těchto ACL je omezit zasílání velkého počtu updatů mezi prvky kde je například nestálá linka. 2.1.1 Implicitní nastavení IPv6 ACL v IOS Výchozí nastavení v IOS pro IPv6 ACL je, že propouští všechen provoz, nenastavíme-li ho jinak. Tedy poslední řádek ACL je nastaven jako permit ipv6 any any. Ovšem jako u IPv4, tak i u IPv6 lze nastavit výchozí politiku na zamítání. Rozdílem je, že kromě poslední politiky obsahuje ACL také zprávy permit icmp any any nd-na a nd-ns. Tyto řádky povolují průchod zpráv neighbor discovery acknowledgements a solicitations skrz ACL. Tyto zprávy slouží ke zjištění sousedních síťových zařízení v rámci IPv6. 2.2 Tvorba IPv6 ACL Pro nastavení IPv6 ACL na Cisco zařízení musíme provést následující kroky: Vytvořit ACL pro IPv6 Spustit IPv6 na námi požadovaném rozhraní Aplikovat vytvořené ACL na dané rozhraní 2.2.1 Místa implementace IPv6 ACL Aplikování vytvořených IPv6 ACL můžeme provést na různých typech rozhraní. Druh těchto rozhraní může být dán jednak typem síťového zařízení nebo se odvíjet od dané aplikace ACL. Jako příklad můžeme uvést například tyto typy rozhraní: Květen 2015 3/10
1 GigabitEthernet porty 10 GigabitEthernet porty Trunk porty (přepínače) Virtuální rozhraní routeru 2.2.2 Filtrovací kritéria Jak už bylo zmíněno výše, podle dělení ACL můžeme filtrovat provoz dle různých kritérií. Tyto kritéria lze shrnou do následujících bodů: Zdrojová IPv6 adresa Cílová IPv6 adresa Typ IPv6 zprávy (ICMP, TCP, UDP, AHP, ESP, SCTP) Zdrojový port Cílový port Další volitelné parametry 2.2.3 Vytvoření ACL Zde ukážeme, jak vytvořit IPv6 ACL v Cisco IOS. Samotná tvorba ACL se provádí v globálním režimu IOS. Zde si musíme vytvořit Pojmenované ACL, jelikož jak bylo zmíněno dříve, číselné ACL není v IPV6 podporováno. Tvorbu provedeme příkazem ipv6 access-list (název). Takto se dostaneme do konfiguračního modu ACL, kde postupně přidáváme buď povolení, nebo zakazujeme v závislosti na výchozí politice ACL. Příklad konfigurace Standardního ACL v IPv6: (Deny/permit) (protokol) (host/sit) (adresa/maska) zdroje (host/sit) (adresa/maska) cíle Ukázka: R1 (config)#ipv6 access-list standacl R1 (config-ipv6-acl)#deny tcp any host 2001:3001::2 R1 (config-ipv6-acl)#permit icmp any any nd-na R1 (config-ipv6-acl)#permit icmp any any nd-ns R1 (config-ipv6-acl)#permit ipv6 any any Rozšířené ACL má oproti standardnímu navíc definované porty nebo jejich rozsah. Příklad konfigurace Rozšířeného ACL v IPv6: (Deny/permit) (protokol) (host/sit) (adresa/maska) zdroje (eq, range, ) (port) (host/sit) (adresa/maska) cíle (eq, range, ) (port) Květen 2015 4/10
Ukázka: R1 (config)#ipv6 access-list web R1 (config-ipv6-acl)#deny tcp any host 2001:3001::2 eq www R1 (config-ipv6-acl)#permit icmp any any nd-na R1 (config-ipv6-acl)#permit icmp any any nd-ns R1 (config-ipv6-acl)#permit ipv6 any any 2.2.4 Přiřazení na rozhraní Když máme ACL vytvořená, musíme je přiřadit k danému rozhraní, kde chceme, aby docházelo k filtraci dat. To provedeme tak, že pomocí příkazu interface (rozhraní) vstoupíme do konfiguračního režimu rozhraní a zde provedeme přiřazení pomocí ipv6 traffic-filter příkazu. Zde také přiřazujeme, v jakém směru chceme, aby filtrace dat probíhala. Příklad přiřazení ACL k rozhraní: ipv6 traffic-filter (název ACL) (in/out) Ukázka: R1(config)#int gigabitethernet 0/0 R1(config-if)#ipv6 traffic-filter web in 2.3 Další druhy ACL Kromě běžného pojetí ACL existují ještě další druhy. Jedním z nich jsou časová ACL a reflexivní. 2.3.1 Time-based ACL Time-based neboli časová ACL jsou speciálním typem ACL, která se aplikují v námi stanoveném čase, který je odvíjen na základě času nastaveného na síťovém prvku. Jedná se o běžná ACL, ať už Standard nebo Extended, která navíc obsahují časový interval vymezující jejich činnost. Tedy samotná filtrace se spouští a končí ve stanovený čas. V našem testovacím příkladu zakazujeme ping z adresy 2001:3001::2 na adresu 2001:1001::2 v určitý čas, a to denně od 10:15 do 10:17 Příklad konfigurace Time-based ACL v IPv6: (Deny/permit) (protokol) (host/sit) (adresa/maska) zdroje (eq, range, ) (port) (host/sit) (adresa/maska) cíle (eq, range, ) (time-range name) Ukázka: Konfigurace časového intervalu: R1(config)#time-range casaclv6 R1(config-time-range)#periodic daily 10:15 to 10:17 Květen 2015 5/10
Konfigurace časového access listu: 2.3.2 Reflexive ACL R1(config)#ipv6 access-list aclv6 R1(config-ipv6-acl)# deny icmp host 2001:3001::2 host 2001:1001::2 time-range casaclv6 R1(config-ipv6-acl)# permit icmp any any nd-na R1(config-ipv6-acl)# permit icmp any any nd-ns R1(config-ipv6-acl)# permit ipv6 any any Reflexivní ACL automaticky rozeznávají provoz v sítí a otevírají vstupy do sítě na základě výstupního provozu. Otevření vstupů do sítě je po dobu trvání výstupního datového toku, tedy do detekce FIN/RST v TCP nebo do vypršení timeoutu u UDP. Reflexivní Acl je v IPv6 podporováno pouze u Extended ACL. Příklad konfigurace Time-based ACL v IPv6: (Deny/permit) (protokol) (host/sit) (adresa/maska) zdroje (eq, range, ) (port) (host/sit) (adresa/maska) cíle (eq, range, ) (reflect nazev [timeout hodnota]) Ukázka: Nastavení výstupního datového toku: R1(config)#ipv6 access-list Egressv6 R1(config-ipv6-acl)# permit ipv6 2001:3001::/64 any reflect border R1(config-ipv6-acl)# permit icmp any any nd-na R1(config-ipv6-acl)# permit icmp any any nd-ns R1(config-ipv6-acl)# permit ipv6 any any R1(config)#int gigabitethernet 0/1 R1(config-if)#ipv6 traffic-filter Egressv6 out Detekce vstupního datového toku: R1(config)#ipv6 access-list Ingressv6 R1(config-ipv6-acl)#evaluate border R1(config)#int gigabitethernet 0/1 R1(config-if)#ip traffic-filter Ingressv6 in 2.4 Pravidla pro filtraci a nasazení ACL V rámci filtrace pomocí ACL v sítí existuje několik pravidel, která by měla být dodržena v rámci zvýšení efektivity a bezpečnosti u síťových zařízení. Patří mezi ně pravidla určující samotnou tvorbu ACL, tedy jak samotný ACL seznam má vypadat, pravidla umístění ACL, tedy na kterých rozhraních a pravidla filtrování obou směrů. Při samotné tvorbě ACL bychom měli dbát na to, abychom filtraci dat prováděli postupně od nejmenších a nejpodrobnějších jednotek v síti až po ty největší. Musíme si uvědomit, že ACL jsou procházena sekvenčně a hned při první shodě se provádí daná akce a dále se seznam neprochází. To znamená, že při tvorbě pravidel bychom měli postupovat od jednotlivých hostů a portů po rozsahy sítí a portů. Jednoduše řečeno, kdybychom například měli výchozí zakazovací politiku, pak bychom měli povolovat nejdříve hosty a potom sítě. Květen 2015 6/10
Kdybychom měli například první pravidlo, které by nám zakazovalo nějakou síť a druhé, které by povolovalo určitého hosta v rámci této sítě, pak by paket směřující k tomuto hostovi byl prvním pravidlem zahozen a na porovnání s druhým pravidlem by nikdy nedošlo. V rámci umístění jsou dána pravidla, že standardní ACL bychom měli dávat na rozhraní co nejblíže k cílové oblasti, takže k sítím do kterých chceme povolit nebo zamítnout přístup. Je to z toho důvodu, že nám Standardní ACL filtrují provoz pouze na základě síťových adres. U Extended ACL pak platí pravidlo umísťovat je na rozhraní nejblíže ke zdroji, který iniciuje datový tok s cílem zabránit vytváření toků, které zakazujeme, aby k jejích zamítnutí došlo hned v počátku a nebyla jimi zahlcena celá síť. Posledním pravidlem, které bychom měli dodržet je, že pokud zakazujeme provoz do nějaké sítě pro určité adresy, pak bychom měli také dát ACL ve výstupním směru, kdy budeme zakazovat sítí, aby se dostávala na ty adresy, které mají zakázaný přístup do ní. 3 Testování V rámci otestování IPv6 ACL jsme použili směrovače Cisco 2901 s IOS v. 15. Zde jsme se rozhodli vyzkoušet filtrováni provozu v rámci ICMP zpráv spolu s http serverem se službou spuštěnou na portu 80. Provedli jsme otestování funkčnosti na základě nastavení několika typů ACL, kdy jsme zkusili například zakázat službu na http server, ale zároveň jsme nechali povolené ICMP zprávy abychom zjistili, zda filtrování toku funguje podle našich požadavků. Také jsme provedli testy i opačně kdy běžela služba ale ICMP zprávy byli zahazovány. V rámci testů jsme pak zachytávali zprávy a hlášky, které se nám objevily v rámci debug režimu v IOS. Zjišťovali jsme tak funkčnost ACL a počet událostí, kdy ACL zachytil provoz. 3.1 Konfigurace směrovačů Konfigurace a testovaní IPv6 ACLs probíhalo na topologii, která je zobrazená na Obrázku 1. Seznam použitých síťových zařízení: 2x směrovač Cisco 2901 (IOS verze 15.3) 2x PC s linuxovou distribucí operačního systému (jedno PC jako www server Apache2) (PC2) PC1 R2 R1 Obrázek 1: Topologie testované sítě Po základní konfiguraci síťových prvků (IPv6 adresy rozhraní, směrovací protokol OSPFv3), jsme mohli začít s konfigurací samotných IPv6 ACLs. Tyto konfigurace jsou vypsané výše v rámci textu. Základní konfigurace směrovačů: R2(config)#ipv6 unicast-routing Květen 2015 7/10
R2(config)#ipv6 router ospf 1 R2(config-rtr)#router-id 2.2.2.2 R2(config)#interface gigabitethernet 0/1 R2(config-if)#ipv6 address 2001:1001::1/64 R2(config-if)#ipv6 ospf 1 area 0 R2(config-if)#no shutdown R2(config)#interface gigabitethernet 0/0 R2(config-if)#ipv6 address 2001:2001::1/64 R2(config-if)#ipv6 ospf 1 area 0 R2(config-if)#no shutdown R1(config)#ipv6 unicast-routing R1(config)#ipv6 router ospf 1 R1(config-rtr)#router-id 1.1.1.1 R1(config)#interface gigabitethernet 0/1 R1(config-if)#ipv6 address 2001:3001::1/64 R1(config-if)#ipv6 ospf 1 area 0 R1(config-if)#no shutdown R1(config)#interface gigabitethernet 0/0 R1(config-if)#ipv6 address 2001:2001::2/64 R1(config-if)#ipv6 ospf 1 area 0 R1(config-if)#no shutdown Pro konfiguraci síťových karet na počítačích byl použit příkaz ifconfig (nastavení IPv6 adresy) a příkaz route (nastavení výchozí brány): Konfigurace počítačů: PC1 ifconfig eth1 inet6 add 2001:1001::2/64 route -A inet6 add default gw 2001:1001::1 PC2 ifconfig eth1 inet6 add 2001:3001::2/64 route -A inet6 add default gw 2001:3001::1 Jelikož je ve výchozím stavu na síťové kartě nakonfigurováno několik IPv6 adres, použili jsme k testování pingu příkaz ping6 s položkou source. Ping6 source 2001:1001::2 2001:3001::2 Tento příkaz zajistí použití programu ping se zdrojovou adresou 2001:1001::2 na cílovou adresu 2001:3001::2. Květen 2015 8/10
3.2 Otestování Rozšířeného ACL Testování tohoto námi vytvořeného ACL(web) probíhalo zkoušením přístupu na WWW server přes webový prohlížeč z PC1. Pokud chceme ověřit funkčnost ACL a pozorovat, kolik paketů bylo nakonfigurovaným access listem zachyceno, můžeme použít následující příkaz: R1#show access-lists web Směrovač nám vypíše následující výpis, ve kterém můžeme vidět počet zachycených paketů: IPv6 access list web deny tcp any host 2001:3001::2 eq www (123 match(es)) permit icmp any any nd-na permit icmp any any nd-ns permit ipv6 any any (5 match(es)) Z výpisu je zřejmé, že pakety, které směřovaly na www server, byly access listem zachyceny a zahozeny. Přístup na www server tedy nebyl možný. 3.3 Otestování Time-based ACL Testování tohoto námi vytvořeného ACL(aclv6) probíhalo ověřováním pingu z PC1 na PC2. Pokud chceme podrobně sledovat chování námi nakonfigurovaného ACL, můžeme pro tento účel použit následující příkaz: R1#debug ipv6 paket access-list aclv6 *Apr 28 10:15:35.930: IPv6-Fwd: Sending on GigabitEthernet0/0 *Apr 28 10:15:35.930: IPv6-ACL: Discarding incoming paket by acl aclv6 (SA policy) *Apr 28 10:15:35.930: IPv6-Fwd: Paket dropped by input feature 'Access List' Z výpisu můžeme vidět, že odchytávané pakety byly access listem aclv6 odchyceny a zahozeny. Ping v určenou dobu (10:15 to 10:17) tedy nebyl možný. Až po uplynutí tohoto časového rozsahu bylo možné provést ping na PC2. Pokud bychom chtěli sledovat chování ACL na PC1, výpis bude následující: 64 bytes from 2001:3001::2: icmp_seq=18 ttl=62 time=0.661 ms 64 bytes from 2001:3001::2: icmp_seq=19 ttl=62 time=0.664 ms From 2001:2001::2 icmp_seq=20 Destination unreachable: Administratively prohibited From 2001:2001::2 icmp_seq=21 Destination unreachable: Administratively prohibited Z výpisu můžeme vypozorovat, že než došlo a aktivaci ACL, bylo možné s PC2 komunikovat. V učený čas se ale ACL stalo aktivním a cílová adresa PC2 se jevila jako nedostupná. Květen 2015 9/10
4 Zhodnocení Cílem tohoto projektu bylo otestovat různé typy access listů a jejich funkčnost. Otestovali jsme funkčnost standartního ACL, ACL s rozšířenou hlavičkou, time-based ACL a reflexivní access list. Testování probíhalo pomocí debug režimu, výpisu záznamu pomocí příkazu show a pomocí webového prohlížeče, ze kterého jsme nemohli například přistoupit na webový server, když jsme tuto službu zakázali. Jak bylo zmíněno dříve, tak hlavní testováni probíhalo v rámci zakazování jednotlivých služeb a ověření propustnosti ostatních služeb, které ACL propouštělo. Hlavním zdrojem, který jsme použili k otestování, byly ICMP zprávy a webová služba. Jak u standartního, tak i u rozšířeného ACL byl rozdíl jen v tom, že u rozšířeného jsme mohli přesně definovat porty, které ACL blokovalo, což u standartního ACL nejde. U time-based ACL jsme pak během testování mohli zase vidět okamžik, kdy se nám ACL spustilo a začalo blokovat ICMP zprávy, což je vidět v rámci výpisu výše. Problém nastal u testování reflexivního ACL, kdy se nám jeho funkčnost nepodařilo ověřit. 5 Zdroje [1] IPv6 Access Control Lists [online]. [cit. 2015-05-26]. Dostupné z: http://www.cisco.com/c/en/us/td/docs/ios-xml/ios/sec_data_acl/configuration/xe-3s/sec-data-acl-xe-3sbook/ip6-acls-xe.html [2] Configuring IPv6 ACLs [online]. [cit. 2015-05-26]. Dostupné z: http://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst3750/software/release/12-2_55_se/configuration/guide/scg3750/swv6acl.html Květen 2015 10/10