Menu Zavrieť

8. ACL – Access Control List

Access Control List (ďalej len ACL) je zoznam pravidiel, ktoré riadi prístup k nejakému objektu. ACL sú používané v rade aplikácií, často u aktívnych sieťových prvkov, ale napríklad aj u operačných systémov pri riadení prístupu k objektu (súboru). Ak niekto požaduje prístup k nejakému objektu, tak sa najprv skontroluje ACL priradený k tomuto objektu, či je táto operácia povolená (prípadne povolená komu).

Cisco ACL

Na aktívnych prvkoch Cisco sú ACL vlastností IOSu. Môžeme ich používať na niekoľkých miestach, ale najčastejšie použitie je pre riadenie (obmedzovanie) sieťovej prevádzky, teda pre filtrovanie paketov . Rôznych typov ACL je celý rad, niektoré typy ACL sa dajú aplikovať na rôzne miesta a tiež sú tu určité väzby. Takže máme napríklad IP Extended Named ACL . Pokúsil som sa vytvoriť trochu menej tradičné, ale pre mňa viac praktický, zoznam typov ACL.

  • IP ACL – filtruje IPv4 prevádzka – IP, TCP, UDP, IGMP (multicast), ICMP
    • Port ACL – pre fyzický L2 interface (aplikujeme na port), len prichádzajúce smer
      • Numbered Standard – číslované, iba zdrojová adresa
      • Numbered Extended – číslované, zdrojová aj cieľová adresa a voliteľne port
      • Named Standard – pomenované štandard
      • Named Extended – pomenované extended
    • Router ACL – pre L3 interface – SVI (switch virtual interfaces – L3 interface pre VLAN), fyzický L3 interface (port – vznikne pomocou no switchport), L3 EtherChannel (spojenie viac portov); kontrolujú routovanie prevádzku, odchádzajúce alebo prichádzajúce smer
      • Standard
      • extended
      • Named
    • VLAN máp – kontroluje všetky pakety (routovanie aj bridgovanie = switchované), môžeme kontrolovať prevádzku medzi zariadeniami v rámci jednej VLAN. Nerieši sa smer (odchádzajúce, prichádzajúce)., Aplikuje sa na VLAN.
      • Standard
      • extended
      • Named
  • MAC ACL (Ethernet ACL) – non-IP prevádzku
    • port ACL
      • Standard
      • extended
      • Named Extended
    • VLAN máp
      • Named Extended

Hlavné delenie je teda podľa typu adries , ktoré používame v pravidlách. Najčastejšie sú IP a MAC ACL , ale aj dnes tiež (zatiaľ menej využívané) IPv6 ACL , ktoré môžu byť Port alebo Router a iba Named . V konfigurácii sa používajú prefixy miesto Wildcard masky. Alebo už skoro nepoužívané IPX ACL.

Ďalšie delenie je podľa toho, kam danej ACL aplikujeme . Môžeme na L2 interface , L3 interface a alebo špeciálne VLAN máp . Potom už máme vlastné typy ACL, buď štandardné , rozšírené alebo pomenované .

V tomto článku sa venujem všeobecne ACL, potom viac IP ACL a na záver MAC ACL. Čo sa týka aplikácie, tak je to síce všeobecné, ale viac zamerané na Port ACL. Router ACL (viac prakticky) sa venujem v ďalšom článku  – inter-VLAN routing a ACL – smerovanie medzi VLANy . Špecifickým prípadom sú VLAN mapy, o ktorých vyjde ďalší článok.

ACL slúži hlavne  

  • ako základný sieťová bezpečnosť na blokovanie alebo povolenie (routovaného) prevádzky
  • ku kontrole šírky pásma
  • Policy Based Routing
  • vynútenie sieťových politík
  • identifikáciu alebo klasifikáciu prevádzky (pre QoS, NAT, a pod.)

Stručná charakteristika a vlastnosti

  • ACL je sekvenčná (radený) zoznam pravidiel permit (povoliť) a deny (zakázať), týmto pravidlám sa hovorí ACE (Access Control Entries).
  • ACL môžeme identifikovať číslom alebo menom (pomenované ACL).
  • Nové pravidlá sa pridávajú vždy na koniec zoznamu.
  • Používa sa pravidlo first-fit . Zoznam sa prechádza od začiatku ku koncu, a pokiaľ dôjde k zhode, tak sa ďalej neprechádza.
  • Každý neprázdny zoznam má na konci defaultný pravidlo , ktoré zakazuje všetko (deny any). Prázdny zoznam povoľuje všetko.
  • Je dobré umiestňovať viac špecifické pravidlá na začiatok a obyčajná (subnetmi apod) na koniec.
  • Ak sa v ACL vyhodnotí deny, tak sa odošle ICMP hosť nedosiahnuteľný (unreachable).
  • Filtrovanie (používanie ACL) spomaľuje zariadenie (stojí výpočtový výkon).
  • Odchádzajúce pravidlá (outbound filters) neovplyvňujú prevádzku, ktorý pochádza lokálne z routeru (filtrujú iba prechádzajúce prevádzka).

Ak chceme upraviť nejaké hotové ACL, tak ho (vo väčšine prípadov) musíme zmazať a vytvoriť znova. Odporúča sa napísať najprv ACL v textovom editore a následne skopírovať do CLI . Prípadne Cisco Network Assistant má nástroj na úpravu ACL.

Pozn .: Výnimkou sú pomenované ACL, kde sú určité úpravy možné.

  • na interfacu môžeme kombinovať IP ACL a MAC ACL , aby sme filtrovali všetok prevádzku
  • tiež môžeme používať dohromady Port ACL , Router ACL aj VLAN máp , ale Port ACL má najväčšiu prioritu, potom je Router ACL a až posledná VLAN máp

Wildcard subnet mask

U ACL sa Cisco rozhodlo nepoužívať tradičné masky podsietí (subnet mask), ale tzv. Wildcard mask . Je to malé skomplikovanie, ale Nejde o nič zložité. Iba je potrebné na túto vlastnosť nezabudnúť pri konfigurácii, pretože by mohlo dôjsť k množstvu problémov. Táto maska sa tiež označuje ako inverzne maska (inverzia mask), čo ju lepšie popisuje. Ide totiž o opačnú masku k tradičnej maske.

Výpočet inverzne masky je jednoduchý, vezmeme postupne všetky štyri oktety masky a spočítame255 - oktet. Takže napríklad maska255.255.255.0má inverzný verziu0.0.0.255alebo k255.255.192.0ich0.0.63.255.

Typy ACL

Najpoužívanejšie je delenie ACL na dva typy

  • štandard ACL – starší a jednoduchšie verzie ACL s menej možnosťami konfigurácie
  • extended ACL – novšie a zložitejšie ACL s viacerými možnosťami

Ďalej existujú rôzne špeciálne ACL, ktoré sú často odvodené z týchto dvoch, ako je dynamic ACL , context-based ACL , Reflexive ACL alebo named ACL .

Standard ACL – štandardné ACL

  • používa čísla 1 – 99 a 1300 – 1999 v rozšírenom móde
  • je jednoduché na konfiguráciu
  • filtruje (pozerá sa) len podľa zdrojové adresy a používa sa ako odchádzajúce
  • používa sa pre blokovanie prevádzky blízko cieľa
SWITCH (config) # access-list číslo {deny | permit} {hosť | source source-wildcard | any} [log]

Pozn .: Konfigurácia štandard aj extended ACL sa vykonáva rovnako, rozlišuje sa podľa použitého čísla.

Na mieste deny|permitmôžeme tiež použiť kľúčové slovo remark a za neho vložiť popis (komentár) daného pravidla.

Voliteľný atribút logspôsobí, že na konzolu a do logu budú posielané informácie o paketoch, ktoré splnia dané kritéria (dané pravidlo). Hodí sa pre ladenie, ale pre ostrú prevádzku príliš zaťažuje zariadení.

Príklad:

Nasledujúce ACL s číslom 5 povoľuje prístup subnetu 10.5.1.0/24 mimo adresy 10.5.1.10, všetky ostatné adresy sú zakázané.

