Instalace a konfigurace pro spolupráci s Cisco síťovými prvky
Lubomír Walder
[wal056]
Tomáš Szkandera
[szk018]
Úvod
Protokol TACACS+ [1,2], navržen firmou Cisco Systems, je síťový autentizační,
autorizační a účtovací (AAA [3])
protokol umožňující řízení a kontrolu přístupu na síťové prvky pomocí jednoho nebo více centralizovaných serverů.
Kontrola přístupu tedy nemusí být soustředěna v každém síťovém prvku, ke kterému se jeho správce připojuje,
ale veškerá přístupová práva mohou být uložena právě na jednom centralizovaném serveru. Tento server pak může
obsahovat kontrolu přístupu pro mnoho dalších síťových prvků, čímž se výrazně usnadňuje sledování a konfigurace
přístupových práv pro všechna tato zařízení. Samozřejmě jednotlivá zařízení musí protokol TACACS+
podporovat.
Protokol TACACS+ je následovníkem protokolu TACACS. Na rozdíl od původního protokolu však například poskytuje detailnější
účtovací informace, hesla přenáší s použitím otisku MD5 a umožňuje šifrování komunikace (v původní specifikaci
TACACS se veškeré informace přenášely v „clear-text“ podobě) [4].
Před uvedením TACACS+ vznikla ještě verze XTACACS,
bylo to však jen upravení původního protokolu s přidáním možnosti AAA přes více TACACS serverů a s podporou více
různých protokolů (SLIP, PPP a dalších). TACACS+ obsahuje natolik významné změny, že není zpětně kompatibilní s
původním TACACS protokolem ani s rozšířeným XTACACS.
Autentizace, autorizace, účtování
Tato trojice pojmů (v angličtině authentication, autorization, accounting) a její zkratka AAA vzešly z oblasti počítačové
bezpečnosti a symbolizují základní skupinu „funkcí“ kterou poskytují protokoly pro správu přístupu v počítačových sítích.
TACACS+ není jediný AAA protokol, existuje několik dalších podobných protokolů jako například Diameter, RADIUS nebo Kerberos
[3]. Dnes velmi rozšířeným protokolem pro autorizaci v počítačových sítích je již zmíněný Radius, ten
však, na rozdíl od TACACSu, pracuje nad méně spolehlivým protokolem UDP, nešifruje veškerou komunikaci, nemá příliš možností
pro autorizaci apod. Oba protokoly však mohou běžet v síti současně a vhodně se tak doplňovat. Více informací a srovnání těchto
protokolů lze nalézt na stránkách ciscopressu [9].
Při použití protokolu TACACS+ lze funkce AAA definovat konkrétně takto: Autentizace (authentication) – znamená potvrzení, že uživatel požadující přístup na síťový prvek je platným uživatelem
(administrátorem) tohoto prvku. Autentizace je dosažena pomocí představení jeho identity a hesla. Autorizace (autorization) - znamená udělení specifického typu služby uživateli, na základě jeho autentizace, služeb,
které požaduje a aktuálního stavu systému. Autorizace může být konkrétně založena na omezeních, například omezení provádět
určité příkazy nebo přechod do privilegovaného režimu. Účtování (accounting) - znamená sledování využívání síťových služeb uživateli. Tyto informace mohou být použity pro
správu, plánování, účtování, nebo další účely. V případě TACACS+ lze například sledovat, kdo a v kolik hodin se přihlásil
na síťový prvek, které příkazy spouštěl, lze sledovat i systémové události jako odchozí spojení
apod.
Instalace TACACS+ serveru
Informace v této a dalších částech byly čerpány převážně ze zdrojů [5] a
[6].
Cisco Systems poskytuje aktuální verze TACACS+ serveru pouze ve svém softwarovém balíku „Cisco Secure ACS“, který je ovšem licencovaný
a není zdarma. Starší verze TACACS+ serveru, kdy ještě nebyly součástí CSACS, jsou volně k dispozici včetně zdrojových kódů, a tak existuje mnoho jejich modifikací.
Na stránkách turecké Gazi Univerzity [7] jsme sice našli již modifikovanou verzi TACACS+ serveru,
avšak stáhli jsme odtud pouze originální Cisco verzi (F4.0.3), která je na těchto stránkách také k dispozici.
Stažený balík jsme rozbalili příkazem: >tar –xzvf tac_plus-F4.0.3.alpha.tar.Z
po jednoduché úpravě Makefile pro systém Linux jsme spustili kompilaci a instalaci
>make tac_plus
>make install
Konfigurace TACACS+ serveru
Celou úlohu jsme testovali na následujícím zapojení:
Srdcem PC1 i PC2 byl operační systém Linux, obě PC byly připojeny k routeru klasickým ethernetovým kabelem.
PC1 sloužilo jako klient, tedy počítač, ze kterého se administrátor připojoval na router pomocí telnetu.
Na PC2 byl nainstalován a nakonfigurován server TACACS+. Pro jistotu uvádíme konfiguraci sítě na obou PC:
PC1:
PC2:
>ifconfig eth0 1.0.0.2/24 up >route add default gw 1.0.0.1
>ifconfig eth0 2.0.0.2/24 up >route add default gw 2.0.0.1
Konfigurace TACACS+ serveru je uložena v jediném souboru tac_plus.conf, na jehož jméně ani umístění však prakticky nezáleží, jelikož
cesta k tomuto souboru se předává jako parametr při spouštění serveru.
Konfigurační soubor má vcelku jednoduchou a srozumitelnou podobu, uvedeme zde ale jen příkazy, které jsme sami využili, případně
některé jiné důležité či zajímavé. Spolupráci s TACACS+ serverem umožňují síťové prvky, jejichž IOS tuto možnost podporuje.
My jsme možnosti TACACSu testovali na Cisco routeru série 2800 (IOS v12.3(14)T7), pro zjednodušení budeme dále uvádět jen „router“.
Celý námi použitý konfigurační soubor je k dispozici zde.
Vybrané příkazy konfiguračního souboru TACACS+ serveru (tac_plus.conf):
Pokud chceme aby komunikace mezi routerem a serverem byla šifrována, musíme v konfiguračním souboru nastavit heslo pro šifrování příkazem:
key = heslo
Stejné heslo se samozřejmě musí nastavit i na routeru (viz Konfigurace routeru).
My jsme tuto možnost však nevyužili neboť bychom nebyli
schopni číst přenášené pakety pomocí Etherealu.
Dále bychom měli definovat cestu k souboru, do kterého se budou ukládat účtovací informace. Tato volba je účinná pouze při povoleném
accountingu na routeru.
accounting file = /home/cnap/wal056/tac.log
Pokud je na routeru povoleno, aby se heslo pro vstup do enable režimu získávalo také z tacacs+ serveru, pak následujícím způsobem
toto heslo nadefinujeme:
user = $enable$ { login = cleartext "heslo" }
Kontrola přístupu na router je založena na systému uživatelů a skupin. Skupiny musí být definovány jako první. Definice uživatelů
i skupin může obsahovat prakticky stejné příkazy. Při použití autorizace jsou veškeré příkazy na routeru implicitně zakázány a musí se
jednotlivě povolovat.
Následující příklad zobrazuje definici skupiny uživatelů a jejich omezení:
Tato skupina má heslo „tester“ uloženo v cleartextové podobě, heslo lze uložit i šifrovaně v DES formátu a to příkazem
login = des XXXXX. Heslo vyprší 31.12.2007. Povolené příkazy jsou show a všechny jeho tvary
(např. show runnig-config, show ip route, atd.) a příkaz ping na adresy 2.0.0.X.
Pro definici povolených IP adres se používají regulární výrazy.
Jednotlivé uživatele přiřazujeme skupinám následovně:
user = wal056 {
member = testers
}
Uživatel wal056 je členem skupiny testers, jeho přístupové parametry a povolení jsou tedy definovány uvnitř této skupiny.
Jednotlivé uživatele lze však definovat i samostatně, není nutné je vůbec přiřazovat skupině a pro jejich specifikaci se
používají stéjné příkazy jako v definici skupin:
user = superuser {
default service = permit
login = cleartext "superuser"
}
Uživatel superuser má povoleny veškeré příkazy na routeru. Toho jsme dosáhli vložením příkazu default service = permit.
Pokud má takto uživatel všechny příkazy povoleny, lze je nyní jednotlivě zakazovat příkazem deny, který se zapisuje
úplně stejně jako příkaz permit.
TACACS+ server, při rozhodování o povolení či zakázu provedení příkazu, prochází definovaná omezení směrem od shora dolů. To znamená,
že jakmile je nalezena shoda, je odeslán kód PERMIT. Pokud po průchodu celé definice uživatele (resp. skupiny) shoda není nalezena,
pak je návratový kód vždy DENY. To znamená, že definice omezení lze psát například i takto:
cmd = ping {
deny 2\.0\.0\.[0-9]+
permit .*
}
V tomto případě má uživatel zakáz pingu pouze na adresy 2.0.0.X, ostatní má povoleny.
Dále musíme uvést, že výše uvedený „accounting file“ se nám při spuštění TACACS+ serveru nevytvořil automaticky, takže je vhodné jej
ručně vytvořit a nastavit přístupová práva:
kde –C udává cestu ke konfiguračnímu souboru a –d 16 úroveň podrobnosti zápisu do log souboru.
Více o spouštěcích parametrech v manuálových stránkách (>man tac_plus).
Spuštění TACACSu ověříme kontrolou logu (/var/log/tac_plus.log), kde by se měl objevit podobný záznam:
Wed Dec 20 12:40:54 2006 [1986]: Reading config
Wed Dec 20 12:40:54 2006 [1986]: Version F4.0.4.alpha Initialized 1
Wed Dec 20 12:40:54 2006 [1986]: tac_plus server F4.0.4.alpha starting
Wed Dec 20 12:40:54 2006 [1986]: Backgrounded
Pro jistotu prohledáme seznam spuštěných procesů a ujistíme se, že TACACS+ server opravdu běží:
Zde uvedená konfigurace TACACSu je velmi jednoduchá, my jsme se spíše zaměřili na konfiguraci routeru, jelikož ta je mnohem složitější.
Navíc jsme, bohužel, nikde nenašli nějakou obsáhlejší dokumentaci, jaké další příkazy lze v konfiguračním souboru použít.
Nepřišli jsme ani na to, jak například povolit určitému uživateli konfiguraci jen některých rozhraní, protože k tomu je již třeba sekvence
příkazů configure terminal -> interface FastEthernet X/Y -> ip-address X.X.X.X a na způsob, jak tuto sekvenci dostat
do konfiguračního souboru, jsme opravdu nepřišli.
Konfigurace routeru pro spolupráci s TACACS+ serverem
Konfigurace routeru musí být provedena tak, aby i při výpadku TACACS+ serveru byla stále zajištěna alespoň určitá kontrola
přístupu na router pomocí jeho vlastních prostředků.
Nejdříve v konfiguračním režimu globálně povolíme autentizaci, autorizaci a účtování příkazem:
aaa new-model
(funkci AAA lze jednoduše vypnout klasickým způsobem: no aaa new-model)
Dále nastavíme heslo do enable režimu. Toto heslo bude použito v případě poruchy TACACS+ serveru jako přihlašovací heslo (viz níže):
enable password cisco
Nyní můžeme přistoupit k nastavení autentizace.
Nastavení autentizace
Pro aktivaci autentizace je nejprve nutné vytvořit seznamy zkoušených metod k zíkání hesla pro přístup na router.
Pro každý způsob připojení na router můžeme definovat seznam zvlášť:
aaa authentication login VTYMETHOD group tacacs+ enable
aaa authentication login CONMETHOD group tacacs+ enable
Takto jsme nastavili seznamy jménem VTYMETHOD a CONMETHOD, které později přiřadíme pro daný typ připojení.
Na základě těchto seznamů se heslo pro přístup na router bude získávat z TACACS+ serveru a pokud server neodpoví,
pak se pro přístup použije heslo z enable režimu (lokální heslo, definované výše).
Pokud při výpadku TACACSu chceme pro autentizaci použít jiné heslo než do enable režimu, stačí klíčové slovo enable nahradit
slovem local. Pak se pro připojení na router použije přihlašovací jméno a heslo z lokálního seznamu uživatelů.
Lokální uživatele pak nastavíme následovně:
username uzivatel privilege 15 password heslo
Nesmíme zapomenout nastavit router tak, aby i heslo do enable režimu bylo pokud možno vzato z TACACS+ serveru,
v případě výpadku TACACSu bude použito lokálně nastavené enable heslo:
aaa authentication enable default group tacacs+ enable
Nyní je na řadě zadat adresu TACACS+ serveru a případně klíč, jímž se bude komunikace šifrovat. Tento klíč musí být shodný zde
na routeru i v konfiguračním souboru TACACS+ serveru (viz výše). My jsme ale šifrování nepoužili, příkaz je zde uveden jen pro úplnost.
V konfiguračním režimu nyní nastavíme metody přístupu na router a přiřadíme jim výše definované seznamy.
Nejprve metoda přístupu na router přes konzoli 0:
line console 0
login authentication CONMETHOD
exec-timeout 0 0
exit
Při přístupu přes konzoli se použije heslo získané metodou definovanou v seznamu CONMETHOD, příkazem exec-timeout <m> <s>
určujeme dobu nečinosti, po které bude uživatel odpojen. Hodnoty 0 0 znamenají, že uživatel nebude opojen ani při dlouhé nečinosti.
Podobně jako konzoli nyní nastavíme metodu pro připojení přes telnet. Příkaz line vty 0 2 znamená, že toto nastavení bude
přiřazeno virtuálním terminálům 0, 1 a 2.
Teď, když máme nastavenu autentizaci pomocí TACACS+ serveru, můžeme si toto nastavení ověřit. Pokud jsme pozměnili konfigurační
soubor TACACSu, je dobré daemona restartovat:
Nyní se připojíme k routeru přes konzoli (pomocí minicom):
Press RETURN to get started.
User Access Verification
Username: wal056
Password: tester
Router>enable
Password: neznamheslo
% Error in authentication
Router>enable
Password: enable
Router#
Vyzkoušíme totéž z počítače PC1 přes telnet:
Ws:/home/cnap# telnet 1.0.0.1
Trying 1.0.0.1...
Connected to 1.0.0.1
Escape character is ‘^]’
Username: wal056
Password: tester
Router>enable
Password: enable
Router#
Pokud je na routeru spuštěn debug autentizace (debug aaa authentication) pak můžeme
vidět komunikaci mezi routerem a TACACS+ serverem.
Server příjímá pakety protokolu TACACS+ na TCP portu 49. Pakety se přenášejí v binární
podobě. My jsme je sledovali pomocí programu Ethereal.
V hlavičce paketů protokolu TACACS+ jsme zaznamenali tyto informace:
Z těchto informací snad stojí za zmínku parametr type který udává obsah paketu: Authentication (1),
Authorization (2), Accounting (3) a parametr flags určující, zda je obsah šifrovaný či nikoli.
Veškeré důležité informace se pak přenášejí v částech "request" (směr router->tacacs) a "reply" (směr tacacs->router):
Uživatel se přihlašuje na router, ten zasílá TACACSu oznámení o připojení uživatele:
Request
Action: Inbound Login
Privilege Level: 1
Authentication type: ASCII
Service: Login
User len: 0
Port len: 6
Port: tty194
Remaddr len: 7
Remote Address: 1.0.0.2
Data: 0 (not used)
Odpověd TACACS+ serveru - požadavek na uživatelské jméno:
Reply
Status: 0x4 (Send Username)
Flags: 0x00
Server message length: 37
Server message:
Router odpovídá a připojuje username:
Request
Flags: 0x00
User length: 6
User: wal056
Data length: 0
TACACAS+ server požaduje heslo pro daný username:
Reply
Status: 0x5 (Send Password)
Flags: 0x01 (NoEcho)
Server message length: 10
Server message: Password:
Data length: 0
Router zasílá heslo:
Request
Flags: 0x00
User length: 6
User: tester
Data length: 0
TACACAS+ server na základě přijatých údajů odesílá povolení pro přístup:
Reply
Status: 0x1 (Authentication Passed)
Flags: 0x00
Server message length: 0
Data length: 0
Kompletní soubor zachycených paketů ve tvaru pro program Ethereal je zde.
Textová verze zde.
V tomto případě jsme tedy dostali přístup na router přes přihlašovací údaje z TACACS+ serveru. Proč tedy nevyzkoušet zastavit TACACS+ server
a ověřit, jak se autorizace bude chovat při jeho výpadku:
Připojení přes konzoli:
Press RETURN to get started.
Password: cisco
Router>enable
Password: cisco
Router#
Připojení z PC1 přes telnet:
>Ws:/home/cnap# telnet 1.0.0.1
Trying 1.0.0.1…
Connected to 1.0.0.1
Escape character is ‘^]’
Password: cisco
Router>enable
Password: cisco
Při výpadku TACACS+ serveru se tedy pro přístup na router použije heslo do enable režimu, tak jak bylo definováno v seznamech
CONMETHOD a VTYMETHOD.
Nastavení autorizace
Teď, když máme na routeru zajištěnu autentizaci, můžeme přistoupit k nastavení autorizace, tedy filtrování příkazů pro jednotlivé uživatele.
Příkazy systému IOS v Cisco routerech jsou rozděleny do tzv. „privilegovaných úrovní“ (privilege level).
V každé úrovni lze používat jen některé příkazy. Platí, že v čím vyšší úrovni se administrátor nachází,
tím má větší možnost konfigurace routeru. Implicitní privilegované úrovně jsou:
privilege level 0, který zahrnuje příkazy disable, enable, exit, help, a logout
privilege level 1, režim disable – příkazový řádek má tvar router>
privilege level 15, režim enable – příkazový řádek má tvar router#
Autorizaci povolujeme pro jednotlivé privilegované režimy. My jsme aktivovali autorizaci příkazů pomocí serveru TACACS+ pro režimy 1 a 15,
pokud bude TACACS nedostupný, nebude se autorizace provádět vůbec a připojený uživatel bude mít k dispozici všechny příkazy:
aaa authorization commands 1 default group tacacs+ none
aaa authorization commands 15 default group tacacs+ none
Teď, když je autorizace aktivována, můžeme ji ověřit. Připojíme se k routeru z PC1 přes telnet jako uživatel „wal056“,
ten má povoleny pouze příkazy show a příkaz ping pouze na určité adresy:
>ws:/home/cnap# telnet 1.0.0.1
Trying 1.0.0.1…
Connected to 1.0.0.1
Escape character is ‘^]’
Username: wal056
Password: tester
Router>enable
Password: enable
Router# configure terminal
Command authorization failed
Router#show ip route (příkaz byl proveden)
Router# ping 2.0.1.2
Command authorization failed
Router# ping 2.0.0.2 (příkaz byl proveden)
Parametr Service: TAC_PLUS_AUTHEN_SVC_NONE určuje přes jakou službu je uživatel autentizován (ARAP, PPP, ...) [10]. Parametr Auth status
v odpovědi znamená udělení (PASS_ADD) či neudělení (FAIL) autorizace pro daný požadavek [11].
Kompletní soubor zachycených paketů ve tvaru pro program Ethereal je
zde. Textová verze zde.
Nastavení účtování
Účtování lze na routeru nastavit pro tyto události [8]: command – budou účtovány (zaznamenávány) příkazy v dané privilegované úrovni connection – budou účtovány všechny odchozí spojení exec – budou účtovány uživatelské EXEC příkazy network – účtování síťově zaměřených požadavků na služby jako PPP nebo ARAP system – budou účtovány systémové události
Zasílání účtovacích informací serveru TACACS může být aktivováno ve třech režimech: start-stop – jeden účtovací záznam je odeslán hned na počátku relace (například při přihlášení uživatele, při počátku odchozího
spojení apod.), další záznam, včetně statistik, je zaslán na konci této relace. stop-only – celý účtovácí záznam je odeslán až při ukončení relace. wait-start – účtovací záznam je odeslán jakmile je od TACACS+ serveru přijato potvrzení o oznámení započetí session.
Další záznam včetně statistik je odeslán na konci realce.
My jsme povolili účtování pro všechny události a příkazy: aaa accounting exec default start-stop group tacacs+ aaa accounting connection default start-stop group tacacs+ aaa accounting network default start-stop group tacacs+ aaa accounting system default start-stop group tacacs+ aaa accounting commands 0 default start-stop group tacacs+ aaa accounting commands 1 default start-stop group tacacs+ aaa accounting commands 15 default start-stop group tacacs+
Soubor s účtovacími záznamy má v celku přehlednou strukturu, takže případně není problém si jej pomocí vlastního skriptu převést do HTML podoby,
vytvářet statistiky, grafy a podobně.
Pro příklad uvedeme několik řádků vyjmutých z účtovacího souboru:
V tomto případě přišel účtovací záznam z adresy 2.0.0.1, k routeru se připojoval uživatel superuser a v privilegované úrovni 0 spouštěl příkaz enable.
Druhý řádek obsahuje informace o odpojení uživatele superuser a statistické informace o jeho relaci.
Accounting file, který se vytvořil za dobu našeho testování si lze prohlédnout zde.
Seznam zkratek
AAA – Authentication, Autorization, Accounting – autentizace, autorizace a účtování přístupu v počítačových sítích
ARAP - Apple Remote Access Protocol
DES – Data Encryption Standard
HTML - HyperText Transfer Protocol
IOS - Internetwork Operating System
IP – Internet Protocol
RADIUS - Remote Authentication Dial In User Service
SLIP – Serial Line Internet Protocol
TACACS - Terminal Access Controller Access-Control System
PPP – Point to Point Protocol