Ricerca nel sito web

Configurazione iniziale del server con Ubuntu 20.04/18.04 e 16.04


Questo tutorial ti guiderà nei primi passaggi fondamentali che devi configurare su un nuovo server Ubuntu installato per aumentare la sicurezza e l'affidabilità del tuo server.

Le configurazioni spiegate in questo argomento sono quasi le stesse per tutti i sistemi server Ubuntu, per quanto riguarda la piattaforma del sistema operativo sottostante, sia che Ubuntu sia installato su un server bare metal, in una macchina virtuale privata o in una macchina virtuale sviluppato in un cloud pubblico VPS.

Requisiti

  • Installazione del server Ubuntu 20.04
  • Installazione del server Ubuntu 18.04
  • Installazione del server Ubuntu 16.04

Aggiorna e aggiorna il sistema Ubuntu

Il primo passo di cui devi occuparti in caso di nuova installazione del server Ubuntu o di un nuovo Ubuntu VPS distribuito è quello di assicurarti che il sistema e tutti i componenti di sistema, come il kernel, il gestore pacchetti apt e tutti gli altri pacchetti installati sono aggiornati con le ultime versioni rilasciate e patch di sicurezza.

Per aggiornare il server Ubuntu, accedere alla console del server con un account con privilegi di root o direttamente come root ed eseguire i comandi seguenti per eseguire il processo di aggiornamento e upgrade.

sudo apt update 

Dopo aver eseguito il comando update, vedrai il numero di pacchetti disponibili per il processo di aggiornamento e il comando utilizzato per elencare gli aggiornamenti dei pacchetti.

sudo apt list --upgradable

Dopo aver consultato l'elenco dei pacchetti disponibili per l'aggiornamento, esegui il comando seguente per avviare il processo di aggiornamento del sistema.

sudo apt upgrade

Per rimuovere tutti i pacchetti deb scaricati localmente e tutte le altre cache apt-get, esegui il comando seguente.

sudo apt autoremove
sudo apt clean

Crea un nuovo account in Ubuntu

Per impostazione predefinita, come misura di sicurezza, l'account root è completamente disabilitato in Ubuntu. Per creare un nuovo account sul sistema, accedi al sistema con l'account utente con privilegi root e crea un nuovo account con il comando seguente.

A questo nuovo account verranno concessi i privilegi di root tramite il comando sudo e verrà utilizzato per eseguire attività amministrative nel sistema. Assicurati di impostare una password complessa per proteggere questo account. Segui la richiesta adduser per impostare i dettagli dell'utente e la password.

sudo adduser ubuntu_user

Se questo account verrà assegnato a un altro amministratore di sistema, puoi forzare l'utente a modificare la propria password al primo tentativo di accesso immettendo il seguente comando.

sudo chage -d0 ubuntu_user

Per ora, il nuovo utente aggiunto non può eseguire attività amministrative tramite l'utilità sudo. Per concedere a questo nuovo account utente privilegi amministrativi dovresti aggiungere l'utente al gruppo di sistema “sudo” emettendo il comando seguente.

sudo usermod -a -G sudo ubuntu_user

Per impostazione predefinita, tutti gli utenti appartenenti al gruppo "sudo" possono eseguire comandi con privilegi di root tramite l'utilità sudo. Il comando Sudo deve essere utilizzato prima di scrivere il comando necessario per l'esecuzione, come mostrato nell'esempio seguente.

sudo apt install package_name

Verifica se al nuovo utente sono concessi i privilegi di root, accedendo al sistema ed eseguendo il comando apt update con il prefisso sudo.

su - ubuntu_user
sudo apt update

Configura il nome host del sistema in Ubuntu

Di solito, il nome host della macchina viene impostato durante il processo di installazione del sistema o quando il VPS viene creato nel cloud. Tuttavia, dovresti cambiare il nome della tua macchina per riflettere meglio la destinazione del tuo server o per descrivere meglio il suo scopo finale.

In una grande azienda, le macchine prendono nomi in base a schemi di denominazione complessi per identificare facilmente la macchina nei rack del data center. Ad esempio, se la tua macchina Ubuntu gestirà un server di posta, il nome della macchina dovrebbe riflettere questo fatto e puoi impostare il nome host della macchina come mx01.miodominio.lan, ad esempio.

Per mostrare i dettagli sul nome host della tua macchina, esegui il comando seguente.

hostnamectl

Per cambiare il nome della tua macchina, esegui il comando hostnamectl con il nuovo nome che configurerai per la tua macchina, come illustrato nell'estratto seguente.

sudo hostnamectl set-hostname tecmint

Verifica il nuovo nome del tuo sistema con uno dei comandi seguenti.

