www.SAMURAJ-cz.com 

26.04.2024 Oto Translate to English by Google     VÍTEJTE V MÉM SVĚTĚ

Články

Cisco IOS 23 - Autentizace uživatele na switchi vůči Active Directory

Upraveno 15.10.2009 15:13 | vytvořeno 15.09.2009 17:09 | Samuraj - Petr Bouška |
V tomto díle seriálu o konfiguraci Cisco IOSu se podíváme na zabezpečení přístupu k příkazovému řádku switche (CLI), tedy k IOSu. Primárně budeme řešit autentizaci na switchi vůči MS Active Directory (za pomoci RADIUS serveru), ale podíváme se i na další možnosti. Jednoduchý popis této problematiky byl již v 5tém čísle.

Základní ochranou přístupu na konfiguraci switche je použití autentizace. Heslem můžeme chránit přístup do privilegovaného režimu. Také můžeme definovat kombinace uživatelských jmen a hesel, která se použijí při přístupu na switch (přes konzoli, telnet, ssh apod). Tyto účty můžeme definovat lokálně na switchi, ale můžeme použít i centrální adresář, jako je MS Active Directory a využít RADIUS nebo TACACS+ server. K účtům můžeme přiřazovat i stupeň oprávnění (tedy autorizaci), který daný uživatel získá po přihlášení.

Heslo pro přístup do privilegovaného režimu

Tzv. enable password se skládá z řetězce 1 až 25 alfanumerických znaků, musí začínat písmenem a záleží na velikosti písmen. Heslo můžeme zadat tak, že se do konfigurace uloží v čistém textu nebo se uloží pouze jeho MD5 hash. Pokud neurčíme jinak, tak se nastaví level oprávnění 15 (možnosti jsou 0 až 15, 15 je nejvyšší).

SWITCH(config)#enable password Heslo // nešifrované heslo 
SWITCH(config)#no enable password    // zruší heslo
SWITCH(config)#enable secret Heslo   // šifrované heslo

Pokud chceme nastavit menší oprávnění, můžeme zadat spolu s úrovní.

SWITCH(config)#enable secret level 10 Heslo 

Pozn.: Defaultně existují pouze úrovně 1 (uživatelský mód) a 15 (privilegovaný mód), pokud chceme použít podrobnější oprávnění, musíme definovat další úrovně příkazem privilege.

Když zadáme enable secret heslo, tak jej v konfiguraci uvidíme zašifrované, příkaz pak obsahuje typ šifrování (5) a hash hesla.

SWITCH(config)#enable secret 5 $1$x5YQ$lVO5XFIA19d06rYOPJb3G/ 

Vytvoření lokálních uživatelů

Enable heslo chrání až přístup do privilegovaného režimu (po zadání příkazu enable), ale nechrání vlastní přístup k zařízení (a tedy do uživatelského módu). Může existovat pouze jedno pro každou úroveň. Jako další stupeň můžeme vytvořit lokální uživatele (tedy kombinaci uživatelské jméno a heslo) a ty pak přiřadit jako zdroj autentizace na různé místo, například přístup ke switchi přes konzoli. Uživatele můžeme zadat s nebo bez určení oprávnění. U hesel platí obdoba jako u enable hesla.

SWITCH(config)#username admin secret Heslo
SWITCH(config)#username admin privilege 15 secret 5 $1$VdJx$jU4LU/TtOsJjd2iHS/gAh0 

Použití RADIUS serveru pro autentizaci

Ve větším prostředí a pro přehlednější správu uživatelů se určitě hodí použít nějaký centrální adresář (jako je MS Active Directory). Autentizaci vůči adresáři můžeme nastavit pomocí RADIUS serveru. Na switchi se k tomu používá komponenta AAA - Authentication, Authorization, Accounting.

Nejprve musíme definovat alespoň jeden RADIUS server. Lepší je použít dva z důvodu redundance. Volitelně můžeme zadat UDP port pro autentizaci a pro accounting.

SWITCH(config)#radius-server host 10.0.0.10 auth-port 1645 acct-port 1646 key 1234567890

