Configurarea inițială a serverului cu Ubuntu 20.04/18.04 și 16.04


Acest tutorial vă va ghida în primii pași de bază pe care trebuie să îi configurați pe un nou server Ubuntu instalat pentru a crește securitatea și fiabilitatea serverului dvs.

Configurațiile explicate în acest subiect sunt aproape aceleași pentru toate sistemele de server Ubuntu, în ceea ce privește platforma OS subiacentă, indiferent dacă Ubuntu este instalat pe un server bare-metal, într-o mașină virtuală privată sau într-o mașină virtuală. derulat într-un cloud public VPS.

Cerințe

  • Instalare server Ubuntu 20.04
  • Instalare server Ubuntu 18.04
  • Instalare server Ubuntu 16.04

Actualizați și actualizați sistemul Ubuntu

Primul pas de care trebuie să aveți grijă în cazul instalării proaspete a serverului Ubuntu sau a unui nou Ubuntu VPS implementat este să vă asigurați că sistemul și toate componentele sistemului, cum ar fi nucleul, managerul de pachete apt și toate celelalte pachete instalate sunt la zi cu cele mai recente versiuni lansate și corecții de securitate.

Pentru a actualiza serverul Ubuntu, pentru a vă conecta la consola serverului cu un cont cu privilegii root sau direct ca root și rulați comenzile de mai jos pentru a efectua procesul de actualizare și upgrade.

sudo apt update 

După rularea comenzii de actualizare, veți vedea numărul de pachete disponibile pentru procesul de actualizare și comanda utilizată pentru listarea upgrade-urilor pachetelor.

sudo apt list --upgradable

După ce ați consultat lista de pachete disponibile pentru actualizare, lansați comanda de mai jos pentru a începe procesul de actualizare a sistemului.

sudo apt upgrade

Pentru a elimina toate pachetele deb descărcate local și toate celelalte cache-uri apt-get, executați comanda de mai jos.

sudo apt autoremove
sudo apt clean

Creați un cont nou în Ubuntu

În mod implicit, ca măsură de securitate, contul root este complet dezactivat în Ubuntu. Pentru a crea un cont nou pe sistem, conectați-vă la sistem cu utilizatorul contului cu privilegii root și creați un cont nou cu comanda de mai jos.

Acest nou cont va fi acordat cu privilegii root powers prin comanda sudo și va fi folosit pentru a efectua sarcini administrative în sistem. Asigurați-vă că ați configurat o parolă puternică pentru a proteja acest cont. Urmați solicitarea adduser pentru a configura detaliile utilizatorului și parola.

sudo adduser ubuntu_user

Dacă acest cont va fi atribuit unui alt administrator de sistem, puteți forța utilizatorul să-și schimbe parola la prima încercare de conectare, lansând următoarea comandă.

sudo chage -d0 ubuntu_user

Deocamdată, noul utilizator adăugat nu poate efectua sarcini administrative prin utilitarul sudo. Pentru a acorda acestui nou cont de utilizator privilegii administrative, ar trebui să adăugați utilizatorul la grupul de sistem „sudo ” lansând comanda de mai jos.

sudo usermod -a -G sudo ubuntu_user

În mod implicit, toți utilizatorii care aparțin grupului „sudo” au voie să execute comenzi cu privilegii root prin utilitarul sudo. Comanda Sudo trebuie utilizată înainte de a scrie comanda necesară pentru execuție, așa cum se arată în exemplul de mai jos.

sudo apt install package_name

Testați dacă noul utilizator are privilegiile root acordate, conectându-vă la sistem și executați comanda apt update prefixată cu sudo.

su - ubuntu_user
sudo apt update

Configurați numele de gazdă a sistemului în Ubuntu

De obicei, numele de gazdă al mașinii este configurat în timpul procesului de instalare a sistemului sau atunci când VPS-ul este creat în cloud. Cu toate acestea, ar trebui să schimbați numele mașinii dvs. pentru a reflecta mai bine destinația serverului dvs. sau pentru a descrie mai bine scopul său final.

Într-o companie mare, mașinile sunt denumite după scheme complexe de denumire pentru a identifica cu ușurință mașina în rafturile centrului de date. De exemplu, dacă mașina dvs. Ubuntu va opera un server de e-mail, numele mașinii ar trebui să reflecte acest fapt și puteți configura numele de gazdă a mașinii ca mx01.mydomain.lan, de exemplu.

Pentru a afișa detalii despre numele de gazdă a mașinii dvs., executați următoarea comandă.

hostnamectl

Pentru a schimba numele mașinii dvs., lansați comanda hostnamectl cu noul nume pe care îl veți configura pentru mașina dvs., așa cum este ilustrat în fragmentul de mai jos.

sudo hostnamectl set-hostname tecmint

Verificați noul nume al sistemului dvs. cu una dintre comenzile de mai jos.

hostname
hostname -s
cat /etc/hostname 

Configurați SSH cu autentificarea cheii publice în Ubuntu