hostname
hostname -s
cat /etc/hostname 

Configura SSH con l'autenticazione a chiave pubblica in Ubuntu

Per aumentare il livello di sicurezza del sistema di un server Ubuntu, è necessario impostare l'autenticazione con chiave pubblica SSH per un account locale. Per generare una coppia di chiavi SSH, la chiave pubblica e privata, specificando una lunghezza della chiave, ad esempio 2048 bit, eseguire il seguente comando sulla console del server.

Assicurati di aver effettuato l'accesso al sistema con l'utente per cui stai configurando la chiave SSH.

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

Durante la generazione della chiave, ti verrà richiesto di aggiungere una passphrase per proteggere la chiave. Puoi inserire una passphrase complessa o scegliere di lasciare vuota la passphrase se desideri automatizzare le attività tramite il server SSH.

Dopo che la chiave SSH è stata generata, puoi copiare la chiave pubblica su un server remoto eseguendo il comando seguente. Per installare la chiave pubblica sul server SSH remoto avrai bisogno di un account utente remoto con le autorizzazioni e le credenziali adeguate per accedere al server remoto.

ssh-copy-id remote_user@remote_server

Dovresti essere in grado di accedere automaticamente tramite SSH al server remoto utilizzando il metodo di autenticazione con chiave pubblica. Non sarà necessario aggiungere la password dell'utente remoto durante l'utilizzo dell'autenticazione con chiave pubblica SSH.

Dopo aver effettuato l'accesso al server remoto, puoi iniziare a eseguire comandi, come comando w per elencare gli utenti remoti che hanno effettuato l'accesso a ssh, come mostrato nello screenshot seguente.

Digita exit nella console per chiudere la sessione SSH remota.

ssh remote_user@remote_server
w
exit

Per vedere il contenuto della tua chiave SSH pubblica per installare manualmente la chiave su un server SSH remoto, immetti il comando seguente.

cat ~/.ssh/id_rsa.pub

Proteggi il server SSH in Ubuntu

Per proteggere il demone SSH dovresti modificare il numero di porta SSH predefinito da 22 a una porta casuale, superiore a 1024, e non consentire l'accesso SSH remoto all'account root tramite password o chiave, aprendo il file di configurazione principale del server SSH e apportando le seguenti modifiche.

sudo vi /etc/ssh/sshd_config

Innanzitutto, cerca la riga commentata #Port22 e aggiungi una nuova riga sotto (sostituisci di conseguenza il numero della porta di ascolto):

Port 2345

Non chiudere il file, scorri verso il basso e cerca la riga #PermitRootLogin sì, decommenta la riga rimuovendo il segno # (hashtag) dall'inizio della riga e modificare la riga in modo che assomigli a quella mostrata nell'estratto seguente.

PermitRootLogin no

Successivamente, riavvia il server SSH per applicare le nuove impostazioni e testa la configurazione provando ad accedere da un computer remoto a questo server con l'account root tramite il nuovo numero di porta. L'accesso all'account root tramite SSH dovrebbe essere limitato.

sudo systemctl restart sshd

Inoltre, esegui netstat o il comando ss e filtra l'output tramite il comando grep per mostrare il nuovo numero di porta di ascolto per il server SSH.

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

Ci sono situazioni in cui potresti voler disconnettere automaticamente tutte le connessioni SSH remote stabilite nel tuo server dopo un periodo di inattività.

Per abilitare questa funzione, esegui il comando seguente, che aggiunge la variabile bash TMOUT al file nascosto .bashrc del tuo account e forza ogni connessione SSH effettuata con il nome del l'utente verrà disconnesso o abbandonato dopo 5 minuti di inattività.

echo 'TMOUT=300' >> .bashrc

Esegui il comando tail per verificare se la variabile è stata aggiunta correttamente alla fine del file .bashrc. Da questo momento in poi tutte le connessioni SSH successive verranno chiuse automaticamente dopo 5 minuti di inattività.

tail .bashrc

Nello screenshot seguente, la sessione SSH remota dalla macchina Drupal al server Ubuntu tramite l'account ubuntu_user è scaduta e si è disconnessa automaticamente dopo 5 minuti.

Configura il firewall Ubuntu UFW

Ogni server necessita di un firewall ben configurato per proteggere il sistema a livello di rete. Il server Ubuntu utilizza l'applicazione UFW per gestire le regole iptables sul server.

Controlla lo stato dell'applicazione firewall UFW in Ubuntu emettendo i comandi seguenti.

sudo systemctl status ufw
sudo ufw status

