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 è veramente impenetrabile; ciò però non esula dal mettere in atto una serie di accorgimenti tecnici quantomeno mirati a evitare che anche gli attacchi più semplici vadano a segno.
Per politica di VPS GREEN, 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 propri programmi. Come nella famosa frase del 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
- Un VPS con sistema operativo Linux
- Un utente con privilegi adeguati, ovvero sudo o direttamente root
- Un editor di testo, nel nostro esempio useremo nano
- Il gestore di pacchetti apt, normalmente incluso nel sistema operativo
- [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 incompatibilità con le applicazioni che hai installato o dovrai installare sul VPS.
Per prima cosa assicuriamoci che la libreria dei pacchetti sia aggiornata. Basta connettersi 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 da aggiornare. È bene ricordare (salvo esigenze diverse) di mantenere sempre aggiornato il proprio VPS, confermando 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 porta standard. La procedura è piuttosto semplice: 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 usata da un 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 differenze, 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 il traffico in ingresso. Ad esempio, se decidessi di 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 porte sono configurate sul firewall. Se desideri, oltre a 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 usare root per tutto: crea un account con diritti limitati
È 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, ecc.). 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 modi distinti:
- utilizzare il comando
$ su rootper spostarsi momentaneamente sull'utente root; - aggiungere l'utente all'elenco dei «sudoers», una speciale lista di utenti che possono elevare i propri privilegi attraverso il comando
sudo.
Mentre il primo metodo non necessita di ulteriori approfondimenti, il secondo prevede l'aggiunta del nuovo utente alla lista. Per autorizzarlo è necessario lanciare 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/, che sarà letto da sudo e autorizzerà il nostro nuovo utente. A questo punto possiamo connetterci via SSH al VPS usando il nuovo utente anche per operazioni che richiedono privilegi particolari, 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. È fortemente sconsigliato, oltre che pericoloso, lasciare che il tuo VPS sia accessibile esclusivamente come utente root, perché questo account può effettuare operazioni senza alcun freno, quindi anche dannose e irreversibili. È quindi fortemente consigliato disattivare l'accesso diretto degli utenti root tramite i protocolli di accesso remoto (RDP, VNC, ecc.) in generale, e non solo per il protocollo SSH.
La procedura è piuttosto semplice: 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 web di VPS GREEN.
Qualche protezione in più… Fail2ban
Fail2ban è estremamente utile a prevenire tentativi di intrusione e può rappresentare quindi un piccolo accorgimento in più per la sicurezza del tuo VPS. Lo scopo di Fail2ban è 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 provando password casuali o prese da un vocabolario).
L'installazione è semplicissima:
$ sudo apt install fail2ban
L'applicazione è già perfettamente funzionante così com'è appena installata. Se preferisci personalizzare qualche parametro, puoi modificare la configurazione nel file /etc/fail2ban/jail.conf; per approfondire ti consigliamo la documentazione ufficiale sul sito del progetto Fail2ban.
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 vengono però «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 di 3 ore. Per attivare subito le 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 partirà, restituendo un errore.
Cambia spesso le password
È 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 del proprio utente:
$ passwd
Se la password da cambiare è di un altro utente, bisognerà specificarne 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 danneggiamento dei dati, ovvero costi e tempo per ripristinare. Ad esempio:
- Malware — un software intrusivo progettato intenzionalmente per danneggiare i sistemi operativi.
- Sniffing — una pratica volta a intercettare pacchetti in transito da e verso applicazioni non protette.
- Brute force — un attacco volto a indovinare password tramite generazione automatica o vocabolari.
- SQL injection — una pratica che sfrutta debolezze nel codice di un'applicazione web per ottenere l'accesso al database del server.
- Cross-site scripting (XSS) — un attacco lato client durante il quale viene inserito codice dannoso in un sito web.
- No function-level control — un software può causarlo non verificando correttamente i diritti di accesso, fornendo privilegi di root a utenti generici.
- Broken authentication — furto di identità che di solito si verifica a causa di dati non crittografati, password deboli o timeout di sessione impostati in modo errato.
Prima di implementare qualsiasi misura di sicurezza, renditi consapevole degli elementi che dovresti monitorare. Eccone alcuni:
- Sicurezza dell'hosting VPS
- Software installato sul server
- Connessioni via SSH e altri protocolli abilitati sul server
- Accesso root e login
- Password, diritti e privilegi dell'utente
- Firewall
- Connessioni via FTP e altri protocolli di scambio file abilitati sul server
- File di log
Non è impossibile proteggere un server: se hai seguito questa guida, un primo passo lo hai già fatto. I prossimi: l'accesso con chiavi SSH e la disattivazione dell'accesso con password. E se la sicurezza vuoi verificarla, non solo dichiararla: è il nostro mestiere.
Guida pubblicata originariamente sul blog di VPS GREEN, il servizio VPS sul nostro cloud privato green.