Quando acquistiamo un server VPS o finiamo di configurare una VM con Linux, la sicurezza è il primo passo fondamentale. In questa guida completa, vedremo come proteggere il tuo sistema riducendo la superficie d’attacco con applicativi leggeri e configurazioni mirate.


Utente sicuro con privilegi di amministratore

Utilizzare costantemente l’utente root è come guidare un’auto senza cintura di sicurezza, un solo errore (come un rm -rf nella cartella sbagliata) e il sistema è compromesso. Il primo passo per il nostro hardening è creare un utente standard con poteri amministrativi limitati.

Installazione di “sudo” e creazione dell’utente

Sudo (abbreviazione di super user do, ovvero esegui come super utente) è un programma per sistemi operativi Unix / Unix-like che consente agli utenti autorizzati di eseguire i comandi con i privilegi di un altro utente, solitamente utente root ovvero amministratore. Prima di procedere dobbiamo assicurarci di essere “loggati” con l’utente root quindi dal terminale lanciamo i seguenti comandi:

apt update && apt install sudo -y

A questo punto possiamo procedere con la creazione del nuovo utente (nel caso specifico di questa guida l’utente verrà chiamato giuseppe ricorda di cambiarlo con quello che preferisci), dal terminale:

adduser giuseppe

Impostiamo una password robusta per l’ utente e confermiamo con il tasto invio. (Non è obbligatorio inserire le altre informazioni richieste, andiamo avanti digitando il tasto invio ed infine confermiamo che tutte le informazioni sono corrette con Y).

Adesso diamo il comando per privilegiare anche l’utente appena creato nei “sudoer” ovvero utenti con privilegi di amministratore:

usermod -aG sudo giuseppe

SSH (Secure Shell)

Secure Shell (in gergo SSH) è un protocollo di rete che consente l’accesso remoto tramite una connessione crittografata, fornisce un’autenticazione robusta e supporta l’accesso remoto sicuro, l’esecuzione di comandi, il trasferimento di file, il controllo degli accessi, l’inoltro TCP/IP, ecc. E’ lo standard per l’amministrazione remota, ma la classica password è un punto debole, può essere indovinata o colpita da attacchi automatizzati. L’utilizzo di una coppia di chiavi crittografiche (pubblica e privata) è il metodo più sicuro per autenticarsi.

Generazione della coppia di chiavi (Windows)

Per generare una coppia di chiavi (pubblica e privata) sul nostro PC Windows utilizzeremo Puttygen, quindi procediamo con il download a seconda dell’architettura che usiamo 64-bit x86 o 32-bit x86, a fine download apriamo il programma (non ci sarà bisogno di installazione) ed avremo una schermata simile a questa:

Clicchiamo adesso sul pulsante (situato a destra) “Generate” e successivamente spostiamo continuamente il cursore del mouse all’interno della finestra fino al completamento della barra. Alla fine della procedura avremo una schermata così:

Assegniamo una password alla chiave (nell’apposito box Key passphrase) e confermiamola in basso e clicchiamo sui due pulsanti “Save public key” e “Save private key”.

Se possibile salviamo le chiavi su una chiavetta removibile per avere più sicurezza.

A questo punto ci basterà copiare la chiave pubblica (cliccando con il tasto destro sulla schermata Public key for pasting into OpenSSH authorized_keys file):

Generazione della coppia di chiavi (macOS e Linux)

Per generare una coppia di chiavi (pubblica e privata) sul nostro PC (macOS o Linux) dobbiamo per prima cosa aprire il terminale e digitare il seguente comando:

ssh-keygen -t rsa -b 2048

Quando richiesto di inserire una destinazione dove salvare le chiavi, premiamo invio per utilizzare la posizione predefinita, assegniamo una password alla chiave e confermiamola successivamente, alla fine dell’operazione avremo una schermata simile:

A questo punto dobbiamo copiare la chiave pubblica, per farlo sempre dal terminale digitiamo:

cat ~/.ssh/id_rsa.pub

Il terminale ci farà vedere la nostra chiave pubblica, ci basterà copiare dal punto ssh-rsa fino alla fine:

Importare la chiave pubblica sul server

Una volta generate le chiavi (pubblica e privata) all’interno del nostro PC, dobbiamo andare a comunicare al nostro server la chiave pubblica. Per farlo accediamo tramite SSH, ed una volta dentro il server con l’utente giuseppe creiamo la cartella ssh:

mkdir .ssh

Limitiamo i permessi per lettura, scrittura ed esecuzione solo all’utente giuseppe:

chmod 700 .ssh

