Come mettere in sicurezza un server virtuale Linux sul cloud

Alcuni consigli generali per mettere in sicurezza un server cloud Linux: semplificare le operazioni e automatizzare alcuni processi con il Cloud di Aruba.

Sia che si realizzi un vero e proprio data center personale sul cloud, sia che si decida di configurare un unico server virtuale, gli aspetti legati alla sicurezza non possono e non devono passare in secondo piano.
Limitarsi a installare le applicazioni web senza affrontare le problematiche relative alla sicurezza del server virtuale sul cloud può avere conseguenze devastanti, anche nel breve periodo.

In questo articolo ci proponiamo di offrire alcuni suggerimenti per mettere in sicurezza un server virtuale Linux sul cloud concentrandoci sugli aspetti che contano di più e che consentono di mettere al riparo i dati conservati sulla macchina e il proprio business da qualunque rischio di aggressione da parte di terzi.

Negli articoli che abbiamo pubblicato in passato sul tema cloud abbiamo visto come creare un server cloud e, addirittura, configurare un’infrastruttura di rete virtuale – altamente personalizzabile, performante e scalabile – da adattare alle proprie esigenze di business.
Con il Cloud di Aruba è possibile creare un nuovo server cloud basato su Linux o su Windows in pochi minuti: basta accedere al pannello di controllo e scegliere le caratteristiche della macchina virtuale (che poi potranno essere liberamente modificate).
Utilizzando solo l’apposita interfaccia web, dopo qualche minuto di attesa, il server virtuale sarà immediatamente online e subito raggiungibile, grazie all’indirizzo IP pubblico statico che verrà ad esso attribuito.

Mettere in sicurezza un server cloud Linux

Una volta creato un nuovo server Linux usando l’interfaccia web del servizio Aruba Cloud, è bene porre in essere una serie di operazioni per mettere in sicurezza la macchina virtuale.

Nel caso di Aruba Cloud, il fornitore – per ciascun template scelto – indica chiaramente i servizi che vengono posti automaticamente in esecuzione dopo il primo avvio della macchina virtuale. È inoltre indicata la lista delle porte di comunicazione sulle quali è in ascolto un componente server.
Per impostazione predefinita, a meno della configurazione di un firewall, tali porte sono pubblicamente esposte e raggiungibili da qualunque client remoto.

Se l’obiettivo fosse quello di erogare esclusivamente pagine web (si pensi a un sito aziendale, a un blog, a un sito di ecommerce,…), è sensato lasciare esposte solo le porte 80 (HTTP) e 443 (HTTPS) rendendo irraggiungibili tutte le altre. Come fare? Lo vedremo più avanti.
L’importante, durante la configurazione di un server cloud, è ragionare sempre nell’ottica della riduzione della potenziale superficie d’attacco: più servizi sono esposti, maggiori sono le possibilità di subire un’aggressione.

1) Tenere aggiornato il software installato sul server Linux

La prima regola da tenere a mente consiste nel mantenere aggiornati i pacchetti software installati sulla macchina. Con CentOS si fa digitando semplicemente sudo yum update; in Debian con sudo aptitude update && sudo aptitude full-upgrade; in Ubuntu con i comandi sudo apt-get update && sudo apt-get upgrade.

In questo modo si potranno installare automaticamente tutti gli aggiornamenti che permettono di risolvere problematiche di sicurezza individuate nei vari componenti software.

2) Usare un port scanner per ottenere l’elenco delle porte aperte sull’IP pubblico

Uno dei modi migliori per verificare quali porte risultano aperte sulla macchina virtuale cloud e verificare quali sono raggiungibili da qualunque utente remoto, suggeriamo di attrezzarsi con un port scanner.
Il software migliore da utilizzare per questo tipo di operazioni è Nmap ed è disponibile sia nella versione con interfaccia grafica che in quella storica accessibile da riga di comando: Nmap, cos’è e come funziona il re dei port scanner.

Grazie alla nuova bash Linux integrata in Windows, Nmap è utilizzabile anche da riga di comando.

Da un client Linux è possibile lanciare il comando nmap -v seguito dall’indirizzo IP pubblico del server cloud appena creato.
In questo modo si possono verificare che porte che risultano aperte ed esposte.

3) Impostare un firewall

Non appena si crea un server cloud è bene chiedersi quali connessioni devono essere consentite dall’esterno e quali, viceversa, devono essere bloccate.
Per svolgere una costante azione di filtro è possibile configurare un firewall che si occuperà di monitorare il traffico in ingresso e in uscita attenendosi alle regole definite.

Se non si volessero installare altri pacchetti software, si può utilizzare iptables ovvero il firewall installato in modo predefinito in tutte le principali distribuzioni Linux.

Digitando sudo iptables -L dopo aver stabilito una connessione SSH con il server remoto, si può verificare che – per impostazione predefinita – sono permesse tutte le comunicazioni, su qualunque porta, con qualsiasi protocollo e indirizzo IP.

Se si utilizzassero indirizzi IP statici lato client, è possibile consentire la connessione su determinate porte solo da tali indirizzi rigettando tutti gli altri tentativi di collegamento.

Ad esempio le seguenti due regole indicano a iptables di accettare le connessioni solo dall’IP pubblico indicato verso la porta sulla quale è in esecuzione il server MySQL:

iptables -I INPUT -p tcp -s INDIRIZZO_IP --dport 3306 -j ACCEPT
iptables -I INPUT -p tcp -s 0.0.0.0/0 --dport 3306 -j DROP

Usando la sintassi iptables -D le regole possono essere eventualmente cancellate. Attenzione a non rimanere esclusi dalla macchina imponendo regole troppo restrittive o errate.

4) Utilizzare chiavi per l’accesso via SSH anziché le password. Proteggersi dagli attacchi brute force

Username e password sono gli strumenti abituali per effettuare l’autenticazione su qualunque servizio. Mentre una password, però, può essere talvolta oggetto di aggressione e può essere “indovinata” da parte di aggressori remoti con una serie di tentativi in rapida successione, l’accesso via SSH mediante l’utilizzo di una chiave offre maggiori garanzie.

Aruba Cloud permette di gestire le chiavi SSH direttamente in fase di creazione del server cloud: per procedere basta cliccare su Aggiungi chiave SSH e specificare la chiave pubblica generata usando il comando ssh-keygen -t rsa oppure PuTTYGen in Windows.

Collegandosi con PuTTY basterà inserire l’IP del server cloud nella schermata principale quindi portarsi nella colonna di sinistra su SSH, Auth e specificare la chiave privata generata in precedenza nel campo Private key file for authentication.

Stabilendo la connessione si dovrà inserire semplicemente root come nome utente e la coppia di chiavi pubblica/privata verrà automaticamente utilizzata.

Digitando nano /etc/ssh/sshd_config si accederà alla configurazione del server SSH.
Nel caso in cui l’editor nano non fosse presente sulla macchina basterà installarlo con yum install nano, ad esempio, nel caso di CentOS.

Impostando PasswordAuthentication no quindi salvando il file, uscendo da nano (CTRL+O, CTRL+X) quindi riavviando il daemon del server SSH con il comando systemctl restart sshd l’uso di nome utente e password per l’autenticazione via SSH non sarà più consentito.

Digitando il comando cat /var/log/secure grep 'ssh.*Invalid' in CentOS o in Red Hat oppure cat /var/log/auth.log grep 'ssh.*Invalid' si potranno monitorare eventuali tentativi di accesso via SSH non autorizzati.
Di contro, usando il comando last si può esaminare la lista dei login avvenuti con successo.

Installando un’applicazione come fail2ban (alcuni template Aruba Cloud già la utilizzano in modo predefinito) è possibile bloccare ulteriori tentativi di accesso da parte di coloro che utilizzassero tecniche di brute forcing.
Per installare il pacchetto in CentOS basta usare i comandi seguenti:

yum install epel-release
yum install fail2ban

5) Rimuovere tutti i software che non si utilizzano. Aggiornare costantemente le applicazioni web

Utilizzando i comandi previsti nelle varie distribuzioni Linux è comunque sempre bene disinstallare i pacchetti software che non si utilizzano.
Se si fossero configurate regole firewall severe, i rischi più importanti arriveranno essenzialmente dall’eventuale mancato aggiornamento delle applicazioni web usate sulla macchina cloud.

CMS come WordPress, Joomla, Drupal, Prestashop e così via devono essere mantenuti costantemente aggiornati così come gli eventuali plugin installati in tutti i software. In questi e in qualunque altra applicazione web vengono periodicamente scoperte vulnerabilità di sicurezza che possono essere corrette installando gli aggiornamenti.
Come abbiamo spiegato nell’articolo Reindirizzamenti verso siti indesiderati: quando e perché si verificano, riveste un ruolo essenziale anche la scelta dei plugin: componenti aggiuntivi che vengono raramente aggiornati dai rispettivi sviluppatori possono rappresentare la porta d’ingresso per un malintenzionato.

6) Una configurazione a prova di criminali informatici: virtual switch, firewall e server OpenVPN

Come abbiamo visto in altri articoli, il Cloud di Aruba consente di allestire un’infrastruttura cloud con la possibilità di inserirvi anche virtual switch, bilanciatori di carico, soluzioni di unified storage e così via.

Il suggerimento secondo noi migliore in assoluto consiste nel porre “davanti” al server virtuale sul cloud un virtual switch e una macchina virtuale basata su pfSense, Endian o altri prodotti simili.
Nell’articolo pfSense, come usarlo per configurare un firewall sul cloud abbiamo proprio parlato di questa configurazione.

pfSense è un firewall che integra molteplici funzionalità evolute (può agire anche come bilanciatore di carico e integra un server OpenVPN).
Anziché chiudere le porte sulla singola macchina cloud come visto in precedenza si può agire da un pannello web centralizzato che consentirà di specificare quali tipologie di traffico inoltrare al server o ai server cloud collegati a valle.

Si tratta di un approccio molto efficace e allo stesso tempo davvero semplice: tramite l’interfaccia web di pfSense si può fare in modo, ad esempio, di esporre solo le porte 80 e 443 sul server cloud collegato al virtual switch bloccando invece i tentativi di connessione su qualunque altra porta.
Configurando un server OpenVPN su pfSense si potrà così lasciare aperta, in aggiunta a quelle indicate, solo la UDP 1194: collegandosi con un client OpenVPN da qualunque dispositivo client autorizzato (in possesso dei certificati necessari), si potrà amministrare i server collegati alla propria LAN allestita sul cloud accedendo a qualunque porta e a qualsiasi servizio.
Addirittura pfSense consente di esportare i file per la configurazione automatica dei client OpenVPN.

Aruba Cloud offre un’immagine per la configurazione immediata di un firewall pfSense: con pochi passaggi si potrà così proteggere il singolo server cloud o una batteria di essi.

Ti consigliamo anche

Link copiato negli appunti