
, 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 și , dar cea mai populară este OpenSSH. Instalarea clientului OpenSSH pe Ubuntu:
sudo apt install openssh-clientInstalarea pe server:
sudo apt install openssh-serverPornirea demonului SSH (sshd) pe serverul Ubuntu:
sudo systemctl start sshdPornirea 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 .
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_keysvim /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/.sshDe partea clientului, trebuie să specificați locația cheii secret pentru autentificare:
ssh-add DIR_PATH/keylocationAcum vă puteți conecta la server cu numele utilizatorului prin această cheie:
ssh [username]@hostnameDupă autorizare, puteți folosi comanda scp pentru a copia fișiere, utilitarul 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.confDupă 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.confInstrucțiunile pentru conectarea la autentificarea cu două factori prin SSH se găsesc în .
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 (), iar CentOS/Red Hat vine cu .
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 --permanentDupă această procedură, putem activa firewall-ul.
Pe CentOS/Red Hat activăm serviciul systemd pentru firewalld:
sudo systemctl start firewalld
sudo systemctl enable firewalldPe Ubuntu folosim această comandă:
sudo ufw enable
Fail2Ban
Serviciu 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 fail2banInstalarea pe Ubuntu și Debian:
sudo apt install fail2banPornire:
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 și să activați timerul:
sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timerVerificarea 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, , 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 (security through obscurity). Motivul este că această tehnică se opune protecției fundamentale Așadar, de exemplu, Institutul Național de Standarde și Tehnologii din SUA în 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. Acesta este de asemenea specificat cu parametrul -p în . Clientul SSH și programele de asemenea suportă parametrul -p.
Parametru -p poate fi utilizat pentru a specifica numărul portului la conectarea prin comandă ssh în Linux. În ș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! 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 🙂
Sursa: habr.com