Dále vytváříme pojmenovaný seznam autentizačních metod. Tento seznam určuje jaké metody a v jakém pořadí se použijí. Následně tento seznam aplikujeme na určité přístupové linky. Standardně existuje výchozí seznam default, který je aplikovaný na všechny linky. Můžeme upravit parametry seznamu default nebo vytvořit nový.

V příkladu vytváříme seznam se jménem RADIUSauthGroup. Tomuto seznamu nastavíme dvě metody, nejprve se vyzkouší lokální uživatelé - local a pokud nebude úspěch (ale také se nevrátí, že bylo zadáno chybné heslo), tak se zkusí RADIUS server - group radius.

Pozn.: Když použijeme RADIUS, tak je třeba pamatovat na určité krizové situace, kdy není tento server dostupný. A tudíž mít i nějakou lokální metodu pro přihlášení.

SWITCH(config)#aaa new-model      // zapne AAA
SWITCH(config)#aaa authentication login RADIUSauthGroup local group radius

Další možné metody pro autentizaci jsou enable - použije se heslo pro přístup do privilegovaného režimu (musí být nejprve nastaveno) a line - použije heslo nastavené pro linku.

Po vytvoření seznamu jej potřebujeme aplikovat na nějaký vstup. V příkladu se jedná o přístup přes konzoli.

SWITCH(config)#line console 0     // vybereme linku, zde konzole
SWITCH(config-line)#login authentication RADIUSauthGroup  // aplikujeme autentizační seznam

Podobně můžeme změnit i metody, které se používají při autentizaci do privilegovaného režimu. Zde můžeme měnit pouze defaultní chování a nahradit metodu enable třeba none (žádné heslo). Při použití RADIUS serveru je zde problém, že nezadáváme jméno uživatele (použije se speciální řetězec $enab15$), ale pouze heslo.

SWITCH(config)#aaa authentication enable default none

Při přihlašování přes RADIUS můžeme zařídit i to, abychom se po zalogování dostali rovnou do privilegovaného režimu (a nemuseli zadávat příkaz enable a případně heslo). Zařídíme to tak, že nastavíme autorizaci na VTY a z RADIUS serveru předáme AV pár shell:priv-lvl=15. Dohromady s autorizací je třeba nastavit i autentizaci.

Pozn.: Nevím proč, ale toto nastavení nefunguje pro konzoli. Při debugu je vidět, že se celý proces chová trošku jinak.

SWITCH(config)#aaa authorization exec RADIUSauthGroup local group radius
SWITCH(config)#line vty 0 4       // vybereme linku, VTY 0 až 4
SWITCH(config-line)#authorization exec RADIUSauthGroup  // aplikujeme autorizační seznam

Bezpečnostní kontroly pro přihlašování

IOS nám nabízí ještě několik kontrolních mechanismů pro dohled nad přihlašováním ke switchi. První možností je logování chybných pokusů o přihlášení nebo odeslání SNMP trapu. Následující příkaz zaloguje zprávu při každém chybném přihlášení. Příkaz můžeme ještě doplnit o klíčové slovo every, které zajistí, že se zpráva uloží až po zadaném počtu chybných přihlášení.

SWITCH(config)#login on-failure log  // vytvoří záznam do logu
SWITCH(config)#login on-failure trap // odešle SNMP trap
SWITCH(config)#login on-failure      // vytvoří záznam do logu a odešle SNMP trap

Stejným způsobem můžeme logovat i úspěšné pokusy o přihlášení. V záznamu je uvedeno uživatelské jméno a IP adresa, z které se přihlašuje, což se nám může hodit sledovat.

SWITCH(config)#login on-success log

K přihlašování můžeme přidat i ochranu proti Brute Force útokům na zjištění hesla (automatizovaně se zkouší různá hesla, až se uhádne to správné). Můžeme nastavit, kolik chybných pokusů o přihlášení, může být provedeno v určitém čase, při překročení se switch přepne do quite-mode (tichého módu), kdy neakceptuje přihlášení. První hodnota u příkazu (v příkladu 60s) znamená počet sekund, na které se switch přepne do tichého módu (neakceptuje přihlášení). Druhá hodnota je počet chybných pokusů o přihlášení (zde 3). A poslední je časový interval (v příkladu 60s), v kterém musí dojít k zadanému počtu chybných přihlášení, aby se přepnul do tichého módu.

