Tutorial > Configurazione iniziale del server su Ubuntu 20.04

Configurazione iniziale del server su Ubuntu 20.04

Pubblicato il: 10 dicembre 2020

Hosting Security Ubuntu

Dopo aver creato un Cloud Server con Linux Ubuntu 20.04, ci sono alcune semplici configurazioni che è consigliato modificare per preparare l'ambiente e metterlo in sicurezza.

Per iniziare dovrai connetterti al tuo server tramite una connessione SSH.

Ipotizziamo che, al momento della sua creazione, il server preveda un login di "root" basata su password e il servizio SSH utilizzi la porta di default per l’ascolto della connessione, che è la 22. In questo caso il comando che potrai utilizzare per connetterti via SSH dal tuo terminale è il seguente:

$ ssh [email protected] -p 22

P.S. Chiaramente dovrai sostituire "IP.DEL.SERVER" con l'indirizzo IP del tuo server.

Il servizio SSH rappresenta il punto di accesso principale al tuo Cloud Server e allo stesso tempo uno dei servizi che può trovarsi maggiormente sotto attacco rispetto ad altri. I prossimi step di questa guida ti aiuteranno a migliorare la sicurezza di SSH attraverso l’utilizzo di diverse tecniche e accorgimenti.

Cambiare porta di ascolto

Come anticipato, la porta di default per l’ascolto della connessione SSH è la 22. Cambiare questa impostazione ti permetterà di offuscare il servizio e rendere la connessione più sicura.

Per evitare di entrare in conflitto con altri servizi esistenti sulla macchina, è buona norma verificare quali porte sono attualmente in uso, utilizzando il comando netstat:

$ netstat -n -l
    
Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address State
tcp        0 0 127.0.0.1:3306          0.0.0.0:* LISTEN
tcp        0 0 127.0.0.53:53           0.0.0.0:* LISTEN
tcp        0 0 0.0.0.0:22              0.0.0.0:* LISTEN
tcp6       0 0 :::80                   :::* LISTEN
tcp6       0 0 :::22                   :::* LISTEN
udp        0 0 127.0.0.53:53           0.0.0.0:*

Attraverso il parametro -l passato a netstat, lo forziamo a stampare tutte le connessioni che si trovano in stato di ASCOLTO (LISTEN). In questo esempio possiamo notare le seguenti porte utilizzate:

  • 3306 Servizio MySQL

  • 22 SSH

  • 80 Apache2 / HTTP

  • 53 DNS

Per cambiare porta, ti basta modificare il file di configurazione presente in /etc/ssh/sshd_config, decommentando la direttiva Port:

#Port 22

Quindi impostando un nuovo valore, possibilmente alto, per evitare che venga intercettata dai software di scansionamento automatico delle porte (ad esempio 2200, 5574, 1022): 

Port 5574

Per applicare la modifica ricarica il servizio tramite:

$ sudo service sshd reload

Utilizzando reload, mantieni la connessione attiva, in modo da poter correggere eventuali errori e controllare il nuovo accesso con un altro client SSH.

Una volta applicata la modifica potrai collegarti al tuo server specificando la nuova porta. Ad esempio, se stai utilizzando il client SSH da riga di comando:

$ ssh [email protected] -p 5574

Utilizzo di chiavi per l’autenticazione

Una tipologia di accesso molto utilizzato per la sua sicurezza, quale alternativa al login basato su password, è quello tramite utilizzo di chiavi RSA. In questo tipo di autenticazione il client genera una chiave privata e la relativa chiave pubblica, che viene installata sulla macchina server, in modo da autenticare il client in maniera univoca.

Per installare la chiave pubblica, il client deve prima generare la coppia di chiavi utilizzando il comando ssh-keygen:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

Prima di procedere con la generazione, ssh-keygen chiede una passphrase opzionale che può essere utilizzata per l’autenticazione. In questo esempio abbiamo lasciato il campo vuoto per facilitare l’accesso.

Una volta terminato, il software salverà due file nei percorsi indicati:

  • id_rsa: la chiave privata del client, da non condividere con nessuno.

  • id_rsa.pub: la chiave pubblica, distribuibile tranquillamente.

Per preparare l’ambiente server devi creare un file di nome authorized_keys nella cartella .ssh all’interno della cartella utente con cui effettuerai il login:

$ sudo mkdir ~/.ssh
$ sudo touch ~/.ssh/authorized_keys
$ sudo chmod 600 ~/.ssh/authorized_keys

Presta attenzione che il file abbia i permessi come indicato sopra.

Procedi quindi incollando la chiave pubblica preparata precedentemente dalla macchina client:

$ sudo nano ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoTzd9RnqT0yioQG1klsLEK/VG9myo7CQ47aRXu7hnPit6Lgw5kAjC7vzNWYLTy2oIlsrVI7R/tvWmVNISGkWDp9U3fONbSLp+vgBKDzRUVAIqP/AIJ2THanyZxj2b8XU/4s2uzGoTLSR3ViX0JU6zTc+IkaBp1o3W3OolvO15E10/VYJCKN3TkxPsSSGE3QReXnCcnIZYAnrPf9f1DPP1Lo+VUCIzZ7IzcZajAWQ53hC71mTYNHkUgIlWxpRyEhnsRfmqEfUSFbTwpNEarv7vGlK686C4xVxlVfKbqlNa3/g2Vrae4ArVBM958JPZ6aa+7KDZfH5TDgPPtlFCIGkd root@testclient

Salva il file e ricarica il servizio SSH:

$ sudo service sshd reload

A questo punto dovresti riuscire ad accedere al server senza che venga richiesta nessuna password tramite:

$ ssh [email protected] -p 5574

Se tutto funziona correttamente, puoi procedere a disabilitare l’accesso tramite password dalla macchina server, modificando il file /etc/ssh/sshd_config, con i seguenti parametri:

ChallengeResponseAuthentication no
    PasswordAuthentication no

Ricorda che puoi aggiungere altre chiavi pubbliche semplicemente salvandole in coda al file ~/.ssh/authorized_keys nella macchina server.

Creazione di un nuovo utente

Nel momento in cui si effettua la prima installazione del proprio Cloud Server basato su Linux, viene creato automaticamente un utente "root" che possiede i privilegi di amministratore, ovvero ha il pieno controllo sulle risorse e i comandi eseguibili sulla macchina. 

Spesso può capitare di dover permettere l’accesso al server anche ad altri collaboratori. Naturalmente fornire a tutti gli utenti che devono accedere le credenziali di login dell'utente root può essere estremamente rischioso in quanto potrebbero apportare modifiche indesiderate al server o, nel peggiore dei casi, comportare un malfunzionamento complessivo del sistema. 

Per questo motivo è fondamentale conoscere come gestire gli utenti e assegnargli diversi livelli di permessi.

Prima di poter aggiungere un nuovo utente al sistema bisogna definire il tipo di gruppo al quale egli dovrà appartenere. Un Gruppo ha lo scopo di raccogliere tutti gli utenti che hanno gli stessi privilegi.

Ciascun utente può appartenere a un solo gruppo Primario, che viene generato automaticamente alla creazione dell’utente, e i file creati da questo utente saranno assegnati al rispettivo gruppo primario. Opzionalmente un utente può appartenere anche a uno o più gruppi Secondari per definire ulteriori privilegi in suo possesso.

Ipotizzando che tu voglia creare un nuovo utente, come puoi ben immaginare dovrai creare prima il gruppo e successivamente aggiungere gli utenti.

Per creare il gruppo di cui farà parte il futuro utente digita:

sudo addgroup my_group

N.B. sostituisci ‘my_group’ con il nome che vuoi attribuire al gruppo.

Puoi creare quindi un nuovo utente e garantirgli accesso al server digitando:

adduser first_user

N.B. Sostituisci ‘first_user’ con il nome dell’utente che preferisci.

E’ possibile aggiungere l'utente a uno o più gruppi mediante il comando:

sudo usermod -a -G group1,group2 first_user 

N.B. Sostituisci chiaramente "group1,group2" con i nomi dei gruppi ai quali aggiungere l’utente e ‘first_user’ con il nome dell’utente da aggiungere.

Ti sarà chiesto di specificare con quale password l’utente debba effettuare il login al server. Inoltre ti verranno chieste altre informazioni opzionali: se non vuoi inserirle, premi semplicemente invio a ogni voce. Al termine si presenterà un riepilogo al quale dovrai rispondere con Y per accettare, N per rifiutare.

Nella seguente schermata vengono mostrate le istruzioni necessarie su Ubuntu per la creazione del nuovo gruppo "my_group", la successiva creazione degli utenti "first_user" e "second_user", e infine l'aggiunta dei due nuovi utenti al gruppo "my_group":

Creazione utenti e assegnazione a un gruppo su Ubuntu

Verifica dell'utente creato

Per verificare la corretta creazione dell’utente, chiudi la connessione SSH e prova a connetterti nuovamente al tuo server con il nuovo utente creato, nel nostro esempio ‘first_user’. Noterai infatti che il nome dell’utente (evidenziato in verde nella schermata successiva) è esattamente quello dell’account creato in precedenza.

Questo nuovo utente così creato non ha accesso ai privilegi di root. Basta avviare qualsiasi comando con ‘sudo’ per ottenere il relativo messaggio di errore:

Errore permessi utente

