Facebook

Come mettere in sicurezza un VPS con sistema operativo Ubuntu Linux

Livello base

Come mettere in sicurezza un VPS con sistema operativo Ubuntu Linux (livello base)

Come mettere in sicurezza un VPS con sistema operativo Ubuntu Linux (livello base)

Appena prese in mano le redini del comando è necessario assicurarsi che il tuo VPS abbia almeno un minimo di difese contro gli attacchi esterni. Nessun sistema è perfetto, così come nessun sistema è vermente impenetrabile, ciò però non esula dal mettere in atto una serie di accorgimenti tecnici quantomeno mirati ad evitare che anche gli attacchi più semplici vadano a segno.

Come mettere in sicurezza un VPS con sistema operativo Ubuntu Linux (livello base)

Per nostra politica, i VPS vengono rilasciati con il sistema operativo prescelto, così come lo rilascia il produttore. Questo chiaramente comporta un minimo di operazioni, rivolte alla sicurezza, prima di poter installare i proprio programmi. Come nella famosa frase dal fumetto di Spider-man, l'Amministratore di sistema ha grandi poteri, ma anche grandi responsabilità.

Lo staff tecnico di VPS GREEN non è autorizzato ad accedere ai tuoi VPS, d'altro canto, è sempre disponibile per darti supporto sul sistema operativo

Prerequisiti

  1. Un VPS con sistema operativo Linux
  2. Un utente con privilegi adeguati, ovvero sudo o direttamente root
  3. Un editor di testo, nel nostro esempio useremo nano
  4. Il gestore di pacchetti apt, normalmente incluso nel sistema operativo
  5. [Consigliato] Un firewall, nel nostro esempio useremo ufw

Aggiorna il tuo sistema operativo

La prima delle responsabilità come sysadmin è garantire quotidianamente sicurezza e funzionalità del sistema operativo e delle applicazioni. Gli sviluppatori di distribuzioni e di sistemi operativi propongono frequenti aggiornamenti di pacchetti, molto spesso per ragioni di sicurezza. Garantire l’aggiornamento della distribuzione o del sistema operativo è un elemento essenziale per proteggere il VPS.

Può capitare che i produttori delle applicazioni pubblichino un elenco di pacchetti di sistema o librerie compatibili o non compatibili. Prima di aggiornare componenti specifiche assicurati che non vi siano imcompatibilità con le applicazioni che dovrai o hai installato sul VPS.

Aggiornamento della libreria di pacchetti

Per prima cosa assicuriamoci che la libreria dei pacchetti sia aggiornata. Per fare questo basta connetterci al VPS via ssh o via console e lanciare il comando:

$ sudo apt update && sudo apt upgrade

Apt risponderà con una serie di informazioni tra cui il numero di pacchetti che si vorranno aggiornare, in questo caso è bene ricordare (salvo esigenze diverse) di manetere sempre aggioranto il proprio VPS, si procederà quindi a confermare tutti i pacchetti proposti, come nell'esempio:

6 upgraded, 8 newly installed, 0 to remove and 0 not upgraded.
6 standard LTS security updates
Need to get 54.5 MB of archives.
After this operation, 242 MB of additional disk space will be used.
Do you want to continue? [Y/n]
Y

Modifica la porta di default della Secure Shell

Anche se non obbligatorio, potrebbe essere una buona cosa modificare la porta standard dell'SSH, normalmente impostata sulla 22. Questa operazione, tutto sommato banale, evita gli attacchi da parte di robot che normalmente punterebbero alla posta standard. La procedura è piuttosto semplice e basta modificare il file di configurazione del servizio con l’editor di testo scelto

$ sudo nano /etc/ssh/sshd_config

Cerca la stringa "Port 22" e modifica il numero con la porta che preferisci, avendo cura però di non utilizzare una porta utilizzata da altro protocollo di sistema. Per convenzione le porte tra la 49152 e la 65535 sono considerate libere, non assegnate ad alcun protocollo o applicazione specifica.

# This is the sshd server system-wide configuration file.
# Port 22
Port 4422

Salva le modifiche e riavvia il servizio ssh:

$ sudo systemctl restart sshd