SWITCH (config) # access-list 5 deny host 10.5.1.10 
SWITCH (config) # access-list 5 permit 10.5.1.10 0.0.0.255 
SWITCH (config) # access-list 5 deny any

Pozn .: Posledné pravidlo je defaultný a nevkladá sa.

Extended ACL – rozšírené ACL

  • používa čísla 100 – 199 a 2000 – 2699 v rozšírenom móde
  • pozerá sa na IP adresu zdroje aj ciele
  • kontroluje rad položiek v hlavičke vrstvy 3 a 4 (protokol, port a pod.)
  • môže blokovať prevádzku kdekoľvek (najlepšie blízko zdroja)

Pozn .: Ďalšie číselné rozsahy sa používajú pre ostatné typy ACL, ako IPX, AppleTalk, XNS, apod.

Extended ACL môže kontrolovať tieto parametre

  • Vo 3. vrstve ISO / OSI, teda v IP hlavičke kontroluje: IP adresy , protokol , údaje z ToS (Type of Service – prioritu 802.1Q službu).
  • Vo 4. vrstve kontroluje v TCP hlavičke: porty a protokoly , v UDP hlavičke: porty , v ICMP hlavičke typ správy .

Pozn .: Pri využívaní údajov z 4. vrstvy (teda portov) je treba uvažovať fragmentovaný prevádzku, pretože pri fragmentácii iba prvý paket obsahuje údaje zo 4. vrstvy. Môžeme využiť kľúčové slovofragmentsv pravidle.

SWITCH (config) # access-list číslo {deny | permit} protokol {hosť | source source-wildcard | any} [port] {hosť | destination destination-wildcard | any} [port] 

Vyššie uvedený zápis extended ACL je len zjednodušený, je tu možné použiť rad ďalších parametrov a vytvoriť napríklad dynamický ACL či obmedziť časovo platnosť ACL.

Ako protokol je možné použiť IP, TCP, ICMP, UDP alebo aj rad ďalších. Podľa zvoleného protokolu sa mení aj parametre, ktoré môžeme v ACL použiť, napríklad port je možné použiť len pri TCP a UDP.

Pozn .: Ak chceme filtrovať všetky protokoly, tak použijeme IP , ostatné patrí pod neho.

Obmedzenie na port sa zadáva pomocou operátora, môžeme použiť operátory eq(rovná sa), neq(nerovná), gt(väčšie ako), lt(menšie ako) a range(rozsah). Operátor s portom sa zadáva za zdrojovú adresu alebo za cieľovú adresu a port sa potom aplikuje pri zdroji alebo cieľa.

Treba si dobre premyslieť, kam umiestniť kontrolu portu (či k zdroju alebo k cieľu), podľa toho, či aplikujeme ACL ako vstupné alebo výstupné (je popísané ďalej). Nasledujúci príklad ukazuje dve možnosti.

SWITCH (config) # access-list 105 permit tcp 10.1.0.0 0.0.0.255 any eq www 
SWITCH (config) # access-list 105 permit tcp 10.1.0.0 0.0.0.255 eq www any

Príklad:

ACL číslo 105 povoľuje prístup na server 10.5.1.10 odkiaľkoľvek, ale iba na port 80 (teda http) a ping.

SWITCH (config) # access-list 105 permit tcp any hosť 10.5.1.10 eq 80  
SWITCH (config) # access-list 105 permit ICMP any any echo  
SWITCH (config) # access-list 105 permit ICMP any any echo-reply SWITCH ( config) # access-list 105 deny ip any any  

Pozn .: Posledné pravidlo je defaultný a nevkladá sa.

Named ACL – pomenované ACL

  • môžeme ho použiť pre štandard aj extended ACL
  • umožňuje upravovať či mazať jednotlivé pravidlá v ACL
  • mená sa lepšie pamätajú
  • môžeme použiť „neobmedzený“ počet pomenovaných ACL
  • ako meno môžeme použiť aj číslo, ale to musí patriť do správneho rozsahu

Pozn .: Hoci majú pomenované ACL určité výhody, tak Cisco v niektorých materiáloch odporúča skôr používať bežné ACL. Pomenovaná ACL nejdú použiť úplne všade, ja však s nimi v praxi nemal problém.

