Vai al contenuto

Server Dedicato: Consigli per la Sicurezza Linux

Scopri come migliorare la sicurezza del tuo server Linux con consigli essenziali per prevenire accessi non autorizzati e proteggere i tuoi servizi → Scopri di più ora

10 novembre 202610 min di lettura6 Visualizzazioni0 utile

Introduzione

Questa guida contiene alcuni consigli e suggerimenti su come rendere più sicuro il tuo server Linux. Proprio perché i server devono essere accessibili dall’esterno, una protezione di base contro accessi indesiderati è sicuramente consigliata e non va trascurata.

Info

Tieni presente che queste istruzioni non sono esaustive e informazioni più dettagliate si trovano in altre sezioni della documentazione ZAP. (ad esempio 2FA (SSH))

Suggerimento

Il modo più semplice per proteggere il tuo server è sempre lo stesso, indipendentemente dal tipo di server: usa password sicure, aggiorna regolarmente i tuoi servizi e presta attenzione ai servizi che installi e alle guide che segui.

Configurazione delle porte dei servizi

ServizioPorta
SSH22
FTP21
Mail25
DNS53
HTTP80
HTTPS443

Servizi come SSH o FTP usano di default sempre le stesse porte (alcune sono nella tabella sopra). Se un attaccante esterno tenta di forzare l’accesso SSH con attacchi brute-force, deve prima sapere quale porta usa SSH. Se non cambi queste porte, le porte 22 e 21 sono quasi sempre quelle usate per eseguire comandi sul server o accedere via FTP.

Per evitarlo, consigliamo di configurare porte personalizzate per i servizi standard. Nel prossimo paragrafo spieghiamo come fare:

Attenzione

La porta scelta deve essere compresa tra 1024 e 65535 e non deve essere già in uso!

Puoi vedere alcune porte standard con cat /etc/services per evitare di scegliere una porta già occupata.

Cambiare la porta SSH

Per cambiare la porta SSH devi modificare il file di configurazione, solitamente in /etc/ssh/sshd_config. Se non lo trovi, puoi cercarlo con:

Code
find / -name "sshd_config" 2>/dev/null

Apri il file con nano (come root o usando sudo):

Code
sudo nano /etc/ssh/sshd_config

Inserisci la porta desiderata dopo Port. Se la riga Port è commentata (es. #Port 22), rimuovi il "#" e sostituisci 22 con la porta scelta. Salva (Ctrl + o) e chiudi (Ctrl + x).

Devi riavviare il servizio SSH per applicare le modifiche:

Code
# Su Ubuntu/Debian/CentOS ad esempio
sudo systemctl restart sshd

Cambiare la porta FTP

Se hai installato un servizio FTP come proFTPd, puoi cambiare la porta modificando il file di configurazione, simile a SSH.

Cerca il file proftpd.conf:

Code
find / -name "proftpd.conf" 2>/dev/null

Di solito si trova in /etc/proftpd.conf (CentOS) o /etc/proftpd/proftpd.conf (Ubuntu, Debian). Apri il file con nano, rimuovi il "#" davanti a port e inserisci la porta desiderata. Ricorda di scegliere una porta valida come indicato sopra.

Suggerimento

Usa Ctrl + W in nano per cercare.

Code
nano /etc/proftpd/proftpd.conf

Protezione aggiuntiva con Fail2Ban

Fail2Ban è un servizio che blocca gli indirizzi IP che tentano di accedere al server con intenzioni probabilmente malevole. Monitora i file di log per rilevare anomalie e protegge il sistema in modo semplice ed efficace.

Dopo l’installazione, Fail2Ban ha già configurazioni predefinite per alcuni servizi comuni, tra cui:

  • apache
  • lighttpd
  • sshd
  • qmail
  • postfix
  • Courier Mail Server Altri servizi possono essere aggiunti facilmente con espressioni regolari (RegEx) e specificando il file di log.
Ad esempio, consideriamo un log in /var/log/auth.log che contiene tutti i tentativi di login SSH, riusciti o falliti.

Ecco una riga di esempio:

Code
Dec 2 12:59:19 vps-zap515723-2 sshd[364126]: Failed password for root from 92.117.xxx.xxx port 52504 ssh2

Fail2Ban usa questo file per monitorare i tentativi falliti. Poiché il log contiene l’IP dell’attaccante, Fail2Ban può bloccare quell’IP dopo alcuni tentativi falliti.

Installare Fail2Ban

Accedi al server Linux. Se serve, segui la guida Primo accesso (SSH). Esegui i comandi come root o con sudo.

Code
sudo apt update && sudo apt upgrade -y
sudo apt install fail2ban

Dopo l’installazione, verifica lo stato con systemctl (esci con Ctrl+C):

Code
systemctl status fail2ban.service
* fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor pres>
     Active: active (running) since Sat 2023-12-02 13:10:33 UTC; 24s ago
       Docs: man:fail2ban(1)
    Process: 23988 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, statu>
   Main PID: 23989 (fail2ban-server)
        CPU: 409ms
     CGroup: /system.slice/fail2ban.service
             `-23989 /usr/bin/python3 /usr/bin/fail2ban-server -xf start

Dec 02 13:10:33 vps-zap515723-1 systemd[1]: Starting Fail2Ban Service...
Dec 02 13:10:33 vps-zap515723-1 systemd[1]: Started Fail2Ban Service.
Dec 02 13:10:34 vps-zap515723-1 fail2ban-server[23989]: Server ready

Configurare Fail2Ban

Fail2Ban è installato ma non ancora attivo o configurato. Controlla la cartella /etc/fail2ban dove dovresti trovare:

Code
action.d fail2ban.d jail.conf paths-arch.conf paths-debian.conf
fail2ban.conf filter.d jail.d paths-common.conf paths-opensuse.conf

Per creare una “jail” attiva, crea un file jail.local. Copia il contenuto di jail.conf in questo nuovo file e aprilo:

Code
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Qui puoi modificare tutte le impostazioni, inclusi i servizi da monitorare. Guarda la sezione dopo [Default], che contiene le impostazioni generali.

Scorri fino a questa tabella e modificala così:

AttributoDescrizioneValore
ignoreipIP che non devono essere bloccati127.0.0.1/8
ignorecommandNon rilevante
bantimeDurata del blocco di un IP1h
findtimeIntervallo in cui i tentativi falliti sono considerati10m
maxretryNumero di tentativi falliti prima del blocco5
Code
# può essere definito separando con spazi (e/o virgole)
#ignoreip = 127.0.0.1/8 ::1

# ignorecommand = /path/to/command <ip>
ignorecommand =

# "bantime" è il numero di secondi in cui un host è bloccato.
bantime  = 1h

# Un host viene bloccato se genera "maxretry" errori entro gli ultimi "findtime"
# secondi.
findtime  = 10m

# "maxretry" è il numero di errori prima del blocco.
maxretry = 5

Hai così completato le impostazioni base. Per monitorare il servizio SSH, scorri fino alla sezione [sshd]. Se hai cambiato la porta, inseriscila in port.

La sezione [sshd] sarà così:

Code
[sshd]

enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
Suggerimento

Puoi anche impostare parametri specifici per ogni servizio (ad esempio maxretry più basso del valore di default). Se non li imposti, si usano quelli generali.

Ora riavvia Fail2Ban per attivare il monitoraggio:

Code
sudo systemctl restart fail2ban.service

Verificare il funzionamento di Fail2Ban

Se hai accesso a una VPN o a un secondo server, puoi testare Fail2Ban bloccando te stesso. Usando una VPN o hotspot sul cellulare avrai un IP diverso per testare Fail2Ban.

Attenzione

Non fare questo nella tua rete normale, potresti bloccare il tuo IP e rimanere bloccato fuori.

Prova a connetterti via SSH al server (con IP diverso!) inserendo sempre la password sbagliata. Dovresti vedere:

Code
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
root@185.223.29.xxx: Permission denied (publickey,password).
root@vps-zap515723-2:/var/log# ssh root@185.223.29.179
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
^C
root@vps-zap515723-2:/var/log# ssh root@185.223.29.xxx
ssh: connect to host 185.223.29.xxx port 22: Connection refused

Come vedi, la connessione viene rifiutata (Connection refused invece di Permission denied).

Controlla lo stato di Fail2Ban. Vedrai che un IP è stato bloccato:

Code
fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 4
|  |- Total failed:     8
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   xxx

Per sbloccare un IP usa: fail2ban-client set sshd unbanip {tuo IP}.

Info

Se hai molti blocchi IP, considera di aumentare la durata del blocco ad ogni tentativo fallito per ridurre i tentativi di login possibili.

Code
[sshd]

enabled = true
port    = 22
filter  = sshd
logpath = /var/log/auth.log
maxretry = 4

bantime = 1h
# Bantime aumenta ad ogni blocco di questo IP
bantime.increment = true
# Fattore di scala di 24 ore (1h,24h,48h,3d,4d....)
bantime.factor = 24
# Durata massima blocco = 5 settimane
bantime.maxtime = 5w

FAQ

Domande frequenti

Usa password sicure, aggiorna regolarmente i servizi e fai attenzione ai servizi che installi e alle guide che segui.
Il login SSH con password può essere facilmente violato con attacchi brute-force, soprattutto con password deboli. È consigliato usare solo l’autenticazione con chiavi SSH e disabilitare il login con password.
SSH usa di default la porta 22. Poiché servizi come SSH e FTP usano sempre le stesse porte standard, queste sono obiettivi comuni per attacchi automatizzati, quindi è consigliabile adottare misure di protezione.

Feedback

Questo articolo ti è stato utile?

Il tuo feedback ci aiuta a definire le priorità e a migliorare i contenuti.

0 di 0 I feedback hanno giudicato utile questo articolo.

Assistenza personale

Le istruzioni non sono sufficienti?

Il supporto ZAP conosce il tuo prodotto: descrivi brevemente la tua richiesta e ti aiuteremo personalmente.