Pentru a crește gradul de securitate a sistemului al unui server Ubuntu, ar trebui să configurați autentificarea cu cheie publică SSH pentru un cont local. Pentru a genera perechea de chei SSH, cheia publică și privată, cu specificarea unei lungimi a cheii, cum ar fi 2048 de biți, executați următoarea comandă la consola serverului dumneavoastră.

Asigurați-vă că sunteți conectat la sistem cu utilizatorul pe care îl configurați cheia SSH.

su - ubuntu_user
ssh-keygen -t RSA -b 2048

În timp ce cheia este generată, vi se va solicita să adăugați frază de acces pentru a securiza cheia. Puteți introduce o expresie de acces puternică sau puteți alege să o lăsați goală dacă doriți să automatizați sarcinile prin serverul SSH.

După ce cheia SSH a fost generată, puteți copia cheia publică pe un server la distanță executând comanda de mai jos. Pentru a instala cheia publică pe serverul SSH la distanță, veți avea nevoie de un cont de utilizator la distanță cu permisiunile și acreditările corespunzătoare pentru a vă conecta la serverul de la distanță.

ssh-copy-id remote_user@remote_server

Ar trebui să vă puteți conecta automat prin SSH la serverul de la distanță folosind metoda de autentificare cu cheie publică. Nu va trebui să adăugați parola utilizatorului de la distanță în timp ce utilizați autentificarea cu cheie publică SSH.

După ce v-ați conectat la serverul de la distanță, puteți începe să executați comenzi, cum ar fi w command pentru a lista utilizatorii ssh conectați la distanță, așa cum se arată în captura de ecran de mai jos.

Tastați exit în consolă pentru a închide sesiunea SSH la distanță.

ssh remote_user@remote_server
w
exit

Pentru a vedea conținutul cheii SSH publice pentru a instala manual cheia pe un server SSH la distanță, lansați următoarea comandă.

cat ~/.ssh/id_rsa.pub

Server SSH securizat în Ubuntu

Pentru a securiza demonul SSH, ar trebui să schimbați numărul implicit al portului SSH de la 22 la un port aleatoriu, mai mare de 1024 și să nu permiteți accesul SSH la distanță la contul rădăcină prin parola sau cheia, deschizând fișierul de configurare principal al serverului SSH și efectuați următoarele modificări.

sudo vi /etc/ssh/sshd_config

Mai întâi, căutați linia comentată #Port22 și adăugați o nouă linie dedesubt (înlocuiți numărul portului de ascultare în consecință):

Port 2345

Nu închideți fișierul, derulați în jos și căutați linia #PermitRootLogin da, decomentați linia eliminând semnul # (hashtag) de la începutul liniei și modificați linia pentru a arăta așa cum se arată în fragmentul de mai jos.

PermitRootLogin no

După aceea, reporniți serverul SSH pentru a aplica noile setări și a testa configurația încercând să vă conectați de la o mașină la distanță la acest server cu contul rădăcină prin noul număr de port. Accesul la contul root prin SSH ar trebui restricționat.

sudo systemctl restart sshd

De asemenea, rulați netstat sau ss command și filtrați rezultatul prin comanda grep pentru a afișa noul număr de port de ascultare pentru serverul SSH.

sudo ss -tlpn| grep ssh
sudo netstat -tlpn| grep ssh

Există situații în care s-ar putea să doriți să deconectați automat toate conexiunile SSH la distanță stabilite în serverul dvs. după o perioadă de inactivitate.

Pentru a activa această caracteristică, executați comanda de mai jos, care adaugă variabila TMOUT bash la fișierul ascuns .bashrc contului dvs. și forțează fiecare conexiune SSH făcută cu numele utilizatorul să fie deconectat sau abandonat după 5 minute de inactivitate.

echo 'TMOUT=300' >> .bashrc

Rulați comanda tail pentru a verifica dacă variabila a fost adăugată corect la sfârșitul fișierului .bashrc. Toate conexiunile SSH ulterioare vor fi închise automat după 5 minute de inactivitate de acum înainte.

tail .bashrc

În captura de ecran de mai jos, sesiunea SSH la distanță de la mașina drupal la serverul Ubuntu prin contul ubuntu_user a fost expirată și a fost deconectată automat după 5 minute.

Configurați Ubuntu Firewall UFW

Fiecare server are nevoie de un firewall bine configurat pentru a securiza sistemul la nivel de rețea. Serverul Ubuntu folosește aplicația UFW pentru a gestiona regulile iptables de pe server.

Verificați starea aplicației firewall UFW în Ubuntu lansând comenzile de mai jos.

sudo systemctl status ufw
sudo ufw status

De obicei, demonul firewall UFW este activ și rulează pe serverul Ubuntu, dar regulile nu sunt aplicate implicit. Înainte de a activa politica de firewall UFW în sistemul dvs., mai întâi ar trebui să adăugați o nouă regulă pentru a permite traficului SSH să treacă prin firewall prin portul SSH modificat. Regula poate fi adăugată executând comanda de mai jos.

sudo ufw allow 2345/tcp

După ce ați permis traficul SSH, puteți activa și verifica aplicația firewall UFW cu următoarele comenzi.