Pomenované ACL sa vytvára iným spôsobom. Najprv vytvoríme ACL a zároveň sa prepneme do konfiguračného ACL módu .

SWITCH (config) # ip access-list {štandard | extended} meno

Ďalej zadávame jednotlivé pravidlá podľa typu ACL a s rovnakými možnosťami ako u číslovaných ACL. Číslo riadka (na začiatku príkazu) je nepovinné.

SWITCH (config-ext-nacl) # [číslo riadka] permit | deny. ..

Ak si zobrazíme ACL, tak uvidíme, že jednotlivé riadky sú očíslované. Pomocou týchto čísel môžeme pravidlá mazať a nové pravidlá môžeme vkladať na určité miesto.

Pozn .: Automatická čísla riadku sa vytvárajú po desiatkach (prvé pravidlo 10, potom 20, 30 …) a riadky sa číslujú aj u nepomenovaných ACL. Ak zadávame vlastné čísla, tak tie sa použijú a vidíme je pri zobrazení ACL. Ak sa však pozrieme do running-config, tak tu tieto čísla nie sú a po reštarte switcha sa automaticky prečíslujú.

Príklad:

SWITCH (config) # ip access-list extended meno  
SWITCH (config-ext-nacl) # deny ip 192.168.190.100 0.0.0.1 host 192.168.190.200  
SWITCH (config-ext-nacl) # permit ip any any 

Malé rady

  • kľúčové slovo host – miesto 10.0.5.2 0.0.0.0 môžeme použiť host 10.0.5.2
  • kľúčové slovo any – miesto 0.0.0.0 255.255.255.255 dáme any
  • Nemožno editovať alebo meniť poradie v bežných ACL, pravidlá sa pridávajú na koniec. Ak chceme niečo zmeniť, tak musíme celé ACL zmazať a znova vytvoriť.
  • Pri odstránení ACL sa môže stať, že ak je stále aplikované na interface, tak sa nahradí defaultným zákazom všetkého. Správne by však pri neexistencii ACL malo prechádzať všetko.

Konfigurácia ACL

Konfigurácia ACL sa vykonáva v dvoch krokoch

  • vytvorenie ACL – najprv vytvoríme pravidlá podľa typu ACL, viď. predchádzajúce odseky
  • aplikácie ACL na rozhranie – následne musíme toto ACL priradiť k nejakému objektu, v tomto prípade interfacu, to sa robí vždy rovnako

Aplikácia ACL

Tým, že aplikujeme ACL na interface , tak riadime prístup paketov k tomuto interfacu. ACL (v rozsahu popisovanom v tomto článku) môžeme aplikovať na nejaké rozhranie, ktorým môže byť port, sériová linka, VLAN, a pod.

Môžeme aplikovať iba jedno ACL pre interface, smer a protokol. Protokolom je myslené IP, IPX, Apple Talk pod. Takže napríklad pre jeden port v TCP / IP sieti môžeme aplikovať maximálne dve ACL (jedno vstupné – inbound a jedno výstupné – outbound).

Pri umiestňovaní ACL je treba dobre rozmýšľať, aby bolo umiestnenie efektívne. Pokiaľ to ide, tak je dobré voliť čo najbližšie zdroju, aby nebola zaťažovaná sieť. Môžeme však umiestňovať ACL iba na zariadenia, ktoré kontrolujeme, takže často je potrebné nastaviť ACL blízko cieľa.

Aplikácia ACL je jednoduchá. Prepneme sa na daný interface a pomocou príkazu ipaccess-groupnastavíme ACL určitého čísla alebo mena, spolu s určením smeru.

SWITCH (config-if) # ip access-group {číslo | meno ACL} {in | out}

Pozn .: Na otázku jedného čitateľa som sa dočítal, že smer out nie je podporovaný na L2 interface (tzn. Portoch), ale iba na L3 (typicky VLAN a routovanie port). A to sa týka iba L3 (C3750) a vyšších switchov, L2 switch (C2960) má iba in ACL. Takže smer out využijeme iba na routeroch a L3 switchoch. Pokiaľ nám ide o port ACL a switch, tak musíme daný port previesť na routovanie, pomocouno switchporta nastavenie IP adresy.