SWITCH(config)#login block-for 60 attempts 3 within 30

Když se switch přepne do quite-mode, tak se aplikuje ACL, které zablokuje všechny pokusy o přihlášení přes telnet, ssh a http. Pokud by nastal cílený útok na switch, který by stále blokoval přihlášení, tak by zablokoval přístup i nám. Proto můžeme nastavit bezpečnostní opatření, a to ACL, které se uplatní po přepnutí do quite-mode, které nám třeba umožní přihlášení z jedné určité IP adresy.

SWITCH(config)#access-list 10 permit 10.0.0.5
SWITCH(config)#login quiet-mode access-class 10

Ještě můžeme nastavit jeden parametr a to je zpoždění, po jakém mohou následovat pokusy o přihlášení (úspěšné i neúspěšné). Můžeme zadat 1 (což je defaultní hodnota) až 10 sekund.

SWITCH(config)#login delay 10

Jaké hodnoty máme nastaveny, můžeme zkontrolovat následujícím příkazem.

SWITCH#show login

Autentizace pro webový přístup HTTP(S)

Výše jsme pospali způsob, jak nastavit autentizaci (a případně i autorizaci) a přiřadit ji k přístupu přes konzoli, telnet či ssh. Stejný způsob můžeme použít i pro autentizaci při přístupu na webové rozhranní switche. Můžeme využít defaultní seznam, kde definujeme použití RADIUS serveru. Musíme nastavit autentizaci i autorizaci, přiřazení pak provedeme jedním příkazem.

SWITCH(config)#aaa authentication login default group radius
SWITCH(config)#aaa authorization exec default group radius
SWITCH(config)#ip http authentication aaa

Nebo vytvoříme nový pojmenovaný seznam autentizačních metod a přiřadíme jej k autentizaci a autorizaci na webu.

SWITCH(config)#aaa authentication login WEB group radius
SWITCH(config)#aaa authorization exec WEB group radius
SWITCH(config)#ip http authentication aaa login-authentication WEB
SWITCH(config)#ip http authentication aaa exec-authorization WEB

Nefunkční autentizace z RADIUSu na web

Když jsem řešil autentizaci na CLI switche a zároveň do webového rozhranní, tak jsem narazil na problém, který se na internetu hojně řeší (i když nevím, zda úspěšně). Stane se to, že máme vytvořený seznam a ten nám krásně funguje pro CLI. Přidáme pouze příkaz, aby se použil i pro http a tam nám stále dokola vyskakuje okénko se zadáním přihlašovacích údajů.

Pozn.: U starších verzí IOSu existoval pouze příkaz ip http authentication aaa, takže se nedal zadat pojmenovaný seznam a vždy se použil default.

Situace může nastat, i když máme pro přihlašování z webu samostatný seznam, jako je následující.

SWITCH(config)#aaa authentication login WEB local group radius
SWITCH(config)#aaa authorization exec WEB local group radius
SWITCH(config)#ip http authentication aaa login-authentication WEB
SWITCH(config)#ip http authentication aaa exec-authorization WEB

Pokud zapneme debugování, tak vidíme, že autentizace projde v pořádku, ale u autorizace dojde k chybě a do logu se zapíše:

HTTP: Authentication failed for level 15

Na RADIUS serveru jsou ve stejnou vteřinu dva požadavky. První projde v pořádku (granted access), ale druhý ne (denied access). Nepřišel jsem na to, co je v dotazu špatně. Při autentizaci z CLI se pošle pouze jeden požadavek a údaje z něj se použijí i pro autorizaci.
Každopádně celý problém spočívá v tom, že v seznamu pro autorizaci byla před RADIUSem ještě metoda local. Pokud ji odstraníme, tak vše proběhne v pořádku.

SWITCH(config)#aaa authentication login WEB local group radius
SWITCH(config)#aaa authorization exec WEB group radius
SWITCH(config)#ip http authentication aaa login-authentication WEB
SWITCH(config)#ip http authentication aaa exec-authorization WEB

