Protecția serverului Linux. Ce să faci mai întâi

Protecția serverului Linux. Ce să faci mai întâi
Habib M’henni / Wikimedia Commons, CC BY-SA

În zilele noastre, a ridica un server pe un hosting este o chestiune de câteva minute și câteva clicuri. Dar imediat după lansare, acesta intră într-un mediu ostil, fiind deschis întregului internet ca o fată inocentă la o discotecă rock. Este rapid descoperit de scanere și sunt detectați mii de boți scriptici automați care bâjbâie prin rețea în căutarea vulnerabilităților și configurațiilor greșite. Există câteva lucruri de făcut imediat după lansare pentru a asigura o protecție de bază.

Cuprins

Utilizator non-root

Primul lucru pe care trebuie să-l faci este să creezi un utilizator non-root. Problema este că utilizatorul root are privilegii absolute în sistem, iar dacă îi permiți administrarea de la distanță, vei face jumătate din muncă pentru hacker, lăsându-i un nume de utilizator valid.

Așadar, trebuie să creezi un alt utilizator, iar pentru root să dezactivezi administrarea de la distanță prin SSH.

Un nou utilizator se creează cu comanda useradd:

useradd [options]

Apoi, pentru el se adaugă o parolă cu comanda passwd:

passwd

În final, acest utilizator trebuie adăugat într-un grup care are dreptul de a executa comenzi cu privilegii ridicate sudo. În funcție de distribuția Linux, acestea pot fi grupuri diferite. De exemplu, în CentOS și Red Hat utilizatorul este adăugat în grupul wheel:

usermod -aG wheel

În Ubuntu, el este adăugat în grupul sudo:

usermod -aG sudo

Chei în loc de parole SSH

Atacurile prin bruteforce sau scurgerile de parole sunt un vector standard de atac, așa că autentificarea prin parole în SSH (Secure Shell) este mai bine să fie dezactivată și în locul ei să fie utilizată autentificarea prin chei.

Există diferite programe pentru implementarea protocolului SSH, cum ar fi lsh și Dropbear, dar cea mai populară este OpenSSH. Instalarea clientului OpenSSH pe Ubuntu:

sudo apt install openssh-client

Instalarea pe server:

sudo apt install openssh-server

Pornirea demonului SSH (sshd) pe serverul Ubuntu:

sudo systemctl start sshd

Pornirea automată a demonului la fiecare boot:

sudo systemctl enable sshd

Trebuie menționat că partea server a OpenSSH include și clientul. Adică prin openssh-server poate să se conecteze la alte servere. În plus, de pe mașina client, puteți lansa un tunel SSH de pe serverul de la distanță la un host terț, iar acest host terț va considera serverul de la distanță ca sursa cererilor. O funcție foarte convenabilă pentru mascare a sistemului dumneavoastră. Mai multe detalii în articol „Sfaturi practice, exemple și tuneluri SSH”.

Pe mașina client, de obicei nu are sens să instalați un server complet, pentru a nu permite posibilitatea conectării de la distanță la computer (din motive de securitate).

Așadar, pentru noul utilizator trebuie să generați mai întâi cheile SSH pe computerul de unde vă veți conecta la server:

ssh-keygen -t rsa

Cheia publică este stocată într-un fișier .*.pub și arată ca un șir de simboluri aleatorii, care începe cu ssh-rsa.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname

Apoi, din rolul de root, creați un director SSH în directorul home al utilizatorului și adăugați cheia publică SSH în fișierul authorized_keys, folosind un editor de text precum Vim:

mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys

vim /home/user_name/.ssh/authorized_keys

În cele din urmă, stabiliți permisiunile corecte pentru fișier:

chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys

și schimbați proprietatea acestuia la acest utilizator:

chown -R username:username /home/username/.ssh

De partea clientului, trebuie să specificați locația cheii secret pentru autentificare:

ssh-add DIR_PATH/keylocation

Acum vă puteți conecta la server cu numele utilizatorului prin această cheie:

ssh [username]@hostname

După autorizare, puteți folosi comanda scp pentru a copia fișiere, utilitarul sshfs pentru a monta de la distanță un sistem de fișiere sau directoare.

Este recomandat să faceți câteva copii de rezervă ale cheii private, deoarece, dacă dezactivați autentificarea prin parolă și o pierdeți, nu veți avea nicio posibilitate de a accesa propriul server.

După cum s-a menționat anterior, în SSH trebuie să dezactivați autentificarea pentru root (de aceea am creat un nou utilizator).

Pe CentOS/Red Hat găsim linia PermitRootLogin yes în fișierul de configurare /etc/ssh/sshd_config și o modificăm:

PermitRootLogin no

Pe Ubuntu adăugăm linia PermitRootLogin no în fișierul de configurare 10-my-sshd-settings.conf:

sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

După verificarea faptului că noul utilizator se autentifică cu cheia sa, se poate dezactiva autentificarea prin parolă pentru a elimina riscul de scurgere sau de atac prin forță brută. Acum, pentru ca un atacator să acceseze serverul, va trebui să obțină cheia privată.

Pe CentOS/Red Hat găsim linia PasswordAuthentication yes în fișierul de configurare /etc/ssh/sshd_config și o modificăm astfel:

PasswordAuthentication no

Pe Ubuntu adăugăm linia PasswordAuthentication no în fișier 10-my-sshd-settings.conf:

sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Instrucțiunile pentru conectarea la autentificarea cu două factori prin SSH se găsesc în aici.

Firewall

Firewall-ul garantează că pe server va merge doar traficul pe porturile pe care le-ați permis direct. Acest lucru protejează împotriva exploatării porturilor care s-au activat accidental cu alte servicii, reducând semnificativ suprafața de atac.

Înainte de a instala firewall-ul, trebuie să ne asigurăm că SSH este inclus pe lista albă și nu va fi blocat. Altfel, după activarea firewall-ului, nu vom putea să ne conectăm la server.

Distribuția Ubuntu vine cu Uncomplicated Firewall (ufw), iar CentOS/Red Hat vine cu firewalld.

Permisiunea SSH în firewall pe Ubuntu:

sudo ufw allow ssh

Pe CentOS/Red Hat folosim comanda firewall-cmd:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

După această procedură, putem activa firewall-ul.

Pe CentOS/Red Hat activăm serviciul systemd pentru firewalld:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Pe Ubuntu folosim această comandă:

sudo ufw enable

Fail2Ban

Serviciu Fail2Ban analizează jurnalele de pe server și numără încercările de acces de la fiecare adresă IP. În setări sunt specificate reguli privind câte încercări de acces sunt permise într-un anumit interval — după care acea adresă IP este blocată pentru o perioadă stabilită de timp. De exemplu, permitem 5 încercări eșuate de autentificare prin SSH într-un interval de 2 ore, după care blocăm acea adresă IP timp de 12 ore.

Instalarea Fail2Ban pe CentOS și Red Hat:

sudo yum install fail2ban

Instalarea pe Ubuntu și Debian:

sudo apt install fail2ban

Pornire:

systemctl start fail2ban
systemctl enable fail2ban

În program sunt două fișiere de configurare: /etc/fail2ban/fail2ban.conf și /etc/fail2ban/jail.conf. Limitările pentru interzicere sunt specificate în al doilea fișier.

Jail-ul pentru SSH este activat implicit cu setările implicite (5 încercări, interval de 10 minute, interzicere timp de 10 minute).

[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5

Pe lângă SSH, Fail2Ban poate proteja și alte servicii de pe serverul web nginx sau Apache.

Actualizări automate de securitate

După cum se știe, în toate programele sunt descoperite constant noi vulnerabilități. După publicarea informațiilor, exploiturile sunt adăugate în pachete populare de exploatare, care sunt utilizate pe scară largă de hackeri și adolescenți pentru a scana toate serverele la rând. De aceea, este foarte important să instalați actualizările de securitate imediat ce acestea apar.

Pe serverul Ubuntu, în configurația implicită, sunt activate actualizările automate de securitate, astfel că nu sunt necesare acțiuni suplimentare.

Pe CentOS/Red Hat, este necesar să instalați aplicația dnf-automatic și să activați timerul:

sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer

Verificarea timerului:

sudo systemctl status dnf-automatic.timer

Schimbarea porturilor implicite

SSH a fost dezvoltat în 1995 pentru a înlocui telnet (port 23) și ftp (port 21), astfel încât autorul programului, Tatu Ylönen, a ales portul 22 ca fiind implicit, iar acesta a fost aprobat de IANA.

Desigur, toți infractorii cibernetici sunt conștienți de portul pe care rulează SSH – și îl scanează alături de celelalte porturi standard pentru a descoperi versiunea software-ului, pentru a verifica parolele standard ale utilizatorului root și așa mai departe.

Schimbarea porturilor standard – obfuscare – reduce semnificativ volumul de trafic inutil, dimensiunea jurnalele și încărcarea serverului, iar de asemenea reduce suprafața de atac. Deși unii criticizează această metodă de „protecție prin neclaritate” (security through obscurity). Motivul este că această tehnică se opune protecției fundamentale de arhitectură.Așadar, de exemplu, Institutul Național de Standarde și Tehnologii din SUA în „Ghidul pentru securitatea serverelor” sublinează necesitatea unei arhitecturi de server deschise: „Securitatea sistemului nu ar trebui să se bazeze pe gradul de ascundere al implementării componentelor sale”, se afirmă în document.

Teoretic, schimbarea porturilor implicite contravine practicii arhitecturii deschise. Însă, în practică, volumul de trafic malițios este într-adevăr redus, astfel că aceasta este o măsură simplă și eficientă.

Numărul portului poate fi configurat, modificând directiva Port 22 în fișierul de configurație. /etc/ssh/sshd_configAcesta este de asemenea specificat cu parametrul -p în sshd. Clientul SSH și programele sftp de asemenea suportă parametrul -p.

Parametru -p poate fi utilizat pentru a specifica numărul portului la conectarea prin comandă ssh în Linux. În sftp și scp se folosește parametrul -P (titlu P). Instrucțiunea din linia de comandă suprascrie orice valoare din fișierele de configurare.

Dacă sunt multe servere, aproape toate aceste acțiuni de protecție a serverului Linux pot fi automatizate într-un script. Dar dacă este doar un server, este mai bine să controlezi manual procesul.

În numele publicității

Comandă și începe imediat să lucrezi! Crearea VDS orice configurație și cu orice sistem de operare în decurs de un minut. Configurația maximă va permite să te distrezi la maximum - 128 de nuclee CPU, 512 GB RAM, 4000 GB NVMe. Epic 🙂

Protecția serverului Linux. Ce să faci mai întâi

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster