La configurazione giusta per rendere sicuro il server
Per godere della massima libertà di configurazione, la soluzione ottimale è gestire autonomamente un proprio server. Un’alternativa adeguata è fornita dai root server dedicati che sono disponibili presso molti provider, dietro pagamento di un costo mensile, e garantiscono l’accesso all’account di root. Proprio per via di questa autorizzazione il cliente si deve far carico dei passaggi di gestione elementari, come l’installazione, la strutturazione e la gestione del server, come sarebbe il caso in una variante self-hosted. Il provider si occupa solitamente in un simile pacchetto server solo della prima installazione del sistema operativo, se richiesto.
Indipendentemente dalla soluzione di hosting scelta, per la gestione e l’utilizzo di un account di root si dovrebbe procedere in maniera cauta e responsabile. Soprattutto il tema sicurezza gioca in questo caso un ruolo importante: infatti, da una parte un comportamento errato si dimostrerà particolarmente dannoso se si dispone dei permessi di root, dall’altra, in caso di procedura corretta, si può realizzare la base perfetta per un server stabile, sicuro e performante. Ad esempio per rendere sicuro un server dedicato e proteggerlo dagli attacchi esterni, il cambiamento obbligatorio della password è solo una delle tante misure necessarie con le quali è possibile aumentare la sicurezza del server.
Prova il nostro VPS. I primi 30 giorni sono in omaggio e se allo scadere del periodo di prova non sarai convinto, ti rimborseremo tutte le spese sostenute.
Installazione minimale e password sicura
Prima ancora di iniziare a prendere i provvedimenti veri e propri per configurare il vostro server in modo sicuro, potete già influenzare il successivo potenziale di sicurezza del vostro progetto web. Indipendentemente dal fatto che abbiate scelto un sistema Linux o Windows, al momento dell’installazione vale il seguente principio: un server dovrebbe contenere solo quei software necessari per lo svolgimento dei suoi compiti. Questo perché ogni applicazione installata rappresenta un potenziale rischio per la sicurezza e può riflettersi negativamente sulla performance. Per offrire agli hacker il minor numero possibile di punti di attacco, dovreste perciò installare o attivare i componenti di sistema necessari e ricorrere solo a software verificati di terze parti. Subito dopo l’installazione dovreste impostare la password di root (sistemi Linux). Di norma non è definito nessun valore ed è così bloccato anche l’account amministratore fino a quando non inserite una password. Solitamente è il sistema operativo stesso a forzarvi automaticamente dopo l’installazione a creare un account utente comprensivo di password, che fungerà d’ora in avanti da accesso di root. Se il vostro server si trova presso un provider e disponete quindi di un login di root preesistente, dovete cambiare la password. Così vi loggate tramite SSH (da un sistema Linux) o PuTTY (da un sistema Windows) sul vostro server e inserite il seguente comando nel rispettivo terminale:
passwd
Successivamente potete definire la vostra password che dovete ancora verificare. Fate attenzione a scegliere una password sufficientemente lunga e di non ricorrere solo a lettere, ma anche a caratteri speciali e numeri. Inoltre si consiglia di salvare la password con un password manager, per averla sempre a disposizione nel caso ve la dimenticaste. Ora cercate di instaurare una connessione con il nuovo login di root. Se funziona come previsto, potete interrompere la connessione SSH utilizzata all’inizio.
Qualora per il vostro sistema sia già stata impostata una password root che non conoscete, potete cambiarla nella modalità recovery. Questa modalità si avvia tenendo premuto il pulsante shift durante il boot. Alla voce del menu “root” avviate il comando della riga di comando “root”, agendo automaticamente come amministratore. Potete così cambiare la password e scegliere quella che volete.
Modifica della porta SSH
Per l’accesso al server tramite SSH è prevista di default la porta 22, inserita automaticamente anche nel caso in cui abbiate installato il vostro sistema da zero. Conseguentemente i criminali che sono alla ricerca di sistemi permeabili avviano i loro tentativi di attacco, cioè dei tentativi di login automatizzati, soprattutto tramite questa porta. Definendo semplicemente un’altra porta per le connessioni remote crittografate, minimizzate notevolmente il rischio di un accesso indesiderato. Perciò dovete solo aprire il file di configurazione SSH sshd_config con un qualsiasi editor di testo. Il comando nel seguente esempio di codice apre il file con l’editor standard di Linux, nano:
nano /etc/ssh/sshd_config
Cercate la riga giusta e sostituite il numero della porta 22 con un numero a vostra scelta. Ricordatevi però che ci sono diverse altre porte standard per altri servizi (ad esempio la porta 80 per il protocollo HTTP) che, se possibile, non dovreste utilizzare per questo scopo. Perciò date prima di tutto uno sguardo alla lista delle porte standard, gestita dalla IANA (Internet Assigned Numbers Authority) e consultabile sul sito ufficiale. In alternativa potete anche vedere la lista sul file /etc/services.
Prima che le modifiche nel file sshd_config risultino attive, è necessario riavviare il servizio SSH. Su Debian ciò avviene con il comando “/etc/init.d/ssh restart“, mentre se siete un utente Ubuntu riavviate il servizio tramite “service ssh restart".
Disattivare il login SSH per gli utenti root
Per rendere sicuro il vostro server, si consiglia di bloccare sempre il login SSH diretto per l’account di root, altrimenti un hacker, che è entrato in possesso della password, potrebbe accedere al server da remoto grazie a questo account. Prima di poter intraprendere queste misure, oltre all’utente root, avete bisogno però di almeno un altro account utente che si può collegare con il server per non essere bloccati completamente dal sistema. Se non avete ancora creato un profilo utente corrispondente, realizzatelo con il seguente comando:
useradd -g users -d /home/utente1 -m -s /bin/bash utente1
In questo modo generate l’account utente utente1 che viene aggiunto al gruppo users (-g). Inoltre questo profilo utente viene assegnato alla cartella home /home/utente1 (-d). Come shell standard il comando prevede la Bash shell (-s /bin/bash). Infine definite una password sicura per questo nuovo login:
passwd utente1
Ora testate se il login con l’account utente creato funziona correttamente e proseguite solo in questo caso con il vero proposito, cioè il blocco dell’account root. Per questo vi serve di nuovo il file di configurazione sshd_config che aprite con un editor a vostra scelta. Cercate la voce “PermitRootLogin yes“ e sostituitela tramite “PermitRootLogin no“. Dopo un riavvio del servizio SSH tramite riga di comando
/etc/init.d/ssh restart (in alternativa: service ssh restart)
L’accesso remoto per l’account di root non è più possibile. Vi loggate con il profilo utente creato e, qualora vi serva ancora una volta, passate all’account di root quando volete (dopo il login) con il comando:
su
Tramite la riga AllowGroups potete inoltre stabilire nel file di configurazione quale utente si può connettere al server tramite SSH. Per questo motivo create semplicemente un gruppo (addgroup) e vi aggiungete l’utente desiderato (adduser). Infine sostituite il nome del gruppo scelto nel file sshd_config (ad esempio AllowGroups ssh_utente).
Un’alternativa confortevole al blocco del login di root è data dall’opzione che impedisce il login utente tramite password e ripiega, al suo posto, sull’autentificazione della chiave pubblica con le chiavi SSH.
Notifica per e-mail con l’avviso dei login SSH
Come sempre, quando procedete dettagliatamente per rendere sicuro l’accesso SSH al vostro server, dovreste tenere a tutti i costi sotto controllo tutte le attività remote. In questo modo potete constatare se avete configurato correttamente il servizio SSH del vostro server. Allo stesso tempo, grazie ad un buon monitoring delle connessioni stabilite, venite avvisati tempestivamente di accessi indesiderati e siete in grado di adottare le relative contromisure. Per questo basta un semplice script shell che invia automaticamente un’e-mail di notifica al vostro indirizzo ad ogni login da remoto andato a buon fine sul vostro server.
Potete creare da soli facilmente uno script di questo tipo (qui: /opt/shell-login.sh), che deve solo contenere il seguente codice:
#!/bin/bash
echo "Login su $(nomehost) il $(date +%Y-%m-%d) alle $(date +%H:%M)"
echo "Utente: $USER"
echo
finger
Infine è necessario aggiungere la seguente riga nel file /etc/profile:
/opt/shell-login.sh | mailx -s "Login SSH su IL-VOSTRO-NOMEHOST" indirizzoemail@example.com
Con questa voce vi assicurate che lo script venga eseguito e che in questo caso si reagisca a un login andato a buon fine con l’invio di un’e-mail di notifica all’indirizzo desiderato. La premessa è che venga assegnato allo script il permesso 755, cosa che ottenete con il seguente comando:
chmod 755 /opt/shell-login.sh
Se un utente instaura una connessione SSH con un programma come WinSCP ma non porta a termine il login, lo script shell qui proposto non invia nessuna e-mail!
Blocco delle porte non utilizzate
Le porte aperte non rappresentano, in generale, nessun particolare rischio per la sicurezza. Visto che servono per la comunicazione con i singoli servizi e applicazioni, è persino strettamente necessario che certe porte siano attivate di default, ad esempio la porta 80 e 443 per le connessioni HTTP e HTTPS o la porta SSH scelta da voi. Se siete riusciti a realizzare un’installazione di sistema minimale e a ricorrere solo a poche applicazioni di terze parti, il numero delle altre porte necessarie sarà chiaro. Queste interfacce aperte diventano un rischio solo quando i programmi che rispondono presentano delle falle di sicurezza e i criminali volgono questa situazione a proprio vantaggio. Con un numero crescente di applicazioni aumenta questo pericolo potenziale. Per questo motivo è sensato proteggere il vostro server da attacchi di questo tipo, bloccando tutte le porte aperte non necessarie. Quasi tutti i sistemi operativi comuni hanno perciò installato di default lo strumento adatto con il software per il filtraggio dei pacchetti, iptables. Grazie al tool create delle regole fisse per la regolazione del traffico dati, dove è possibile impostare anche la definizione necessaria di porte desiderate e non desiderate. Trovate una piccola introduzione sul tema nel nostro tutorial.
Aggiornamenti software regolari
Nessun software è generalmente immune dalle falle di sicurezza citate nel paragrafo precedente. Tuttavia è necessario che questi errori di programmazione sfruttabili dai cyber criminali, vengano prima scoperti e solo allora i malintenzionati potranno iniziare un attacco. Solitamente però con la pubblicazione degli update si risolvono in breve tempo le falle di cui si è venuti a conoscenza nel frattempo. Se vi informate costantemente sugli aggiornamenti del sistema operativo e i programmi installati, procurandovi subito i nuovi update, vi assicurate così la migliore protezione per il vostro server. Quasi tutti i sistemi dei server consentono inoltre di scaricare e installare gli aggiornamenti importanti per la sicurezza anche automaticamente in background.
Se, ad esempio, volete rendere sicuro un server Windows tramite update automatici, avete la possibilità nella sezione “Windows Update” di stabilire delle linee guida concrete per il processo di aggiornamento. In questo modo configurate quando e con quale frequenza si devono ricercare gli update, se gli aggiornamenti trovati devono essere subito installati e quando infine il sistema deve essere riavviato. Per i sistemi Linux esistono script specifici come apt-listchanges o apticron che vi informano giornalmente sui nuovi pacchetti software disponibili e li scaricano. Infine altri script come unattended-upgrades si fanno carico dell’installazione automatica.
Assicuratevi che anche nel caso di un processo di aggiornamento automatizzato, manteniate il controllo sugli aggiornamenti fatti. In questo modo potete comprendere meglio gli errori che compaiono, nell’ambito del processo di update, e reagirvi conseguentemente.
Proteggere i server Windows e Linux contro gli attacchi brute force
Essenzialmente gli hacker che vogliono accedere al vostro server, e quindi alle applicazioni in funzione, hanno diverse opzioni per farlo. Uno dei metodi di attacco più facili e utilizzati maggiormente è il così chiamato metodo forza bruta. Con questa tecnica l’hacker cerca di ottenere le password con l’aiuto di un tool che prova diverse possibilità di login una dietro l’altra. Quindi più siete stati scrupolosi nella scelta delle vostre password, più è improbabile che questo metodo abbia successo. Specialmente se offrite un servizio a cui è possibile registrarsi tramite login, dovete però partire dal presupposto che non tutti gli utenti procedono in modo altrettanto scrupoloso e cauto, come sarebbe necessario. Per una protezione contro attacchi simili per fortuna non serve nessun software complesso e costoso: visto che ogni tentativo di login viene registrato dal vostro server, risposto e salvato nei file di log, possono essere di aiuto dei semplici tool di analisi. Fail2ban (sistemi Linux/POSIX) o RdpGuard (Windows) verificano i file di log rilevanti, riconoscono i comportamenti insoliti e bloccano l’indirizzo IP di utenti sospetti. Così potete impostare in modo personalizzato dopo quanti tentativi errati entra in azione il blocco o per quanto tempo deve durare.
Per permettere di stabilire una connessione con il vostro server, potete anche andare oltre e configurare un’autentificazione a due fattori, così da rendere ancora più sicuro il login. Con questo procedimento è necessario oltre all’inserimento della password un altro componente per il login che è a disposizione solo dell’utente (ad esempio smartphone, smart card o un codice TAN).
Configurare il server in modo sicuro: basarsi sin dall’inizio su strumenti di monitoring
Se volete rendere sicuro un server, le misure elencate hanno senza dubbio un grande valore contro le avversità esterne. È però ugualmente importante occuparsi del fatto che la combinazione di hardware e software funzioni come previsto. In questo caso non si tratta affatto di azioni una tantum che terminano dopo il corretto avvio del vostro ambiente server, ma piuttosto di un compito di lunga durata, che non dovreste mai perdere di vista. In presenza di un elevato numero di diversi processi di sistema è ovviamente più facile a dirsi che a farsi, perciò dovreste ricorrere sin dall’inizio a tool di aiuto che controllino tutti i processi sul vostro server e che suonino l’allarme in caso si verifichino eventi strani. Un programma di questo tipo, semplice e veloce da configurare, è Monit che può essere installato facilmente su molte distribuzioni Linux tramite il gestore di pacchetti. L’applicazione open source (con licenza GNU-AGPL) osserva dopo l’avvio processi, file, cloud, host, programmi o script selezionati. Si possono controllare anche le risorse del sistema, come la CPU, la RAM e l’utilizzo complessivo del sistema. Nel file di configurazione di Monit potete definire i valori e gli eventi che prevedono l’invio di un avviso per e-mail. Se avete bisogno di più dettagli, si consiglia invece il software di monitoring Nagios. Anche se risulta più complesso, il core del programma è open source, oltre che essere ampliabile tramite diversi plug-in. Inoltre è possibile l’uso su una piattaforma Windows ricorrendo a una macchina virtuale.
Fidarsi è bene, ma i backup sono ancora meglio
Con le proposte di configurazione consigliate aumentate considerevolmente la sicurezza del vostro server. Le diverse impostazioni per il processo di login e la limitazione dell’account di root conferiscono al vostro server uno standard di sicurezza molto elevato, insieme ad aggiornamenti frequenti, monitoring tool e a un software per la sicurezza obbligatorio. Tuttavia, anche la migliore configurazione e una gestione scrupolosa non garantiscono una protezione al cento per cento del server. Gli errori dei programmi, i malfunzionamenti dell’hardware o propri sbagli portano facilmente, nel peggiore dei casi, alla perdita di dati. Un altro pilastro fondamentale del vostro sistema di sicurezza dovrebbe perciò essere un’adeguata strategia di backup che vi consenta di ripristinare i file corrispondenti, qualora si verifichi un caso simile. Ai tool efficaci che vi supportano non solo al momento della creazione, ma anche durante il ripristino della copia di backup, non manca proprio niente: un’applicazione gratuita che deve essere nominata a questo punto è il programma di sincronizzazione rsync che prende il nome dall’omonimo protocollo ed è disponibile in diverse varianti per quasi tutte le piattaforme comuni (macOS, Windows, Linux). Questo tool mantiene la copia dei vostri dati del server aggiornati, apportando tutte le modifiche fatte all’originale in tempo reale. Oltre a un backup generale del server, anche la messa in sicurezza del/dei database rientra infine tra i passaggi obbligatori.
Per garantire una protezione di backup il più possibile sicura, è preferibile che la cartella di backup si trovi su un supporto di memoria esterno (disco fisso portatile, un altro server, ecc.) e non sul server che volete mettere in sicurezza.