Appena riavviato il servizio non dovresti notare differnze ma è chiaro che la prossima volta che ti connetterai dovrai usare la stringa:

ssh Nome_Utente@IPv4_del_VPS -p Numero_della_porta

Se stai utilizzando un firewall ricordati di aggiungere la nuova porta e permettere in traffico in ingresso. Ad esempio se defiseri utilizzare ufw esegui il comando:

$ sudo ufw allow 4422
$ sudo ufw show added
Added user rules (see 'ufw status' for running firewall):
ufw allow 25565
ufw allow 22
ufw allow 4422

In questo modo aggiungerai la nuova porta scelta per ssh e verificherai quali porti sono configurate sul firewall. Se desideri, oltre che non utilizzare la porta 22, anche bloccare il traffico su di essa, puoi impostare il deny:

$ sudo ufw deny 22
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
25565 ALLOW IN Anywhere
22 DENY IN Anywhere
4422 ALLOW IN Anywhere
25565 (v6) ALLOW IN Anywhere (v6)
22 (v6) DENY IN Anywhere (v6)
4422 (v6) ALLOW IN Anywhere (v6)

Il parametro status verbose ti permette di avere una panoramica della configurazione del firewall. Se tutto rispetta ciò che vuoi ottenere, assicurati che il servizio firewall sia attivo:

$ sudo ufw enable

Non utilizzare root per qualsiasi operazione e crea un account con diritti utente limitati

E' buona regola generale non utilizzare sempre l'utente root, specialmente per operazioni che non richiedono privilegi così elevati. Per creare un nuovo utente, utilizza questo comando:

$ sudo adduser Nome_del_Nuovo_Utente

Il sistema richiederà di specificare la password (si consiglia sempre di non utilizzare password deboli) e altre informazioni (Nome, etc). Una volta creato potrà essere da subito utilizzato per accedere al VPS. Se l'utente creato dovrà eseguire operazioni che richiedono privilegi, si potrà procedere in due distinti modi:

  1. Utilizzare il comando $ su root per spostarsi sull'utente root momentaneamente.
  2. Aggiungere l'utente all'elenco dei "sudoers", una speciale lista di utenti che possono elevare i loro privilegi attraverso il comando $ sudo

Mentre il primo metodo non necessita di ulteriori approfondimenti, il secondo prevede invece l'aggiunta del nuovo utente alla lista. Per autorizzare il nuovo utente è necessario lanciare i comandi da root:

$ echo "Nome_del_Nuovo_Utente ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/Nome_del_Nuovo_Utente

In questo modo utilizzeremo l'utente root per creare un file dedicato al nuovo utente in sudoers.d/ il quale sarà letto dal sudo che autorizzerà il nostro nuovo utente. A questo punto possiamo connetterci via ssh al VPS, usando il nuovo utente anche per operazioni che richiedono particolari privilegi, come ad esempio:

$ sudo apt update

Disattiva l’accesso dell’utente root al server

L’utente root viene creato di default sui sistemi GNU/Linux e, di solito, rappresenta l'utente con il livello di accesso più elevato nel sistema operativo. È fortemente sconsigliato oltre che pericoloso lasciare che il tuo VPS sia accessibile esclusivamente come utente di root, perché questo account può effettuare operazioni senza alcun fermo, quindi anche dannose ed irreversibili. E' quindi fortemente consigliato disattivare l’accesso diretto degli utenti root tramite i protocolli di accesso remoto (rdp, vnc, etc) in generale, e non solo per il protocollo ssh.

La procedura è piuttosto semplice e basta modificare il file di configurazione del servizio con l’editor di testo scelto.

$ sudo nano /etc/ssh/sshd_config

Cerca la stringa "PermitRootLogin yes" e imposta "no".

# Authentication:
# PermitRootLogin yes
PermitRootLogin no

Salva le modifiche e riavvia il servizio ssh:

$ sudo systemctl restart sshd

Da questo momento qualsiasi tentativo di connessione via ssh con root@IPv4_del_VPS fallirà. Ricordati di creare un utente da utilizzare per l'accesso remoto. In ogni caso root potrà sempre essere utilizzato per l'accesso via Console VPS GREEN.