Adesso dobbiamo creare un file chiamato “authorized_keys” dove incollare le informazioni della chiave pubblica:

nano .ssh/authorized_keys
  • Per Windows, si deve incollare il contenuto presente su Puttygen (vedi qui)
  • Per macOS e/o Linux, si deve incollare il contenuto presente nella chiave pubblica generata (vedi qui)

Salviamo il file premendo la combinazione di tasti CTRL+X e poi “Y” per confermare il salvataggio. Andiamo adesso a limitare i permessi di lettura e scrittura solo per l’utente giuseppe:

chmod 600 .ssh/authorized_keys

Prima di uscire dal terminale effettuiamo una connessione con la chiave privata, se la connessione ha esito positivo possiamo procedere allo step successivo.

Configurazioni di sicurezza sshd

Una volta salvata la chiave pubblica e testata, andiamo ad eliminare l’accesso tramite SSH per l’utente “root” ed a disabilitare l’accesso per gli utenti con password, andiamo quindi a creare un file “custom” nelle configurazioni ssh, da terminale:

sudo nano /etc/ssh/sshd_config.d/custom.conf

Aggiungiamo il seguente contenuto:

PermitRootLogin no
UsePAM no
PasswordAuthentication no

Salviamo il file premendo la combinazione di tasti CTRL+X e poi “Y” per confermare il salvataggio e successivamente lanciamo il comando:

sudo sshd -t

Se non il terminale non ci fa vedere alcun output vuol dire che la config va bene. Se invece vediamo qualcosa del tipo /etc/ssh/sshd_config line XX: unsupported option "XXX" ciò significa che qualcosa non va, ci basterà eliminare il il file precedente e riscriverlo.

Adesso riavviamo il servizio SSH per applicare le modifiche:

sudo systemctl restart sshd

Usciamo digitando exit o logout e ri-effettuiamo nuovamente l’accesso.


Uncomplicated Firewall (UFW)

Un firewall controlla il tipo di traffico esterno accettato dal computer e quali applicazioni possono inviare dati. Per impostazione predefinita, molte porte di rete sono aperte e in ascolto delle connessioni in entrata. La chiusura delle porte non necessarie può mitigare molte potenziali vulnerabilità del sistema.

Per prima cosa, installiamo “ufw” sul nostro server, quindi nel terminale digitiamo:

sudo apt-get install ufw -y

Attendiamo il completamento dell’installazione e verifichiamo con il comando:

sudo ufw version

A video riceveremo una risposta simile a questa:

Andiamo a creare la prima regola, ovvero consentiamo solo la connessione ad SSH in entrata, digitiamo:

sudo ufw allow 22/tcp comment 'SSH'

Riceveremo questa risposta a video:

Adesso dobbiamo abilitare “UFW” affinché le modifiche apportate abbiano effetto, quando il prompt mostra "Command may disrupt existing ssh connections. Proceed with operation (y|n)?", premere "y" ed invio:

sudo ufw enable

A video riceveremo una risposta simile a questa:

Per essere sicuri che “UFW” sia attivo ed abilitato lanciamo il comando:

sudo ufw status verbose

A video riceveremo una risposta simile:


Fail2Ban

Fail2ban (Sito ufficiale) è un software che è nato per permettere di bloccare gli host che stanno tentando di effettuare un attacco di brute force via SSH. Questo genere di attacco si basa su continui tentativi di accesso, provando o l’username root con password probabili (come password, root, toor e così via) oppure tramite coppie di username/password conosciute (create, ad esempio, da malware o da rootkit).

Installazione e configurazione di fail2ban

Andiamo a scaricare ed installare il software con il comando:

sudo apt-get install fail2ban -y

Terminato il processo di installazione, entriamo nella directory di fail2ban:

cd /etc/fail2ban

Copiamo il file di configurazione:

sudo cp jail.conf jail.local

Adesso andiamo a modificarlo:

sudo nano jail.local

Nella schermata che ci appare adesso dobbiamo modificare i parametri:

  • bantime = 1000
  • maxretry = 5

Andiamo ad abilitare ed avviare il servizio di fail2ban affinché le modifiche siano effettive:

sudo systemctl enable fail2ban.service 
sudo systemctl start fail2ban.service

Verifichiamo che tutto sia partito senza problemi:

sudo systemctl status fail2ban.service

A video riceveremo una risposta simile a questa:

Per vedere i logs e gli eventuali ban ci basterà digitare il comando sul terminale:

sudo tail /var/log/fail2ban.log

A video riceveremo una risposta simile a questa: