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, configurarea unui server pe o găzduire este o chestiune de câteva minute și câteva clicuri de mouse. Dar imediat după lansare, se trezește într-un mediu ostil, pentru că este deschis către întregul Internet ca o fată nevinovată la o discotecă rock. Scanerele îl vor găsi rapid și vor descoperi mii de roboți cu scripturi automate care cercetează rețeaua în căutarea vulnerabilităților și a configurațiilor incorecte. Există câteva lucruri pe care ar trebui să le faceți imediat după lansare pentru a asigura protecția de bază.

Conținut

Utilizator non-root

Primul lucru pe care trebuie să-l faceți este să creați un utilizator non-root. Ideea este că utilizatorul root privilegii absolute în sistem, iar dacă îi permiteți administrarea de la distanță, atunci veți face jumătate din muncă pentru hacker, lăsându-i un nume de utilizator valid.

Prin urmare, trebuie să creați un alt utilizator și să dezactivați administrarea la distanță prin SSH pentru root.

Un nou utilizator este creat cu comanda useradd:

useradd [options] <username>

Apoi se adaugă o parolă pentru aceasta cu comanda passwd:

passwd <username>

În cele din urmă, acest utilizator trebuie adăugat la 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 un utilizator este adăugat la un grup wheel:

usermod -aG wheel <username>

Pe Ubuntu este adăugat la grup sudo:

usermod -aG sudo <username>

Chei în loc de parole SSH

Forța brută sau scurgerea parolei este un vector de atac standard, așa că este mai bine să dezactivați autentificarea parolei în SSH (Secure Shell) și să utilizați în schimb autentificarea cu cheie.

Există diferite programe pentru implementarea protocolului SSH, cum ar fi lsh и dropbear, dar cel mai popular este OpenSSH. Instalarea clientului OpenSSH pe Ubuntu:

sudo apt install openssh-client

Instalare server:

sudo apt install openssh-server

Pornirea demonului SSH (sshd) pe un server Ubuntu:

sudo systemctl start sshd

Porniți automat demonul la fiecare pornire:

sudo systemctl enable sshd

Trebuie remarcat faptul că partea de server OpenSSH include partea client. Adică prin openssh-server te poti conecta la alte servere. Mai mult, de pe computerul dvs. client puteți lansa un tunel SSH de la un server la distanță la o gazdă terță parte, iar apoi gazda terță parte va considera serverul la distanță ca fiind sursa solicitărilor. O funcție foarte convenabilă pentru mascarea sistemului. Pentru mai multe detalii, vezi articolul. „Sfaturi practice, exemple și tuneluri SSH”.

De obicei, nu are rost să instalați un server cu drepturi depline pe computerul client pentru a preveni posibilitatea conexiunii de la distanță la computer (din motive de securitate).

Deci, pentru noul dvs. utilizator, trebuie mai întâi să generați chei SSH pe computerul de pe care veți accesa serverul:

ssh-keygen -t rsa

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

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

Apoi, ca root, creați un director SSH pe server în directorul principal al utilizatorului și adăugați cheia publică SSH la fișier authorized_keysfolosind 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ă, setați permisiunile corecte pentru fișier:

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

și schimbați proprietarul acestui utilizator:

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

Pe partea clientului, trebuie să specificați locația cheii secrete pentru autentificare:

ssh-add DIR_PATH/keylocation

Acum vă puteți conecta la server sub numele de utilizator folosind această cheie:

ssh [username]@hostname

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

Este recomandabil să faceți mai multe copii de rezervă ale cheii private, deoarece dacă dezactivați autentificarea parolei și o pierdeți, nu veți avea deloc cum să vă conectați la propriul server.

După cum am menționat mai sus, în SSH trebuie să dezactivați autentificarea pentru root (din acest motiv am creat un nou utilizator).

Pe CentOS/Red Hat găsim linia PermitRootLogin yes în fișierul de configurare /etc/ssh/sshd_config si schimba-l:

PermitRootLogin no

Pe Ubuntu adăugați linia PermitRootLogin no la fișierul de configurare 10-my-sshd-settings.conf:

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

După ce verificați dacă noul utilizator este autentificat folosind cheia acestuia, puteți dezactiva autentificarea parolei pentru a elimina riscul de scurgere a parolei sau de forța brută. Acum, pentru a accesa serverul, atacatorul 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 schimbați-l după cum urmează:

PasswordAuthentication no

Pe Ubuntu adăugați linia PasswordAuthentication no la dosar 10-my-sshd-settings.conf:

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

Pentru instrucțiuni despre cum să activați autentificarea cu doi factori prin SSH, consultați aici.

Firewall

Firewall-ul asigură că numai traficul de pe porturile pe care le permiteți direct va ajunge la server. Acest lucru protejează împotriva exploatării porturilor care sunt activate accidental de alte servicii, ceea ce reduce foarte mult suprafața de atac.