Console VPS GREEN

Qualche protezione in più... Fail2ban

Fail2ban è estremamente utile a prevenire tentativi di intrusione, può rappresentare quindi un piccolo accorgimento in più per la sicurezza del tuo VPS. Lo scopo di fail2ban è quello di bloccare gli indirizzi IP da cui i robot o gli aggressori cercano di accedere al tuo sistema, in particolare se ad attaccarti è un robot che tenta un Brute Force (ovvero tenta di connettersi a un servizio tentando password random o prese da un vocabolario).

L'installazione è semplicissima e basta eseguire il comando:

$ sudo apt install fail2ban

L'applicazione è già perfettamente funzionante così com'è appena installata, se preferisci personalizzare qualche parametro, potrai modificare la configurazione nel file /etc/fail2ban/jail.conf. Se vuoi approfondire l'uso di fail2ban ti consigliamo di leggere la documentazione ufficiale sul sito del progetto fail2ban ufficiale.

Come suggerito nella documentazione, andiamo a creare un nostro file di configurazione:

$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
$ sudo nano /etc/fail2ban/jail.local

Ricordati che i parametri contrassegnati come [DEFAULT] agiscono a livello globale, su tutti i servizi. Questi valori però vengono "sovrascritti" se si inseriscono nelle sezioni dedicate ai singoli servizi, esempio:

# [DEFAULT]
bantime = 1h
...
[sshd]
# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode = normal
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
bantime = 3h

Nel nostro esempio abbiamo definito a livello globale il tempo di ban a 1 ora (bantime = 1h), mentre per il servizio ssh abbiamo impostato un bantime a 3 ore. Per attivare subito le nostre personalizzazioni è necessario riavviare il servizio:

$ sudo systemctl restart fail2ban.service

Attenzione a non scrivere parametri doppi a parità di sezione [DEFAULT] o in qualsiasi [nome_servizio] altrimenti fail2ban non partità restituendo un errore.

Cambia spesso le password

E' buona norma definire una politica per il cambio password, specialmente per gli utenti che hanno privilegi elevati. Non c'è una regola definita ma, in linea generale, più spesso si cambia la password (più complessa che si può) e meglio è. Per modificare la password di un utente è necessario lanciare il comando:

$ passwd

Se la password da cambiare è quella del proprio utente, altrimenti bisongerà specificare il nome:

$ sudo passwd root

Conclusione

Anche se Linux (in generale) è famoso per essere tra i sistemi operativi più sicuri, presenta alcune vulnerabilità. Molte minacce alla sicurezza possono sfociare in perdita o danneggiamenti dei dati, ovvero costi e tempo per ripristinare, ad esempio:

  1. Malware - un software intrusivo progettato intenzionalmente per danneggiare i sistemi operativi.
  2. Sniffing - una pratica volta ad intercettare pacchetti in transito da e verso applicazioni non protette.
  3. Brute force - un particolare attacco volto ad indovinare password tramite generazione automatica o vocabolari.
  4. SQL injection - una pratica che sfrutta debolezze nel codice in un'applicazione Web per ottenere l'accesso al database del server.
  5. Cross-site scripting (XSS) - un attacco lato client durante il quale un hacker inserisce codice dannoso in un sito web.
  6. No function-level control - un software può causarlo non verificando correttamente i diritti di accesso, fornendo privilegi di root agli utenti generici.
  7. Broken authentication - furto di identità che di solito si verifica a causa di dati non crittografati, password deboli o timeout della sessione dell'applicazione impostati in modo errato.

Prima di implementare qualsiasi misura di sicurezza, renditi consapevole degli elementi che dovresti monitorare. Eccone qui alcuni:

  1. Sicurezza dell'hosting VPS
  2. Software installato sul server
  3. Connessioni via SSH e altri protocolli abilitati sul server
  4. Accesso root e login
  5. Password e diritti e privilegi dell'utente
  6. Firewall
  7. Connessioni via FTP e altri protocolli di scambio files abilitati sul server
  8. Files di log

Non è impossibile proteggere un server e se hai seguito questa guida un primo passo lo hai già fatto...

Indice  degli articoli

Articoli più recenti