Asigurați conexiunea SSH a sistemului Linux pentru a vă proteja sistemul și datele. Administratorii de sistem și utilizatorii casnici trebuie, deopotrivă, să întărească și să securizeze computerele orientate spre internet, dar SSH poate fi complicat. Iată zece câștiguri rapide ușoare pentru a vă proteja serverul SSH.
Bazele securității SSH
SSH înseamnă Secure Shell . Denumirea „SSH” este utilizată în mod interschimbabil pentru a însemna fie protocolul SSH în sine, fie instrumentele software care permit administratorilor de sistem și utilizatorilor să facă conexiuni sigure la computerele la distanță folosind acel protocol.
Protocolul SSH este un protocol criptat conceput pentru a oferi o conexiune sigură printr-o rețea nesigură, cum ar fi internetul. SSH în Linux este construit pe o versiune portabilă a OpenSSH proiect. Este implementat într-un model clasic client-server , cu un server SSH care acceptă conexiuni de la clienții SSH. Clientul este folosit pentru a se conecta la server și la afişa sesiunea către utilizatorul la distanță. Serverul acceptă conexiunea și execută sesiunea.
În configurația sa implicită, un server SSH va asculta conexiunile primite pe protocolul de control al transmisiei ( TCP ) portul 22. Deoarece acesta este un standardizat, cunoscut port , este o țintă pentru actori de amenințare și roboți rău intenționați .
Actorii de amenințare lansează roboți care scanează o serie de adrese IP în căutarea porturilor deschise. Porturile sunt apoi testate pentru a vedea dacă există vulnerabilități care pot fi exploatate. A gândi: „Sunt în siguranță, există ținte mai mari și mai bune decât mine pentru care să țintească băieții răi” este un raționament fals. Roboții nu selectează ținte pe baza vreunui merit; caută metodic sisteme pe care le pot încălca.
Vă nominalizați ca victimă dacă nu v-ați securizat sistemul.
Fricțiune de securitate
Fricțiunea de securitate este iritarea - indiferent de grad - pe care o vor experimenta utilizatorii și alții atunci când implementați măsuri de securitate. Avem amintiri lungi și ne amintim că am introdus noi utilizatori într-un sistem informatic și i-am auzit întrebând cu o voce îngrozită dacă au într-adevăr a trebuit să introduceți o parolă de fiecare data s-au conectat la mainframe. Asta - pentru ei - era o frecare de securitate.
(De altfel, invenția parolei este creditată în Fernando J. Corbató , o altă figură din panteonul informaticienilor a căror muncă combinată a contribuit la circumstanțele care au dus la nașterea lui Unix .)
Introducerea măsurilor de securitate implică de obicei o formă de frecare pentru cineva. Proprietarii de afaceri trebuie să plătească pentru asta. Este posibil ca utilizatorii computerului să fie nevoiți să își schimbe practicile familiare sau să-și amintească un alt set de detalii de autentificare sau să adauge pași suplimentari pentru a se conecta cu succes. Administratorii de sistem vor avea de lucru suplimentar pentru a implementa și menține noile măsuri de securitate.
Întărirea și blocarea unui sistem de operare Linux sau Unix se poate implica foarte repede. Ceea ce vă prezentăm aici este un set de pași ușor de implementat, care vor îmbunătăți securitatea computerului dvs. fără a fi nevoie de aplicații de la terți și fără a intra în firewall.
Acești pași nu sunt cuvântul final în securitatea SSH, dar vă vor face să mergeți departe de setările implicite și fără prea multe fricțiuni.
Utilizați protocolul SSH versiunea 2
În 2006, protocolul SSH a fost actualizat de la versiunea 1 la versiunea 2 . A fost un upgrade semnificativ. Au existat atât de multe modificări și îmbunătățiri, în special în ceea ce privește criptarea și securitatea, încât versiunea 2 nu este compatibilă cu versiunea 1. Pentru a preveni conexiunile de la clienții din versiunea 1, puteți prevedea că computerul dvs. va accepta doar conexiuni de la clienții din versiunea 2.
Pentru a face acest lucru, editați fișierul
/ etc / ssh / sshd_config
fişier. Vom face acest lucru mult pe tot parcursul acestui articol. Ori de câte ori trebuie să editați acest fișier, aceasta este comanda de utilizat:
sudo gedit / etc / ssh / sshd_config
Adăugați linia:
Protocolul 2
Și salvați fișierul. Vom reporni procesul de daemon SSH. Din nou, vom face acest lucru mult pe parcursul acestui articol. Aceasta este comanda de utilizat în fiecare caz:
sudo systemctl reporniți sshd
Să verificăm dacă noua noastră setare este în vigoare. Vom trece la o altă mașină și vom încerca să folosim SSH pe mașina noastră de testare. Și vom folosi
-1
(protocol 1) opțiune pentru a forța
ssh
comandă pentru a utiliza versiunea 1 a protocolului.
ssh -1 [email protected]
Excelent, solicitarea noastră de conexiune este respinsă. Să ne asigurăm că ne putem conecta în continuare cu protocolul 2. Vom folosi
-2
(protocol 2) opțiune pentru a demonstra faptul.
ssh -2 [email protected]
Faptul că serverul SSH solicită parola noastră este un indiciu pozitiv că conexiunea a fost realizată și că interacționați cu serverul. De fapt, deoarece clienții SSH moderni vor utiliza implicit protocolul 2, nu este necesar să specificăm protocolul 2 atâta timp cât clientul nostru este actualizat.
ssh [email protected]
Și conexiunea noastră este acceptată. Deci, numai conexiunile de protocol 1 mai slabe și mai puțin sigure sunt respinse.
Evitați portul 22
Portul 22 este portul standard pentru conexiunile SSH. Dacă utilizați un alt port, acesta adaugă un pic de securitate prin obscuritate sistemului dumneavoastră. Securitatea prin obscuritate nu este niciodată considerată o măsură de securitate adevărată și am criticat-o în alte articole. De fapt, unii dintre roboții de atac mai inteligenți sondează toate porturile deschise și determină ce serviciu transportă, mai degrabă decât să se bazeze pe o listă simplă de căutare a porturilor și presupunând că oferă serviciile obișnuite. Dar utilizarea unui port nestandard poate ajuta la reducerea zgomotului și a traficului defectuos pe portul 22.
Pentru a configura un port non-standard, editați fișierul de configurare SSH:
sudo gedit / etc / ssh / sshd_config
Eliminați numărul hash de la începutul liniei „Port” și înlocuiți „22” cu numărul de port ales. Salvați fișierul de configurare și reporniți daemonul SSH:
sudo systemctl reporniți sshd
Să vedem ce efect a avut acest lucru. Pe celălalt computer al nostru, vom folosi
ssh
comanda de conectare la serverul nostru.
ssh
comanda implicită la utilizarea portului 22:
ssh [email protected]
Conexiunea noastră este refuzată. Să încercăm din nou și să specificăm portul 470, folosind opțiunea -p (port):
ssh -p 479 [email protected]
Conexiunea noastră este acceptată.
Filtrează conexiunile folosind TCP Wrappers
TCP Wrappers este un instrument ușor de înțeles lista de control acces . Vă permite să excludeți și să permiteți conexiunile pe baza caracteristicilor cererii de conexiune, cum ar fi adresa IP sau numele gazdei. Învelitoarele TCP ar trebui utilizate împreună cu un firewall configurat corect și nu în loc de acesta. În scenariul nostru specific, putem strânge considerabil lucrurile folosind împachetări TCP.
Învelitoarele TCP erau deja instalate pe mașina Ubuntu 18.04 LTS folosită pentru cercetarea acestui articol. Trebuia să fie instalat pe Manjaro 18.10 și Fedora 30.
Pentru a instala pe Fedora, utilizați această comandă:
sudo yum instalați tcp_wrappers
Pentru a instala pe Manjaro, utilizați această comandă:
sudo pacman -Syu tcp-wrappers
Există două fișiere implicate. Una deține lista permisă, iar cealaltă deține lista refuzată. Editați lista de refuzuri folosind:
sudo gedit /etc/hosts.deny
Aceasta va deschide fișierul
gedit
editor cu fișierul de refuz încărcat în el.
Trebuie să adăugați linia:
TOATE: TOATE
Și salvați fișierul. Aceasta blochează tot accesul care nu a fost autorizat. Acum trebuie să autorizăm conexiunile pe care doriți să le acceptați. Pentru a face acest lucru, trebuie să editați fișierul de permis:
sudo gedit /etc/hosts.allow
Aceasta va deschide fișierul
gedit
editor cu fișierul permit încărcat în el.
Am adăugat în numele demonului SSH,
SSHD
Și adresa IP a computerului pe care vom permite să facem o conexiune. Salvați fișierul și să vedem dacă restricțiile și permisiunile sunt în vigoare.
Mai întâi, vom încerca să ne conectăm de la un computer care nu se află în
gazde.permite
fişier:
Conexiunea este refuzată. Vom încerca acum să ne conectăm de la mașină la adresa IP 192.168.4.23:
Conexiunea noastră este acceptată.
Exemplul nostru aici este puțin brutal - doar un singur computer se poate conecta. Împachetările TCP sunt destul de versatile și mai flexibile decât aceasta. Suportă nume de gazdă, metacaractere și măști de subrețea pentru a accepta conexiuni din game de adrese IP. Ești încurajat să consultați pagina manuală .
Respingeți cererile de conexiune fără parole
Deși este o practică proastă, un administrator de sistem Linux poate crea un cont de utilizator fără parolă. Asta înseamnă că solicitările de conectare la distanță de la acel cont nu vor avea nicio parolă pentru a verifica. Acele conexiuni vor fi acceptate, dar neautentificate.
Setările implicite pentru SSH acceptă cereri de conectare fără parole. O putem schimba foarte ușor și ne putem asigura că toate conexiunile sunt autentificate.
Trebuie să vă edităm fișierul de configurare SSH:
sudo gedit / etc / ssh / sshd_config
Derulați prin fișier până când vedeți linia care citește cu „#PermitEmptyPasswords no”. Eliminați hashul
#
de la începutul liniei și salvați fișierul. Reporniți daemonul SSH:
sudo systemctl reporniți sshd
Utilizați chei SSH în loc de parole
Cheile SSH oferă un mijloc sigur de conectare la un server SSH. Parolele pot fi ghicite, sparte sau brut-forțat . Cheile SSH nu sunt deschise pentru astfel de tipuri de atac.
Când generați chei SSH, creați o pereche de chei. Una este cheia publică, iar cealaltă este cheia privată. Cheia publică este instalată pe serverele la care doriți să vă conectați. Cheia privată, așa cum sugerează și numele, este păstrată în siguranță pe propriul computer.
Cheile SSH vă permit să faceți conexiuni fără o parolă care este - contraintuitiv - mai sigură decât conexiunile care utilizează autentificarea prin parolă.
Când efectuați o solicitare de conectare, computerul la distanță folosește copia cheii dvs. publice pentru a crea un mesaj criptat care este trimis înapoi la computer. Deoarece a fost criptat cu cheia dvs. publică, computerul vă poate decripta cu cheia dvs. privată.
Computerul dvs. extrage apoi unele informații din mesaj, în special ID-ul sesiunii, criptează și le trimite înapoi la server. Dacă serverul îl poate decripta cu copia sa a cheii dvs. publice și dacă informațiile din mesaj se potrivesc cu ceea ce serverul v-a trimis, conexiunea dvs. este confirmată că vine de la dvs.
Aici, se face o conexiune la server la 192.168.4.11, de către un utilizator cu chei SSH. Rețineți că nu li se solicită o parolă.
ssh [email protected]
Cheile SSH merită un articol pentru sine. La îndemână, avem unul pentru tine. Iată cum se creează și se instalează chei SSH .
LEGATE DE: Cum se creează și se instalează chei SSH din Linux Shell
Dezactivați complet autentificarea parolei
Desigur, extensia logică a utilizării cheilor SSH este că, dacă toți utilizatorii la distanță sunt obligați să le adopte, puteți dezactiva complet autentificarea parolei.
Trebuie să vă edităm fișierul de configurare SSH:
sudo gedit / etc / ssh / sshd_config
Derulați prin fișier până când vedeți linia care începe cu „#PasswordAuthentication yes”. Eliminați hashul
#
de la începutul liniei, schimbați „da” la „nu” și salvați fișierul. Reporniți daemonul SSH:
sudo systemctl reporniți sshd
Dezactivați redirecționarea X11
Redirecționarea X11 permite utilizatorilor la distanță să ruleze aplicații grafice de pe serverul dvs. într-o sesiune SSH. În mâinile unui actor de amenințare sau a unui utilizator rău intenționat, o interfață GUI le poate ușura scopurile maligne.
O mantra standard în securitatea cibernetică este dacă nu aveți un motiv de bună credință pentru ao activa, opriți-o. Vom face acest lucru editând fișierul de configurare SSH:
sudo gedit / etc / ssh / sshd_config
Derulați prin fișier până când vedeți linia care începe cu „# X11Forwarding no”. Eliminați hashul
#
de la începutul liniei și salvați fișierul. Reporniți daemonul SSH:
sudo systemctl reporniți sshd
Setați o valoare de expirare inactivă
Dacă există o conexiune SSH stabilită la computerul dvs. și nu a existat nicio activitate pe acesta pentru o perioadă de timp, ar putea prezenta un risc de securitate. Există șansa ca utilizatorul să-și părăsească biroul și să fie ocupat în altă parte. Orice altcineva care trece pe lângă biroul său se poate așeza și începe să-și folosească computerul și, prin SSH, computerul.
Este mult mai sigur să stabiliți o limită de expirare. Conexiunea SSH va fi întreruptă dacă perioada inactivă se potrivește cu limita de timp. Încă o dată, vom edita fișierul de configurare SSH:
sudo gedit / etc / ssh / sshd_config
Derulați prin fișier până când vedeți linia care începe cu „#ClientAliveInterval 0” Eliminați hash-ul
#
de la începutul liniei, schimbați cifra 0 la valoarea dorită. Am folosit 300 de secunde, adică 5 minute. Salvați fișierul și reporniți daemonul SSH:
sudo systemctl reporniți sshd
Setați o limită pentru încercările de parolă
Definirea unei limite a numărului de încercări de autentificare vă poate ajuta să împiedicați ghicirea parolelor și atacurile cu forță brută. După numărul desemnat de cereri de autentificare, utilizatorul va fi deconectat de la serverul SSH. În mod implicit, nu există nicio limită. Dar acest lucru este remediat rapid.
Din nou, trebuie să edităm fișierul de configurare SSH:
sudo gedit / etc / ssh / sshd_config
Derulați prin fișier până când vedeți linia care începe cu „#MaxAuthTries 0”. Eliminați hashul
#
de la începutul liniei, schimbați cifra 0 la valoarea dorită. Am folosit 3 aici. Salvați fișierul când ați făcut modificările și reporniți demonul SSH:
sudo systemctl reporniți sshd
Putem testa acest lucru încercând să ne conectăm și introducând în mod deliberat o parolă incorectă.
Rețineți că numărul MaxAuthTries părea să fie cu mai mult decât numărul de încercări permise utilizatorului. După două încercări rele, utilizatorul nostru de testare este deconectat. Aceasta a fost cu MaxAuthTries setat la trei.
Dezactivați logarea rădăcinii
Este o practică proastă să vă conectați ca root pe computerul dvs. Linux. Ar trebui să vă conectați ca utilizator normal și să utilizați
sudo
pentru a efectua acțiuni care necesită privilegii de root. Cu atât mai mult, nu ar trebui să permiteți root-ului să se conecteze la serverul dvs. SSH. Doar utilizatorii obișnuiți ar trebui să aibă permisiunea de a se conecta. Dacă trebuie să îndeplinească o sarcină administrativă, ar trebui să o folosească
sudo
de asemenea. Dacă ești forțat să permiți unui utilizator root să se conecteze, poți să-l forțezi cel puțin să folosească cheile SSH.
Pentru ultima dată, va trebui să edităm fișierul de configurare SSH:
sudo gedit / etc / ssh / sshd_config
Derulați prin fișier până când vedeți linia care începe cu „#PermitRootLogin prohibit-password” Eliminați hash-ul
#
de la începutul liniei.
- Dacă doriți să împiedicați rădăcina să se conecteze, înlocuiți „interzice parola” cu „nu”.
- Dacă aveți de gând să permiteți root-ului să se conecteze, dar forțați-i să folosească cheile SSH, lăsați „prohibit-parola” în loc.
Salvați modificările și reporniți daemonul SSH:
sudo systemctl reporniți sshd
Ultimul pas
Desigur, dacă nu aveți deloc nevoie de SSH care rulează pe computer, asigurați-vă că este dezactivat.
sudo systemctl stop sshd
sudo systemctl dezactivează sshd
Dacă nu deschideți fereastra, nimeni nu poate urca.