Problém je tedy v tom, že si můžeme vybrat buď ověřování vůči RADIUS serveru, nebo lokální uživatele, ale ne oboje.

Ukázková konfigurace

Příklad konfigurace, která nastaví přihlašování přes RADIUS server do konzole, prvních pěti VTY (telnet) a na web.

SWITCH(config)#enable secret Heslo  
SWITCH(config)#username admin secret Heslo
SWITCH(config)#radius-server host 10.0.0.10 auth-port 1645 acct-port 1646 key 1234567890
SWITCH(config)#aaa new-model 
SWITCH(config)#aaa authentication login RADIUSauthGroup local group radius
SWITCH(config)#aaa authorization exec RADIUSauthGroup local group radius
SWITCH(config)#aaa authentication login default group radius
SWITCH(config)#aaa authorization exec default group radius
SWITCH(config)#ip http authentication aaa
SWITCH(config)#line vty 0 4
SWITCH(config-line)#login authentication RADIUSauthGroup
SWITCH(config-line)#authorization exec RADIUSauthGroup
SWITCH(config)#line console 0
SWITCH(config-line)#login authentication RADIUSauthGroup

Parametry přístupových linek do CLI

Pro doplnění ještě pár informací ohledně přístupu na CLI.

Přístup na CLI (Command Line Interface) switche je možný několika způsoby, které se souhrnně označují jako linky - line. Hlavní typy jsou CON - Console (označovaná jako CTY), tedy přístup přes sériový (konzolový) port zařízení. Dále VTY - Virtual Terminal, logické (softwarové) linky (fyzicky neexistují), které se použijí při přístupu přes síť, standardně se na nich používá protokol telnet, případně SSH (či další). AUX - Auxiliary, pomocný port, mají jej pouze některá zařízení a jedná se o druhý fyzický sériový port. Poslední možností jsou TTY, asynchronní sériové porty, které se mohou použít pro připojení sériových modemů nebo tiskáren, bývají většinou na přídavné kartě.

SWITCH(config-line)#logging synchronous    // zabrání výpisu hlášek do psaného textu v CLI
SWITCH(config-line)#exec-timeout 0 0       // vypne timeout při neaktivitě (jinak se zadává počet minut a sekund)
SWITCH(config-line)#session-timeout 3      // za jak dlouho vyprší session v minutách, obdoba předchozího
SWITCH(config-line)#transport input telnet // přístup do této linky je přes protokol telnet
SWITCH(config-line)#length 0               // počet řádek na obrazovce, 0 nezastavovat
SWITCH(config-line)#password Heslo         // nastaví heslo pro přístup do této linky

Příklad konfigurace MS IAS - RADIUS server

Aby byl popis v tomto článku úplný, tak ještě stručně doplním, jak nastavit Microsoftí RADIUS server, aby fungoval s výše uvedenou konfigurací.

Současí MS Windows Server 2003 je komponenta Internet Authentication Service (IAS), která obsahuje RADIUS (Remote Authentication Dial-in User Service) server. Ve Windows Server 2008 je RADIUS také, ale komponenta (zde role) se jmenuje Network Policy and Access Service. Konfigurace je v obou případech obdobná, můj popis je pro 2003 verzi. Pokud budeme mít Enterprise verzi OS, tak získáme jednu výhodu, klienty můžeme definovat pomocí rozsahu.

Vytvoření klienta

  • otevřeme IAS konzoli
  • klikneme pravým tlačítkem na RADIUS Clients a zvolíme New RADIUS Client
  • zadáme Friendly name, podle něj budeme rozlišovat klienty, a Client address, ve Standard verzi můžeme zadat pouze jednu adresu a pak musíme vytvořit RADIUS klienta pro každý switch, v Enterprise můžeme zadat celý subnet pomocí CIDR
  • Client-Vendor můžeme nastavit Cisco a Shared secret zadáme číselný kód, který nastavujeme jako key na switchi

Vytvoření politiky

Internet Authentication Service - RADIUS