Per visualizzare gli utenti associati al gruppo creato puoi utilizzare il comando "getent group", aggiungendo il comando "grep" per limitare i risultati da mostrare solamente a quelli in cui compare il nome del gruppo da verificare. Digita quindi:

getent group | grep mygroup 

Allo stesso modo, per vedere a quali gruppi risulta associato il nuovo utente ti basta invece digitare:

getent group | grep first_user 

N.B. Sostituisci ‘mygroup’ e ‘first_user’ rispettivamente con i nomi del gruppo e dell’utente da ricercare.

Nella seguente schermata viene mostrato l'output dei due comandi, che presenta la sintassi "group:password:GID:users" i cui campi corrispondono rispettivamente al nome del gruppo, la sua password (in questo caso è indicato "x" perchè la password è contenuta nel file /etc/gshadow), il Group ID e la lista di utenti che fanno parte del gruppo.

Ricerca Gruppi e utenti

Assegnazione dei privilegi di amministratore

Per consentire all’utente precedentemente creato i diritti di root, ovvero i privilegi di amministratore, devi effettuare nuovamente il login al server con l'utente root e aggiungere l’account "first_user" al gruppo “sudo”.

Una volta effettuato quindi il login come root (o utente abilitato al comando sudo) digita:

 sudo usermod -aG sudo first_user

N.B. Sostituisci "first_user" con il nome utente impostato in precedenza.

Da questo momento, anche effettuando il login al server con il nuovo utente sarà consentito accedere al comando ‘sudo’ ed eseguire le istruzioni come amministratore, come mostrato nella seguente schermata:

Verifica dei permessi

Installazione del Firewall

Alla base di qualsiasi Cloud Server vi è sempre uno strumento di protezione che, affidandosi ad alcune regole, permette la comunicazione del server da e verso l’esterno. Questo componente software prende il nome di Firewall e rappresenta la prima barriera di sicurezza per prevenire l’accesso al tuo server da parte di utenti non autorizzati o semplicemente per assicurarsi che un determinato servizio non sia raggiungibile dall’esterno della propria macchina. 

UFW, acronimo di Uncomplicated Firewall, è uno dei software più utilizzati per gestire un firewall su Linux, da linea di comando, in maniera semplice e intuitiva.

UFW è un software preinstallato nella maggior parte delle distribuzioni Linux. Qualora non dovesse essere già installato sul tuo sistema, puoi comunque installarlo digitando il comando:

sudo apt-get install ufw 

UFW può lavorare gestendo sia indirizzi IPV4, abilitati di default, sia IPV6 qualora necessario. Se dovessi aver bisogno di abilitare anche gli IPV6, puoi modificare questa opzione dal file “/etc/default/ufw”. 

Per poter apportare questa modifica apri il file con l'editor nano:

sudo nano /etc/default/ufw 

Imposta quindi su “yes” la voce “IPV6”. 

Abilitare IPV6

Al termine della modifica, salva e chiudi il documento (CTRL + X / Y / Invio).

La modifica avrà effetto dal prossimo riavvio di UFW. Per riavviare subito il firewall e rendere operative le modifiche, puoi digitare:

sudo ufw reload 

Configurazione di base del Firewall

In una fase iniziale è buona norma bloccare ogni tipo di comunicazione dall'esterno verso il server cloud. In questa maniera sarà più facile sbloccare in seguito le comunicazioni con altre macchine, identificate mediante il loro IP, o su determinate porte o servizi.

Allo stesso modo bisogna abilitare il traffico uscente per il server, per accertarsi che le applicazioni, che girano sul proprio server, possano interrogare servizi esterni.

Per bloccare ogni forma di comunicazione VERSO il server digita:

sudo ufw default deny incoming 

Per consentire ogni forma di comunicazione in uscita DAL server digita:

sudo ufw default allow outgoing
Impostazioni iniziale del firewall

Consentire la comunicazione SSH

Spesso l’interazione con il proprio server avviene mediante una connessione SSH. Questa tuttavia rientra tra le connessioni in entrata che sono state bloccate, proprio perchè vi è un tentativo di comunicazione VERSO il Server.

È necessario quindi aggiungere questa tipologia di connessione tra le regole di UFW, che permettono di sovrascrivere le politiche standard definite in precedenza per il firewall.

Per consentire quindi le connessioni SSH al server, si può digitare uno dei due comandi:

sudo ufw allow ssh
sudo ufw allow 22

Il fatto che si possano utilizzare due diversi comandi per poter ottenere lo stesso identico effetto è dato dal fatto che in un file di configurazione di UFW è presente un'associazione tra la parola “ssh” e la sua relativa porta (22). Aprendo il file “/etc/services” è possibile infatti visualizzare l'elenco di tutte queste associazioni.

A questo punto avrai correttamente preperato e messo in sicurezza il tuo server Linux Ubuntu e sarai pronto per poterlo utilizzare.