sudo ufw enable
sudo ufw status

Pentru a adăuga reguli de firewall noi pentru alte servicii de rețea instalate ulterior pe serverul dvs., cum ar fi serverul HTTP, un server de e-mail sau alte servicii de rețea, utilizați exemplele de comenzi de firewall de mai jos ca ghid.

sudo ufw allow http  #allow http traffic
sudo ufw allow proto tcp from any to any port 25,443  # allow https and smtp traffic

Pentru a enumera toate regulile de firewall, rulați comanda de mai jos.

sudo ufw status verbose

Setați Ora serverului Ubuntu

Pentru a controla sau a interoga ceasul serverului Ubuntu și alte setări de timp aferente, executați comanda timedatectl fără argument.

Pentru a modifica setările de fus orar ale serverului dvs., executați mai întâi comanda timedatectl cu argumentul list-timezones pentru a lista toate fusurile orare disponibile și apoi setați fusul orar al sistemului dvs. așa cum se arată în fragmentul de mai jos.

sudo timedatectl 
sudo timedatectl list-timezones 
sudo timedatectl set-timezone Europe/Vienna

Noul client demon systemd-timesyncd systemd poate fi utilizat în Ubuntu pentru a oferi o oră precisă pentru serverul dvs. din rețea și pentru a sincroniza ora cu un server peer de timp superior.

Pentru a aplica această nouă caracteristică a Systemd, modificați fișierul de configurare a demonului systemd-timesyncd și adăugați cele mai apropiate servere NTP din punct de vedere geografic la linia de instrucțiuni NTP, așa cum se arată în fragmentul de fișier de mai jos:

sudo nano /etc/systemd/timesyncd.conf

Adăugați următoarea configurație în fișierul timesyncd.conf:

[Time]
NTP=0.pool.ntp.org 1.pool.ntp.org
FallbackNTP=ntp.ubuntu.com

Pentru a adăuga cele mai apropiate servere NTP din punct de vedere geografic, consultați lista de servere de proiecte NTP pool la următoarea adresă: http://www.pool.ntp.org/en/

După aceea, reporniți demonul Systemd timesync pentru a reflecta modificările și verificați starea demonului rulând comenzile de mai jos. După repornire, demonul va începe să sincronizeze ora cu noul server peer ntp.

sudo systemctl restart systemd-timesyncd.service 
sudo systemctl status systemd-timesyncd.service

Dezactivați și eliminați serviciile inutile din Ubuntu

Pentru a obține o listă a tuturor serviciilor de rețea TCP și UDP care funcționează în mod implicit pe serverul Ubuntu, executați comanda ss sau netstat.

sudo netstat -tulpn
OR
sudo ss -tulpn

Începând cu versiunea Ubuntu 16.10, soluția implicită de soluționare DNS este acum controlată de serviciul rezolvat de sistem, așa cum este dezvăluit de rezultatul netstat sau >comenzi ss.

De asemenea, ar trebui să verificați starea serviciului systemd-resolved rulând următoarea comandă.

sudo systemctl status systemd-resolved.service

Serviciul systemd-resolved se leagă de toate interfețele de rețea activate și ascultă pe porturile 53 și 5355 TCP și UDP.

Rularea demonului DNS de stocare în cache rezolvată de sistem pe un server de producție poate fi periculoasă din cauza numărului mare de atacuri DDOS efectuate de hackeri rău intenționați împotriva serverelor DNS nesecurizate.

Pentru a opri și a dezactiva acest serviciu, executați următoarele comenzi.

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

Verificați dacă serviciul a fost oprit și dezactivat lansând ss sau comandă netstat. Porturile de ascultare rezolvate de systemd, 53 și 5355 TCP și UDP, nu ar trebui să fie listate în ieșirea comenzii netstat sau ss, așa cum este ilustrat mai jos.

De asemenea, ar trebui să reporniți mașina pentru a dezactiva complet toate serviciile daemon rezolvate de systemd și pentru a restabili fișierul implicit /etc/resolv.conf.

sudo ss -tulpn
sudo netstat -tulpn
sudo systemctl reboot

Deși ați dezactivat unele servicii de rețea nedorite pentru a rula pe serverul dvs., există și alte servicii instalate și care rulează în sistemul dvs., cum ar fi procesul lxc și serviciul snapd. Aceste servicii pot fi detectate cu ușurință prin comenzile ps, top sau pstree.

sudo ps aux
sudo top
sudo pstree

În cazul în care nu veți utiliza virtualizarea containerului LXC pe serverul dvs. sau nu veți începe să instalați software-ul pachet prin Snap package manager, ar trebui să dezactivați și să eliminați complet aceste servicii, lansând comenzile de mai jos.

sudo apt autoremove --purge lxc-common lxcfs
sudo apt autoremove --purge snapd

Asta e tot! Acum, serverul Ubuntu este acum pregătit pentru instalarea de software suplimentar necesar pentru servicii sau aplicații de rețea personalizate, cum ar fi instalarea și configurarea unui server web, a unui server de baze de date, a unui serviciu de partajare a fișierelor sau a altor aplicații specifice.