Na začátku musíme rozmyslet, podle čeho chceme určit uživatele, kteří budou mít přístup na switch. Mě se nejvíce zamlouvá vytvoření speciální bezpečnostní skupiny (Security Group), do které zařadíme požadované uživatele.

  • klikneme pravým tlačítkem na Remote Access Policies a zvolíme New Remote Access Policy
  • zadáme nějaký název pro politiku Policy name a zatrhneme Set up a custom policy
  • jako Policy conditions zvolíme Windows-Groups, kde vybereme skupiny, do které patří naši uživatelé, a Client-Friendly-Name, kde zadáme jméno RADIUS klienta (případně začátek a * pro libovolné znaky, abychom obsáhli více klientů najednou)
  • vybereme Grant remote access permission a klikneme na Edit Profile
  • na záložce Advanced odstraníme atributy a vložíme atribut Service-Type s hodnotou Login
  • a atribut s hodnotou Vendor-Specific, kde přidáme atribut Select from list: Cisco, Yes, it conforms, Configure Attribute - Vendor-assigned attribute number: 1, format: string, Attribute value: shell:priv-lvl=15
  • na záložce Authentication zaškrtneme pouze Unencrypted authentication (PAP, SPAP)
  • na záložce Encryption zaškrtneme No encryption
RADIUS - AV pair
zobrazeno: 27170krát | Komentáře [5]

Autor:

Související články:

Cisco IOS

Velký seriál o operačním systému aktivních prvků firmy Cisco.

Pokud se chcete vyjádřit k tomuto článku, využijte komentáře níže.

Komentáře

  1. [1] tata_tulen

    Zatim marne se snazim najit zpusob, jakym bych vyrobil redundantni overovani proti dvema RADIUSum - zatim se mi nedari, proste kdyz prvni radius nezije, k overeni nepdojde aniz cisco zkusi druhy radius.

    Kdo to vi, odpovi? ;-)

    Diky!

    Čtvrtek, 11.03.2010 14:37 | odpovědět
  2. [2] Samuraj

    odpověď na [1]tata_tulen: Tak jsem právě v praxi ověřil (omylem jsem si sestřelil primární RADIUS), že to redundantní ověřování funguje. Akorát ta autentizace (po zadání hesla) trvala asi 30s.

    Středa, 31.03.2010 16:36 | odpovědět
  3. [3] reilly(at)volny.cz

    Vždycky, když mě sem google přivede si znovu a znovu říkám - nestálo by za to uvažovat o Flattru nebo něčem podobném? Pár euro bych tu rád nechal.

    Neděle, 10.06.2012 11:57 | odpovědět
  4. [4] Samuraj

    odpověď na [3]reilly(at)volny.cz: Díky, mám radost z takových komentářů. Ale zatím neplánuji, ani takovýmto způsobem, na stránkách vydělávat. Dělám je pro sebe a pro ostatní a těší mne, třeba když se s někým bavím a on zmíní, že o nějaké problematice četl na Samuraji :-). Je hezké být trochu známý.

    Taky jsem chtěl zkusit naplánovat nějaký sraz v hospodě v Praze, kde by se potkali lidé z oboru. Uvidíme, jestli se povede.

    Pondělí, 11.06.2012 12:40 | odpovědět
  5. [5] J. Rico

    Je skutečně nutné používat Unencrypted authentication (PAP, SPAP)? Přijde mi to jako bezpečnostní díra, raději používal MS-CHAPv2, nicméně v žádném návodu jsem toto nenašel a rozchodit se mi to nepodařilo. Díky za odpověď.

    Úterý, 22.07.2014 14:14 | odpovědět
Přidat komentář

Vložit tag: strong em link

Vložit smajlík: :-) ;-) :-( :-O

Nápověda:
  • maximální délka komentáře je 2000 znaků
  • HTML tagy nejsou povoleny (budou odstraněny), použít se mohou pouze speciální tagy (jsou uvedeny nad vstupním polem)
  • nový řádek (ENTER) ukončí odstavec a začne nový
  • pokud odpovídáte na jiný komentář, vložte na začátek odstavce (řádku) číslo komentáře v hranatých závorkách