Cum se configureaza SSH pe un switch Cisco?

Nevoia pentru SSH

Folosirea protocolului Secure Shell (SSH) pentru a accesa de la distanta resurse de-ale organizatiei, echipamente de retea sau servere trebuie sa fie a doua natura pentru persoanele care le administreaza, mai ales cand accesul se face peste Internet, o retea publica si nesigura prin chiar natura sa.

Secure Shell este un protocol care a aparut la jumatatea anilor 1990 ca o modalitate sigura de conectare remote la masini peste Internet. Pana atunci variantele erau Telnet, rlogin, RSH si functionau foarte bine, numai ca transmiteau datele in clar, in plain text. Acest lucru insemna ca oricine se putea interpune intre terminal si server si, cu ajutorul unui packet sniffer (program de captura de pachete), putea sa vada tot procesul de comunicatie de la credentialele de acces pana la comenzile transmise. Cand aceste protocoale au aparut prima data, securitatea in retele nu era o problema asa de mare, intrucat retelele apartineau in general de universitati si doar oamenii care lucrau acolo le puteau accesa. Insa aceste retele au devenit, cu timpul, din ce in ce mai interconectate formand pana la urma Internetul, si oricine se afla intre un PC si un server putea intercepta acea comunicatie.

In 1995 Tatu Ylonen era ingrijorat de modul precar de accesare peste Internet a serverelor si a dezvoltat protocolul SSH pentru a cripta traficul transmis intre doua masini. De atunci, SSH a evoluat in OpenSSH care este implementarea open source a acestui protocol. OpenSSH este un software gata integrat in sisteme de operare precum Unix, Linux si macOS si este disponibil pentru orice platforma. Pentru sisteme Windows se pot folosi programe third-party ca Windows Terminal, Putty sau SecureCRT. SSH este unealta de facto folosita deopotriva de catre administratorii de sistem si de administratorii de retea pentru a executa task-uri remote.

Componentele protocolului

SSH foloseste o arhitectura de tipul client-server si stabileste o conexiune TCP pe portul 22. SSH securizeaza aceasta conexiune folosind cateva tehnici criptografice:

  • criptarea simetrica – aceeasi cheia este folosita atat la criptare, cat si la decriptare; se foloseste pentru a securiza pachetele transmise
  • criptarea asimetrica sunt folosite doua chei diferite, in pereche, o cheie publica si o cheie privata; se foloseste pentru procesul autentificare
  • functia de hasing – pentru verificarea integritatii pachetelor de date

Pe scurt, procesul de conectare este format din urmatoarele etape:

  • clientul initiaza un handshake TCP pe portul 22
  • conexiunea este securizata cu o criptare simetrica
  • conexiunea este autentificata mutual

La stabilirea conexiunii cele doua parti implicate negociaza de comun acord un algoritm de criptare (de exemplu, AES128) si un algoritim de hashing (de exemplu, SHA2). Dupa care, serverul prezinta clientului cheia sa publica. Aceasta cheie va fi folosita de catre client pentru a valida identitatea serverului, pentru a fi sigur ca serverul la care se conecteaza este serverul real, legitim.

Apoi, incepe un schimb de tipul Diffie-Hellman (DH) prin care se determina o cheie secreta folosita la criptarea traficului. Criptarea simetrica necesita pre-cunoasterea cheii de criptare dinainte de a incepe procesul de comunicare. Cum se poate determina aceasta cheie si mai ales, cum se poate transmite ea, peste o retea nesigura, asa cum este reteaua dintre client si server, a caror transmisie vreau sa o securizez? Aici intervine algoritmul DH care ajuta la calcularea unui secret comun pentru cele doua capete ale conexiunii, fara ca acest secret sa fie efectiv transmis. De aceea, DH nu este un schimb propriu-zis, insa sintagma Diffie-Hellman exchange a ramas impamantenita in literatura de specialitate.

In cele din urma, clientul isi transmite credentialele serverului care trebuie sa le valideze. Clientul se poate autentifica folosind:

  • o combinatie de username si de parola
  • o cheie publica
  • o autentificare interactiva, numita keyboard authentication

Dintre acestea, prima metoda este cea mai des folosita in accesarea remote a echipamentelor de retea, pe cand a doua este cea mai folosita in mediile de tip cloud unde este nevoie de o schema de autentificare numita Identity and Access Management (IAM) pentru accesarea serverelor de tip Linux.

Configurarea switch-ului pentru SSH

Linia de comanda a echipamentelor de retea este disponibila atat prin conexiuni locale, pe portul de consola, cat si prin conexiuni remote. Protocolul Telnet era utilizat pentru a stabili o conexiune de la distanta cu un echipament de retea pentru a face operatiuni de monitorizare, mentenanta si de configurare. Si inca este folosit si astazi de multa lume intrucat este un serviciu gata activ si disponibil imediat pe switch, cu toate ca dezavantajele acestui protocol sunt bine cunoscute.

Pentru a incepe sa se foloseasca SSH pe echipamentul de retea, trebuie mai inainte ca acesta sa fie configurat sa accepte astfel de conexiuni. Sunt necesari cativa pasi, deloc complicati:

  • este necesar ca echipamentul sa aiba un FQDN (fully qualified domain name). FQDN este format din hostname-ul echipamentului si un sufix de DNS. Acesti doi parametrii se seteaza prin comenzile:

(config)#hostname <hostname>
(config)#ip domain-name <domain-name>

  • este necesar ca echipamentul sa aiba o pereche de chei disponibila. Aceasta pereche de chei va fi generata cu un algoritm ca RSA sau algoritmi eliptici. Vom exemplifica generarea perechii de chei prin RSA

(config)#crypto key generate rsa modulus 4096

  • folosirea stricta a versiunii 2 de SSH, intrucat versiunea 1 are anumite vulnerabilitati

(config)#ip ssh version 2

  • setarea echipamentului sa accepte doar conexiuni securizate de tip SSH

(config)#line vty 0 4
(config-line)#transport input ssh

  • configurarea autentificarii utilizatorilor care se conecteaza remote la switch:
  • prin parola

(config)#username <name> password <password>

  • prin cheie publica. In prealabil, clientul trebuie sa aiba perechea de chei generata. In acest sens, se poate folosi OpenSSH, OpenSSL sau puttygen

(config)#ip ssh pubkey-chain
(conf-ssh-pubkey)#username <name>
(conf-ssh-pubkey-user)#key-string
(conf-ssh-pubkey-data)# !!aici se face copy/paste valorii cheii publice!!

Autentificarea pe baza de cheie este mai sigura decat pe baza de parola, insa implica un management mai complex al acestor chei (crearea lor, distribuirea si eliminarea lor). Plus ca, la fel ca o parola, si cheile trebuie sa fie schimbate la intervale regulate de timp.

Protocolul SSH trebuie sa devina singura metoda de acces remote la linia de comanda a resurselor organizatiei (servere, echipamente de retea), chiar daca acel acces se face si din interiorul companiei. Suprafata de atac trebuie redusa cat mai mult cu putinta, iar folosirea de protocoale care utilizeaza mecanisme criptografice este foarte dezirabila.

Mihai Dumitrascu, Sr Systems Engineer