10 consigli pratici per mettere in sicurezza un server Linux

Hai appena attivato il tuo primo server Linux virtuale (VPS o cloud) o ti sei spinto oltre e hai deciso di fare il salto verso un server dedicato. Sono sicuro che la tua decisione sia stata ponderata e che tu abbia valutato tutti gli aspetti necessari. Se ti sei affidato a un provider di comprovata esperienza puoi stare ancora più tranquillo. Ma forse non sei ancora così sereno come vorresti perché ti preoccupa l’aspetto sicurezza del server.

Rilassati! È normale che non appena si attivi un server Linux ci si chieda come sia possibile metterlo in sicurezza ed è altrettanto normale cercare consigli sul web per essere certi che il proprio server venga messo al riparo da ogni problema critico.

Proprio per aiutarti in questo compito, di seguito ti elenco 10 regole da mettere subito in pratica per mantenere in sicurezza il tuo nuovo server Linux. Che aspetti allora? Metti mano alla console e inizia a digitare.

1° regola: aggiornare

Ricordati di tenere il sistema sempre aggiornato con le ultime patch, gli ultimi fix di sicurezza e l’ultimo kernel disponibile.

Nella console di CentOS e RHEL (Red Hat Enterprise Linux) digita:

[code type=”markup”]yum -y update[/code]

Mentre se usi Debian o Ubuntu:

[code type=”markup”]apt-get update
apt-get upgrade[/code]

2° regola: attivare il firewall

Alcune distribuzioni Linux come Ubuntu non sempre hanno il firewall locale attivato di default, a differenza di CentOS e RHEL, che hanno iptables attivato con la regola predefinita per l’accesso SSH. Per quanto sia sempre importante affidarsi a un firewall hardware e software indipendenti, attivare iptables è comunque buona cosa ed è per questo che devi procedere in questo modo.

Controlla se c’è qualche regola firewall definita:

[code type=”markup”]iptables -L -n[/code]

Configura una prima regola come quella per consentire l’accesso SSH:

[code type=”markup”]ufw allow 22/tcp[/code]

Poi avvia il firewall:

[code type=”markup”]ufw enable[/code]

Puoi trovare altri utili consigli su come configurare iptables sul tuo server qui.

3° regola: configurare l’accesso SSH

Per accedere al tuo server Linux probabilmente usi già la connessione SSH, soprattutto se hai attivato un VPS. Ricordati di non accedere mai come root se non necessario e di eseguire tutti i comandi via sudo, in modo che ogni operazione venga registrata nell’apposito file di log.

Per questo motivo, disabilita l’accesso root via SSH, in modo da metterti in sicurezza da eventuali attacchi compiuti attraverso questo protocollo e specifica quali utenti possono utilizzare il protocollo sicuro SSH per accedere al tuo server. Gli utenti devono ovviamente essere già stati creati. Ecco come devi fare.

Inizia con l’accedere al file di configurazione del server SSH:

[code type=”markup”]vi /etc/ssh/sshd_config[/code]

Poi, decommenta la seguente riga e digita il valore no:

[code type=”markup”]PermitRootLogin no[/code]

Aggiungi la direttiva AllowUsers o AllowGroups al file seguita dalla lista degli account utente che vuoi autorizzati, separati da uno spazio:

[code type=”markup”]AllowUsers user1 user2 user3 …[/code]

Al termine, salva il file di configurazione, esci dall’editor e riavvia il servizio SSH:

[code type=”markup”]service sshd restart[/code]

4° regola: gestire le password degli utenti

Uno dei problemi di sicurezza di un server Linux sono spesso le password degli utenti. Ecco come gestirle.

  1. Obbliga gli utenti a usare password forti, agendo sul file syste-auth, così:
    [code type=”markup”]vi /etc/pam.d/system-auth (RHEL/CentOS/Fedora)
    vi /etc/pam.d/common-password (Ubuntu/Debian)[/code]
    Aggiungi una linea di comando come la seguente:
    [code type=”markup”]/lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1[/code]
    Per richiamare il modulo pam_cracklib disponibile in PAM (Pluggable Authentication Modules) e definire lo schema di password che l’utente deve rispettare. Nel caso specifico, si chiede all’utente di definire una password con una lunghezza minima pari a 8 caratteri (minlen), un carattere obbligatorio in minuscolo (lower-case, lcredit e uso negativo del numero), due caratteri obbligatori in maiuscolo (upper-case, ucredit e uso negativo del numero), due caratteri obbligatori corrispondenti a un numero (digit, dcredit e uso negativo del numero) e un carattere obbligatorio non alfanumerico (other, ocredit e uso negativo del numero).
  2. Imposta una data di rinnovo per le password, così:
    [code type=”markup”]change -M 60 username
    change – M 60 -m 7 -W 7 username[/code]
    Dove -M indica il numero di giorni massimo di validità di una password, -m indica il numero di giorni minimo e –W indica il numero di giorni da cui partire con l’avvertimento per il cambio password.
  3. Evita che possano riutilizzare le vecchie password, così:
    [code type=”markup”]vi /etc/pam.d/system-auth (RHEL/CentOS/Fedora)
    vi /etc/pam.d/common-password (Ubuntu/Debian)[/code]
    Aggiungi la seguente linea alla sezione auth:
    [code type=”markup”]auth  sufficient  pam_unix.so likeauth nullok[/code]
    Aggiungi la seguente linea alla sezione password:
    [code type=”markup”]password  sufficient  pam_unix.so nullok use_authtok md5 shadow remember=5[/code]
    In questo modo, eviterai che l’utente possa usare le ultime 5 password già scelte in precedenza. Infine, verifica che non vi siano account con password vuota, nel seguente modo:
    [code type=”markup”]cat /etc/shadow | awk -F: ‘($2==””){print $1}'[/code]

5° regola: disabilitare CTRL+ALT+CANC

Se hai utenti che arrivano dal mondo Windows, conviene disabilitare la combinazione CTRL+ALT+CANC in Inittab che in molte distribuzioni Linux provoca il riavvio del sistema e quindi del server. Per evitare che ciò accada edita il file inittab, così:

[code type=”markup”]vi /etc/inittab[/code]

Commenta le seguenti righe:

[code type=”markup”]# Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now[/code]

6° regola: abilitare SELinux

Security-Enhanced Linux (SELinux) è un meccanismo di controllo di sicurezza integrato nel kernel ed è sempre bene che sia attivo. Per verificare se sul tuo nuovo server è in esecuzione, digita:

[code type=”markup”]sestatus[/code]

Se disabilitato, avvialo nel seguente modo:

[code type=”markup”]setenforce enforcing[/code]

7° regola: disabilitare i servizi inutili

È importante disabilitare i servizi in esecuzione inutili e rimuovere i package non necessari. Per prima cosa, quindi, verifica tutti i servizi in esecuzione con un livello di runlevel pari a 3:

[code type=”markup”]/sbin/chkconfig –list |grep ‘3:on'[/code]

Una volta individuati i servizi non necessari, disabilitali così:

[code type=”markup”]chkconfig nomeServizio off (CentOS 6/RHEL 6)
systemctl disable nomeServizio (CentOS 7/RHEL 7)
update-rc.d nomeServizio disable (Debian/Ubuntu)[/code]

Per i package che non usi, invece, ricorri ai comandi yum o apt-get, nel seguente modo:

[code type=”markup”]yum -y remove nome-package (CentOS/RHEL)
apt-get remove nome-package (Debian/Ubuntu)[/code]

8° regola: disabilitare l’uso delle pendrive USB

A volte, può essere più sicuro fare in modo che gli utenti non usino pendrive USB per proteggere e mettere in sicurezza il sistema del server fisico Linux. Per ottenere questo risultato, crea il file no-usb ed editalo:

[code type=”markup”]touch /etc/modprobe.d/no-usb
vi /etc/modprobe.d/no-usb
install usb-storage /bin/true[/code]

9° regola: bloccare l’uso dei cronjob

Cron è una caratteristica di Linux che ti permette di eseguire dei job programmati. Puoi decidere quali utenti possano usare questa funzione attraverso l’interazione con i file /etc/cron.allow e /etc/cron.deny. Ad esempio, puoi disabilitare tutti gli utenti all’uso di cron nel seguente modo:

[code type=”markup”]echo ALL >>/etc/cron.deny[/code]

10° regola: monitorare con una certa frequenza i file log

Ricordati di monitorare con una determinata frequenza i seguenti file di log:

  • /var/log/message – log delle attività correnti
  • /var/log/auth.log – log delle autenticazioni
  • /var/log/kern.log – log del kernel
  • /var/log/cron.log – log di cron
  • /var/log/maillog – log del mailserver
  • /var/log/boot.log – log di avvio
  • /var/log/mysqld.log – log del server database MySQL

Bonus: impostare la directory /boot in modalità di sola lettura

Tutti i file relativi al kernel di Linux si trovano nella directory /boot su cui di solito sono abilitate anche le operazioni di scrittura. Per ridurre i rischi di modifiche non autorizzate che possano portare il sistema all’instabilità, conviene impostare la directory in modalità di sola lettura, editando il file fstab:

[code type=”markup”]vi /etc/fstab
LABEL=/boot  /boot  ext2  defaults,ro  1 2[/code]

Per aggiornare il kernel in futuro sarà necessario reimpostare la modalità di scrittura.

Condividi