Tempo di lettura stimato: 11 minuti

7 misure di sicurezza per proteggere un server

5 marzo 2015 Sicurezza Firewall Networking VPN

Introduzione

Durante il setup delle infrastrutture, rendere operative le applicazioni sarà spesso la vostra preoccupazione principale. Tuttavia, rendere le applicazioni correttamente funzionanti senza far fronte alle esigenze di sicurezza della vostra infrastruttura, prima o poi potrebbe avere conseguenze devastanti.

In questa guida parleremo di alcune procedure di sicurezza di base, ottime da mettere in atto prima o durante la configurazione delle applicazioni.

Chiavi SSH

Le chiavi SSH sono una coppia di chiavi crittografiche che possono essere utilizzate per l’autenticazione ad un server SSH quale alternativa al login basato su password. Prima dell’autenticazione viene creata una coppia di chiavi pubblica e privata. La chiave privata viene tenuta segreta e al sicuro da parte dell’utente, mentre la chiave pubblica può essere condivisa con chiunque.

7 misure di sicurezza per proteggere un server

Per configurare l’autenticazione SSH con chiave è necessario inserire sul server la chiave pubblica dell’utente in una directory speciale. Quando l’utente si connette al server, il server chiederà la conferma che il client ha la chiave privata associata. Il client SSH utilizza la chiave privata per rispondere in un modo che dimostri il possesso della chiave privata. Il server poi lascia che il client si colleghi senza password. Per ulteriori informazioni su come funzionano le chiavi SSH controllate questo articolo.

Come fa a migliorare la sicurezza?

Con SSH, qualsiasi tipo di autenticazione, tra cui l’autenticazione della password, è completamente cifrata. Tuttavia, quando sono consentiti gli accessi basati su password, gli utenti malintenzionati possono tentare di accedere più volte al server. Con l’attuale potenza di calcolo è possibile ottenere l’accesso ad un server automatizzando questi tentativi provando, combinazione dopo combinazione, fino a trovare la password giusta.

Impostare l’autenticazione SSH con chiave consente di disabilitare l’autenticazione basata su password. Le chiavi SSH hanno generalmente molti più bit di dati rispetto ad una password, il che significa che ci sono decisamente più combinazioni possibili che un utente malintenzionato dovrebbe esaminare. Molti algoritmi SSH a chiave sono considerati inattaccabili dalla potenza di calcolo moderna semplicemente perché richiederebbero troppo tempo per poter esaminare tutte le possibili corrispondenze.

Quanto è difficile da implementare?

Le chiavi SSH sono molto facili da installare e sono il metodo consigliato per accedere ad un qualsiasi ambiente server Linux o Unix da remoto. Una coppia di chiavi SSH può essere generata sul vostro computer ed è possibile trasferire la chiave pubblica sul server in pochi minuti.

Per ulteriori informazioni su come impostare le chiavi, seguite questa guida . Se credete che l’autenticazione tramite password sia ancora necessaria, considerate l’implementazione sui server di una soluzione come fail2ban per limitare i tentativi di indovinare le password.

Firewall

Un firewall è un software (o hardware) che controlla quali servizi sono esposti alla rete. Questo significa bloccare o limitare l’accesso a tutte le porte ad eccezione di quelle che dovrebbero essere pubblicamente disponibili.

7 misure di sicurezza per proteggere un server

Su un tipico server, di default possono essere in esecuzione un certo numero di servizi. Questi possono essere classificati nei seguenti gruppi:

  • Servizi pubblici, a cui può accedere chiunque su internet, spesso in forma anonima. Un buon esempio è un server web che può consentire l’accesso al proprio sito.
  • Servizi privati, che dovrebbero essere accessibili solo da un gruppo selezionato di client autorizzati o da determinate aree. Un esempio può essere un pannello di controllo del database.
  • Servizi interni, che devono essere accessibili solo dall’interno del server stesso, senza esporre il servizio al mondo esterno. Ad esempio un database che accetta solo connessioni locali.

I firewall possono garantire che l’accesso al software sia limitato secondo le categorie di cui sopra. I servizi pubblici possono essere lasciati aperti e disponibili a tutti ed i servizi privati possono essere limitati in base a vari criteri. I servizi interni possono essere realizzati per essere completamente inaccessibili al mondo esterno. Per le porte che non vengono utilizzate, l’accesso è completamente bloccato nella maggior parte delle configurazioni.

Come fa a migliorare la sicurezza?

I firewall sono una parte essenziale di qualsiasi configurazione di un server. Anche se i vostri stessi servizi implementano funzioni di sicurezza o sono limitati alle interfacce sulle quali si desidera che questi vengano eseguiti, un firewall serve come ulteriore livello di protezione.

Un firewall configurato correttamente limiterà l’accesso a tutto tranne che ai servizi specifici che occorre rimangano aperti. Esporre solo pochi software riduce l’area di attacco del server, limitando i componenti che sono vulnerabili agli exploit.

Quanto è difficile da implementare?

Ci sono molti firewall disponibili per i sistemi Linux, alcuni dei quali hanno una curva di apprendimento più ripida rispetto ad altri. In generale, comunque, il setup del firewall dovrebbe richiedere solo pochi minuti e c’è bisogno di farlo solo durante la configurazione iniziale del server o quando si apportano modifiche a quei servizi.

Una semplice alternativa è il firewall UFW. Altre possibilità da poter usare sono iptables o il firewall CSF.

VPN e Private Networking

Le reti private (private networking) sono reti che sono disponibili solo per determinati server o utenti. Per esempio, su DigitalOcean, il private networking è disponibile in alcune regioni quale vasta rete di data center.

Una VPN o rete privata virtuale è un modo per creare connessioni sicure tra computer remoti e per mostrare la connessione come se si trattasse di una rete privata locale. Ciò fornisce un modo per configurare i servizi come se fossero su una rete privata e per connettere i server remoti su connessioni sicure.

7 misure di sicurezza per proteggere un server

Come fa a migliorare la sicurezza?

L’utilizzo di reti private invece che di reti pubbliche per le comunicazioni interne è quasi sempre preferibile quando si può scegliere tra le due. Tuttavia, dato che gli altri utenti all’interno del data center sono in grado di accedere a questa stessa rete, si devono ancora implementare ulteriori misure per proteggere le comunicazioni tra i server.

L’utilizzo di una VPN è, di fatto, un modo per mappare una rete privata che può essere vista solo dai vostri server. La comunicazione sarà completamente privata e sicura. Le altre applicazioni possono essere configurate per far passare il proprio traffico attraverso l’interfaccia virtuale che il software VPN espone. In questo modo, solo i servizi che sono destinati ad essere usati da parte dei client sull’internet pubblica hanno bisogno di essere esposti sulla rete pubblica.

Quanto è difficile da implementare?

L’utilizzo delle reti private in un datacenter che ha questa capacità è semplice quanto abilitare l’interfaccia durante la creazione del server e la configurazione delle applicazioni e del firewall per poter utilizzare la rete privata. Tenete a mente che le reti private di un grosso data center condividono lo spazio con altri server che usano la stessa rete.

Per quanto riguarda le VPN, la configurazione iniziale è un po’ più complessa, ma la maggiore sicurezza è utile per la maggior parte dei casi d’uso. Su una rete VPN ogni server deve installare e configurare i dati di sicurezza e di configurazione condivisi, necessari per stabilire la connessione sicura. Dopo che la VPN è operativa, le applicazioni devono essere configurate per utilizzare il tunnel VPN. Per imparare a fare il setup di una VPN per collegare in modo sicuro la vostra infrastruttura, date un’occhiata al tutorial di OpenVPN.

Infrastruttura a chiave pubblica e crittografia SSL/TLS

Per infrastruttura a chiave pubblica, o PKI (Public Key Infrastructure), ci si riferisce ad un sistema che è stato progettato per creare, gestire e convalidare i certificati al fine di identificare gli individui e cifrare le comunicazioni. I certificati SSL o TLS possono essere utilizzati per autenticare entità diverse tra loro. Dopo l’autenticazione, possono essere utilizzati anche per la comunicazione cifrata che è stata avviata.

7 misure di sicurezza per proteggere un server

Come fa a migliorare la sicurezza?

Stabilire una autorità di certificazione e di gestione dei certificati per i server permette ad ogni entità all’interno dell’infrastruttura di convalidare l’identità di altri membri e di cifrare il loro traffico. Questo può prevenire gli attacchi man-in-the-middle nei quali un utente malintenzionato imita un server dell’infrastruttura per intercettarne il traffico.

Ogni server può essere configurato per fidarsi di un’autorità di certificazione centralizzata. In seguito, a qualsiasi certificato firmato da un’autorità può essere implicitamente data fiducia (trusted). Se le applicazioni ed i protocolli che si usano per comunicare supportano la crittografia TLS/SSL, questo è un modo per crittografare il sistema senza il sovraccarico dato da un tunnel VPN (che internamente utilizza spesso il protocollo SSL).

Quanto è difficile da implementare?

La configurazione di un’autorità di certificazione e il setup del resto della infrastruttura a chiave pubblica può comportare un po’ di sforzo iniziale. Inoltre, gestire i certificati può portare a delle responsabilità amministrative aggiuntive nel caso in cui i nuovi certificati debbano essere creati, firmati o revocati.

Per molti utenti, l’implementazione di una infrastruttura a chiave pubblica vera e propria avrà più senso al crescere delle proprie esigenze infrastrutturali. La protezione delle comunicazioni tra le varie componenti utilizzando una VPN può essere una buona soluzione temporanea fino a quando si raggiunge un punto in cui una PKI vale i costi di gestione aggiuntivi.

Verifica dei servizi (audit)

Fino ad ora abbiamo discusso di alcune tecnologie che potete implementare per migliorare la vostra sicurezza. Tuttavia, una grande parte della sicurezza sta nell’analizzare i sistemi, la comprensione delle aree di attacco disponibili e l’isolamento dei componenti nel miglior modo possibile.

Un servizio di audit è un processo di scoperta di quali servizi sono in esecuzione sui server della propria infrastruttura. Il sistema operativo, di default, spesso è configurato per eseguire alcuni servizi al boot. L’installazione di software aggiuntivo a volte può far installare dipendenze che sono anchesse avviate al boot.

7 misure di sicurezza per proteggere un server

Un servizio di audit è un modo per conoscere quali servizi sono in esecuzione sul sistema, quali porte stanno usando per la comunicazione e quali protocolli sono ammessi. Queste informazioni possono aiutare a configurare le impostazioni del firewall.

Come fa ad aumentare la sicurezza?

I server fanno partire molti processi per usi interni e per gestire client esterni. Ognuno di questi processi rappresenta un’amplia area di attacco per gli utenti malintenzionati. Più servizi sono in esecuzione maggiore è la possibilità che ci sia una vulnerabilità esistente nel software che può essere accessibile.

Una volta che si ha una buona idea di quali servizi di rete sono in esecuzione sul computer, è possibile iniziare ad analizzare tali servizi. Alcune domande che ci si vorrà porre per ciascuno di essi sono:

  • Questo servizio è in esecuzione?
  • Il servizio è in esecuzione su interfacce di cui non abbiamo bisogno? Dovrebbe essere legato ad un singolo IP?
  • Le regole del firewall sono strutturate in modo da consentire di far passare il traffico lecito a questo servizio?
  • Le regole firewall bloccano il traffico che non è lecito?
  • C’è un metodo per la ricezione di segnalazioni di sicurezza sulle vulnerabilità per ciascuno di questi servizi?

Questo tipo di servizio di audit dovrebbe essere una pratica standard per la configurazione di ogni nuovo server nell’infrastruttura.

Quanto è difficile da implementare?

Fare un semplice servizio di audit è incredibilmente semplice. Si possono scoprire quali servizi sono in ascolto sulle porte di ogni interfaccia usando il comando netstat. Un semplice esempio che mostra il nome del programma, il PID e gli indirizzi che sono in ascolto del traffico TCP e UDP è:

sudo netstat -plunt

Si vedrà un output che assomiglia a questo:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State   PID/Program name
tcp        0      0 0.0.0.0:22    0.0.0.0:*       LISTEN  887/sshd
tcp        0      0 0.0.0.0:80    0.0.0.0:*       LISTEN  919/nginx
tcp6       0      0 :::22         :::*            LISTEN  887/sshd
tcp6       0      0 :::80         :::*            LISTEN  919/nginx

Le principali colonne delle quali è necessario prestare attenzione sono Proto, Local Address e PID/Program name. Se l’indirizzo è 0.0.0.0 allora il servizio sta accettando connessioni su tutte le interfacce.

Verifica dei file e Intrusion Detection Systems

L’audit dei file è il processo di confronto dell’attuale sistema rispetto ad un backup dei file e delle caratteristiche dei file del sistema quando esso si trovava in uno stato noto e preciso. Ciò è utilizzato per rilevare quelle modifiche al sistema che possono essere state autorizzate.

7 misure di sicurezza per proteggere un server

Un sistema di rilevamento delle intrusioni, o IDS (Intrusion Detection System), è un software che controlla le attività non autorizzate di un sistema o di una rete. Molte implementazioni di IDS basate su host utilizzano l’audit dei file come metodo per verificare se il sistema è cambiato.

Come fa a migliorare la sicurezza?

In maniera similare al precedente audit a livello dei servizi, se fate davvero sul serio per garantire un sistema sicuro, è molto utile essere in grado di eseguire audit a livello di file sul vostro sistema. Questo può essere fatto periodicamente dall’amministratore o come parte di un processo automatizzato in un IDS.

Queste strategie sono alcune delle poche maniere per essere assolutamente sicuri che il vostro filesystem non sia stato alterato da qualche utente o processo. Per molte ragioni, gli intrusi spesso desiderano rimanere nascosti in modo da poter continuare ad utilizzare il server per un periodo prolungato di tempo. Potrebbero sostituire i binari con delle versioni compromesse. Fare una verifica del filesystem vi dirà se uno qualsiasi dei file è stato alterato, consentendo di essere certi dell’integrità del vostro ambiente server.

Quanto è difficile da implementare?

L’implementazione di un IDS o effettuare l’audit di file possono essere processi piuttosto intensi. La configurazione iniziale prevede la comunicazione al sistema di audit di ogni cambiamento non standard che è stato fatto al server ed ai path che devono essere esclusi (dall’audit) per creare i parametri di riferimento.

Rende inoltre più complicate le operazioni quotidane. Si complicano le procedure di aggiornamento visto che dovrete ricontrollare il sistema prima di eseguire gli aggiornamenti e quindi ricreare i parametri di riferimento dopo aver eseguito l’aggiornamento, in modo da potersi accorgere delle modifiche fatte al software. Sarà inoltre necessario scaricare i report in un’altra ubicazione, in modo che un intruso non possa modificare l’audit per coprire le proprie tracce.

Anche se questo può aumentare le vostre responsabilità amministrative, essere in grado di controllare il sistema partendo da un copia nota e precisa è uno dei pochi modi per garantire che i file non siano stati modificati a vostra insaputa. Alcuni popolari sistemi di audit di file e IDS sono Tripwire e Aide.

Ambienti di esecuzione isolati

L’isolamento degli ambienti di esecuzione si riferisce a qualsiasi metodo in cui i singoli componenti vengono eseguiti all’interno di uno spazio dedicato proprio.

7 misure di sicurezza per proteggere un server

Questo può significare o separare ogni distinto componente dell’applicazione ad ogni relativo server o può riferirsi al configurare i servizi ad operare in ambienti chroot o in contenitori. Il livello di isolamento dipende in larga misura dai requisiti della vostra applicazione e dalle realtà della vostra infrastruttura.

Come fa a migliorare la sicurezza?

Isolare i processi in ambienti di esecuzione individuali aumenta la capacità di isolare eventuali problemi di sicurezza che possono sorgere. In modo simile a come le paratie e gli scomparti possono aiutare a contenere le brecce nella carena delle navi, separare ciascun componente può limitare l’accesso che un intruso ha su altre parti della vostra infrastruttura.

Quanto è difficile da implementare?

A seconda del tipo di contenimento scelto, isolare le applicazioni può essere relativamente semplice. Tramite l’impacchettamento dei singoli componenti in contenitori è possibile ottenere rapidamente un certo grado di isolamento, ma si noti che Docker non considera la sua “containerizzazione” una funzionalità di sicurezza.

Anche il setup di un ambiente chroot per ogni porzione può fornire un certo livello di isolamento, ma anche questo non è un metodo infallibile di isolamento visto che talvolta ci sono modi per uscire da un ambiente chroot. Spostare i componenti su macchine dedicate è il miglior livello di isolamento e, in molti casi, può essere il più semplice, ma potrebbe essere più costoso vista la necessità di macchine aggiuntive.

Conclusioni

Le strategie di cui sopra sono solo alcuni dei miglioramenti che si possono fare per migliorare la sicurezza dei sistemi. È importante riconoscere che, meglio tardi che mai, le misure di sicurezza diminuiscono nella loro efficacia tanto più si è aspettato nel metterle in atto. La sicurezza non può essere un ripensamento e deve essere attuata fin dall’inizio a fianco dei servizi e delle applicazioni che si stanno fornendo.

Autore: Justin Ellingwood

Traduzione dell’articolo: https://www.digitalocean.com/community/tutorials/7-security-measures-to-protect-your-servers Copyright © 2016 DigitalOcean™ Inc.

 

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*