Di solito, il demone del firewall UFW è attivo e funzionante nel server Ubuntu, ma le regole non vengono applicate per impostazione predefinita. Prima di abilitare la policy firewall UFW nel tuo sistema, devi prima aggiungere una nuova regola per consentire al traffico SSH di passare attraverso il firewall tramite la porta SSH modificata. La regola può essere aggiunta eseguendo il comando seguente.

sudo ufw allow 2345/tcp

Dopo aver consentito il traffico SSH, puoi abilitare e controllare l'applicazione firewall UFW con i seguenti comandi.

sudo ufw enable
sudo ufw status

Per aggiungere nuove regole firewall per altri servizi di rete successivamente installati sul tuo server, come un server HTTP, un server di posta o altri servizi di rete, utilizza come guida gli esempi di comandi firewall riportati di seguito.

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

Per elencare tutte le regole del firewall, esegui il comando seguente.

sudo ufw status verbose

Imposta l'ora del server Ubuntu

Per controllare o interrogare l'orologio del server Ubuntu e altre impostazioni temporali correlate, eseguire il comando timedatectl senza argomenti.

Per modificare le impostazioni del fuso orario del tuo server, esegui prima il comando timedatectl con l'argomento list-timezones per elencare tutti i fusi orari disponibili e, quindi, imposta il fuso orario del tuo sistema come mostrato nell'estratto seguente.

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

Il nuovo client demone systemd systemd-timesyncd può essere utilizzato in Ubuntu per fornire un orario preciso per il tuo server attraverso la rete e sincronizzare l'orario con un server peer con orario superiore.

Per applicare questa nuova funzionalità di Systemd, modifica il file di configurazione del demone systemd-timesyncd e aggiungi i server NTP geograficamente più vicini alla riga di istruzione NTP, come mostrato nell'estratto di file seguente:

sudo nano /etc/systemd/timesyncd.conf

Aggiungi la seguente configurazione al file timesyncd.conf:

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

Per aggiungere i server NTP geograficamente più vicini, consultare l'elenco dei server del progetto pool NTP al seguente indirizzo: http://www.pool.ntp.org/en/

Successivamente, riavvia il demone systemd timesync per riflettere le modifiche e controlla lo stato del demone eseguendo i comandi seguenti. Dopo il riavvio, il demone inizierà a sincronizzare l'ora con il nuovo peer del server ntp.

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

Disabilita e rimuovi i servizi non necessari in Ubuntu

Per ottenere un elenco di tutti i servizi di rete TCP e UDP attivi e in esecuzione per impostazione predefinita sul tuo server Ubuntu, esegui il comando ss o netstat.

sudo netstat -tulpn
OR
sudo ss -tulpn

A partire dalla versione Ubuntu 16.10, il risolutore DNS predefinito è ora controllato dal servizio systemd-resolved, come rivelato dall'output di netstat o ss comandi.

Dovresti anche controllare lo stato del servizio risolto da systemd eseguendo il seguente comando.

sudo systemctl status systemd-resolved.service

Il servizio risolto da systemd si lega a tutte le interfacce di rete abilitate e ascolta sulle porte 53 e 5355 TCP e UDP.

L'esecuzione di un demone DNS di memorizzazione nella cache risolto dal sistema su un server di produzione può essere pericolosa a causa del numero elevato di attacchi DDOS eseguiti da hacker malintenzionati contro server DNS non protetti.

Per interrompere e disabilitare questo servizio, eseguire i seguenti comandi.

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

Verifica se il servizio è stato interrotto e disabilitato emettendo il comando ss o netstat. Le porte di ascolto risolte da systemd, 53 e 5355 TCP e UDP, non dovrebbero essere elencate nell'output del comando netstat o ss, come illustrato di seguito.

Dovresti anche riavviare la macchina per disabilitare completamente tutti i servizi demone risolti da systemd e ripristinare il file /etc/resolv.conf predefinito.

sudo ss -tulpn
sudo netstat -tulpn
sudo systemctl reboot

Sebbene tu abbia disabilitato l'esecuzione di alcuni servizi di rete indesiderati sul tuo server, ci sono anche altri servizi installati e in esecuzione nel tuo sistema, come il processo lxc e il servizio snapd. Questi servizi possono essere facilmente rilevati tramite i comandi ps, top o pstree.

sudo ps aux
sudo top
sudo pstree

Nel caso in cui non utilizzerai la virtualizzazione del contenitore LXC nel tuo server o non inizierai a installare software confezionato tramite il gestore pacchetti Snap, dovresti disabilitare e rimuovere completamente questi servizi, emettendo i comandi seguenti.

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

È tutto! Ora, il server Ubuntu è pronto per l'installazione di software aggiuntivo necessario per servizi o applicazioni di rete personalizzati, come l'installazione e la configurazione di un server Web, un server database, un servizio di condivisione file o altre applicazioni specifiche.