Príklad:

SWITCH (config) # interface Serial0  
SWITCH (config-if) # ip access-group 5 in

Určenie smeru

Určenie smeru, v ktorom má ACL pôsobiť nie je zložité. Treba sa pozrieť na switch, kde ho aplikujeme a rozhodnúť, či chceme obmedziť pakety, ktoré z neho odchádza (out) alebo hneď na vstupe, tie ktoré prichádza (in).

Standard ACL sa umiestňuje blízko cieľa a mal by teda byť vždy odchádzajúce –out. Na nasledujúcom obrázku obmedzujeme prevádzku, ktorý prichádza na server.

Extended ACL sa väčšinou snažíme umiestniť čo najbližšie k zdroju a v tom prípade je filter vstupné –in.

Kontrola ACL

Pár show príkazov pre kontrolu ACL.

SWITCH # show ip interface        // zobrazí info interface a je tu vidieť, ak je aplikovaný ACL 
SWITCH # show access-lists        // zoznam ACL (IP aj MAC) s pravidlami 
SWITCH # show ip access-lists     // zoznam IP ACL 
SWITCH # show running-config // v bežiaci konfigurácii sú take vidieť ACL aj ich aplikácie     

Ďalšou metódou pre ladenie ACL je využitie logovanie. Ku každému pravidlu môžeme na koniec pridať kľúčové slovo log a potom sú logovanie všetky pakety, ktoré splnia toto pravidlo.

Napríklad ak chceme vidieť komunikáciu, ktorá nie je zachytená žiadnym pravidlom v ACL a je teda zakázaná, môžeme na koniec pridať pravidlo

SWITCH (config) # access-list 5 deny any log 

ACL pre VTY

Mimo fyzických interface (ako sú porty) máme aj virtuálne, napr. Virtual Terminal (VTY, kam môžeme pristupovať cez telnet či ssh). Na VTY by sme mali aplikovať iba jedno ACL, aj keď sa vytvára viac spojení pre viac užívateľov (pretože ich nemôžeme rozlišovať – ​​nevieme, cez ktoré sa užívateľ pripojí).

ACL pre VTY sa vytvárajú rovnako, ale aplikácia sa vykonáva pomocou príkazu access-class.

SWITCH (config) # line vty 0 4  
SWITCH (config-line) # access-class 2 in 

Named Extended MAC ACL – pomenované rozšírené MAC ACL

Rovnako ako IP ACL môžeme vytvárať MAC ACL , ktoré filtrujú komunikáciu pomocou MAC adries a používajú sa na interface druhej vrstvy (podľa OSI modelu). Konfigurácia a použitie je podobné.

Pozn .: Môžeme použiť buď číslované štandardné MAC ACL (čísla 700 – 799), očíslované rozšírené MAC ACL (čísla 1100 – 1199) alebo pomenované rozšírené MAC ACL . Na rade switchov je ale k dispozícii iba pomenovanej rozšírené MAC ACL .

SWITCH (config) # mac access-list extended jmeno

Tým prejdeme do extended MAC access-list konfiguračného módu, kde definujeme jednotlivé pravidlá.

SWITCH (config-ext-Maclou) # [číslo riadka] {deny | permit} {hosť source MAC | source MAC mask | any} {hosť destination MAC | destination MAC mask | any}

Pozn .: Vyššie uvedené pravidlo môže obsahovať i rad voliteľných parametrov, ktoré určujú napríklad EtherType alebo COS.

Príklad:

SWITCH (config) # mac access-list extended test  
SWITCH (config-ext-Maclou) # permit hosť 0000.1111.2222 any 
SWITCH (config-ext-Maclou) # deny any any

MAC ACL sa aplikuje na interface 2. vrstvy a môžeme aplikovať iba jeden MAC ACL na interface. Aplikácia môže byť len na vstupe (in). Pre aplikáciu slúži príkaz:

SWITCH (config-if) # mac access-group meno-ACL in

Pre zobrazenie aplikácie MAC ACL na porty môžeme použiť príkaz:

SWITCH # show mac access-group