Înainte de a instala un firewall, trebuie să vă asigurați că SSH este inclus în lista de excluderi și nu va fi blocat. În caz contrar, după pornirea firewall-ului, nu ne vom putea conecta la server.

Distribuția Ubuntu vine cu Uncomplicated Firewall (Wow), și cu CentOS/Red Hat - firewalld.

Permiterea SSH în firewall-ul 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ă, puteți porni firewall-ul.

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

sudo systemctl start firewalld
sudo systemctl enable firewalld

Pe Ubuntu folosim următoarea comandă:

sudo ufw enable

Fail2Ban

Serviciu Fail2Ban analizează jurnalele serverului și numără numărul de încercări de acces de la fiecare adresă IP. Setările specifică regulile pentru câte încercări de acces sunt permise într-un anumit interval - după care această adresă IP este blocată pentru o anumită perioadă de timp. De exemplu, permitem 5 încercări nereușite de autentificare prin SSH într-o perioadă de 2 ore, după care blocăm această adresă IP timp de 12 ore.

Instalarea Fail2Ban pe CentOS și Red Hat:

sudo yum install fail2ban

Instalare pe Ubuntu și Debian:

sudo apt install fail2ban

Lansa:

systemctl start fail2ban
systemctl enable fail2ban

Programul are două fișiere de configurare: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. Restricțiile de interdicție sunt specificate în al doilea fișier.

Jail for SSH este activat în mod implicit cu setările implicite (5 încercări, interval 10 minute, ban timp de 10 minute).

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

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

Actualizări automate de securitate

După cum știți, noi vulnerabilități se găsesc în mod constant în toate programele. După ce informațiile sunt publicate, exploit-urile sunt adăugate la pachetele populare de exploit, care sunt utilizate pe scară largă de hackeri și adolescenți atunci când scanează toate serverele la rând. Prin urmare, este foarte important să instalați actualizări de securitate imediat ce acestea devin disponibile.

Serverele Ubuntu au actualizări automate de securitate activate în mod implicit, deci nu sunt necesari pași suplimentari.

Pe CentOS/Red Hat trebuie să instalați aplicația dnf-automat și pornește cronometrul:

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

Verificare cronometru:

sudo systemctl status dnf-automatic.timer

Schimbarea porturilor implicite

SSH a fost dezvoltat în 1995 pentru a înlocui telnet (portul 23) și ftp (portul 21), așa că autorul programului este Tatu Iltonen a ales implicit portul 22, și a fost aprobat de IANA.

Desigur, toți atacatorii știu pe ce port rulează SSH - și îl scanează împreună cu alte porturi standard pentru a afla versiunea software, pentru a verifica parolele standard de root și așa mai departe.

Schimbarea de mai multe ori a porturilor standard – ofuscarea – reduce volumul traficului de gunoi, dimensiunea jurnalelor și încărcarea pe server și, de asemenea, reduce suprafața de atac. Deși unii critică această metodă de „apărare prin obscuritate” (securitate prin obscuritate). Motivul este că această tehnică este opusă fundamentalului protectie arhitecturala. Prin urmare, de exemplu, Institutul Național de Standarde și Tehnologie din SUA „Ghid de securitate a serverului” indică necesitatea unei arhitecturi de server deschise: „Securitatea unui sistem nu trebuie să se bazeze pe secretul implementării componentelor sale”, se spune în document.

În teorie, schimbarea porturilor implicite este contrară practicilor de arhitectură deschisă. Dar, în practică, volumul traficului rău intenționat chiar scade, așa că aceasta este o măsură simplă și eficientă.

Numărul portului poate fi configurat prin schimbarea directivei Port 22 în fișierul de configurare / Etc / ssh / sshd_config. Este indicat și de parametru -p <port> в ssh. Client SSH și programe sftp suportă și parametrul -p <port>.

Parametru -p <port> poate fi folosit pentru a specifica numărul portului atunci când vă conectați folosind comanda ssh în Linux. ÎN sftp и scp este utilizat parametrul -P <port> (P majusculă). Specificarea acesteia din linia de comandă suprascrie orice valoare din fișierele de configurare.

Dacă există o mulțime de servere, aproape toate aceste acțiuni pentru a proteja un server Linux pot fi automatizate într-un script. Dar dacă există un singur server, atunci este mai bine să controlați manual procesul.

Despre drepturile de publicitate

Comanda si incepe sa lucrezi imediat! Crearea VDS orice configurație și cu orice sistem de operare într-un minut. Configurația maximă vă va permite să vă distrați - 128 de nuclee CPU, 512 GB RAM, 4000 GB NVMe. Destul de epic :)

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

Sursa: www.habr.com