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
- Port ACL – pre fyzický L2 interface (aplikujeme na port), len prichádzajúce smer
- MAC ACL (Ethernet ACL) – non-IP prevádzku
- port ACL
- Standard
- extended
- Named Extended
- VLAN máp
- Named Extended
- port ACL
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.0
má inverzný verziu0.0.0.255
alebo k255.255.192.0
ich0.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|permit
môžeme tiež použiť kľúčové slovo remark
a za neho vložiť popis (komentár) daného pravidla.
Voliteľný atribút log
spô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é slovofragments
v 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-group
nastaví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 switchport
a 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