Novità
Icona risorsa

Guida Verificata [Server] Come proteggere il tuo server Linux

Una guida verificata è stata controllata dallo staff punto per punto e se ne attesta la sua validità.

Introduzione

In questa breve guida, vediamo come proteggere in modo semplice un server linux, che sia una VPS, un server dedicato, o anche semplicemente il vostro raspberry connesso alla rete. Data l'enormità delle distribuzioni linux con cui è possibile creare un server, i comandi che seguiranno saranno validi per distribuzioni basate su debian (come Ubuntu), naturalmente con i dovuti accorgimenti può essere seguita anche da chi usa altre distro.


La guida è intesa a scopo informativo, l'obiettivo non è creare un server perfetto. Sono consapevole che esistono molte tecniche di sicurezza più solide e complicate. La guida è rivolta a quegli utenti che hanno una conoscenza basilare del sistema operativo in questione, con buone fondamenta di concetti come Firewall, SSH, TCP/IP. Quanto segue fornisce comunque un livello di sicurezza sufficiente per la maggior parte degli utilizzi (come un semplice server web).

Prerequisiti
  • Avere un server Linux
  • Avere accesso root al server
  • Conoscenza base dei comandi linux
  • Capire cosa si sta facendo, non lanciate semplicemente i comandi!

Indice
  1. Aggiornamenti!
  2. Cambiare la porta SSH
  3. Cambiare la password all'utente root
  4. Bloccare l'accesso SSH all'utente root
  5. Installare Fail2Ban
  6. Installare un firewall (iptables e ufw)

1. Aggiornamenti!

Tanto banale quanto fondamentale, la prima cosa da fare è verificare che il nostro sistema sia aggiornato!
Per farlo, lanciamo il famoso comando che sarà conosciuto ai più: sudo apt update e premiamo invio, subito dopo lanciamo sudo apt upgrade

2. Cambiare la porta SSH

Solitamente la porta predefinita per l'accesso ssh è la 22. Cambiandola, complichiamo leggermente la vita a chi tenta di accedere alla nostra macchina tramite ssh, in quanto deve prima scoprire la porta usata (i bot sono "scemi", già solo con questo accorgimento ci saremo protetti da una buona fetta di attacchi automatizzati).

Nel caso non abbiate un editor di testo, consiglio di usare nano. Dovrebbe già essere presente di default in molte distro. Nel caso non lo fosse, per installarlo lanciate sudo apt install nano

Apriamo il file di configurazione del servizio
Bash:
Accedi o Registrati per vedere questo contenuto.
cerchiamo una riga simile a questa
Codice:
Accedi o Registrati per vedere questo contenuto.
e cambiamo il numero 22 con una qualsiasi altra porta a nostra scelta, purché non sia utilizzata da altri servizi (consiglio una porta tra 1024 e 65536). Salviamo e chiudiamo l'editor (se usate nano, i comandi in basso si attivano tenendo premuto il tasto CTRL).
Ora riavviamo in servizio
Bash:
Accedi o Registrati per vedere questo contenuto.
e poi riavviamo la macchina con
Bash:
Accedi o Registrati per vedere questo contenuto.

Ricordiamoci ora che per accedere tramite SSH alla macchina, dobbiamo specificare anche la porta scelta. Se ad esempio abbiamo scelto la porta 49999, il comando sarà
Bash:
Accedi o Registrati per vedere questo contenuto.
dove IPdelserver è l'indirizzo IP della tua macchina.

3. Cambiare la password all'utente root

IMPORTANTE: Prima di procedere, è buona cosa cambiare la password dell'utente root. Ricordo però che alcune distro hanno l'account root disattivato di default, ovvero è presente ma in uno stato "dormiente". Questo vuol dire che tutte le operazioni che richiedono privilegi elevati, vanno effettuate con il comando sudo dal vostro account principale. Per riattivare l'account root, basta semplicemente cambiare password al root. La scelta effettuata in questa guida sarà quella di riattivare l'account root ma bloccare l'accesso a questo utente tramite ssh.
Per cambiare password all'utente root, digitiamo il comando
Bash:
Accedi o Registrati per vedere questo contenuto.
Ci verrà richiesto di inserire una nuova password. Il consiglio è di non usare nessuna frase o parola esistente, ma affidarsi ad un generatore di password che mischi caratteri maiuscoli, minuscoli, numeri e caratteri speciali con una lunghezza minima di 8 - 10 caratteri.

4. Bloccare l'accesso SSH all'utente root

La maggior parte delle operazioni che non richiedono privilegi elevati, devono essere effettuati da un normale utente. Prima di disattivare l'accesso al server tramite root, creiamo un nuovo utente
Bash:
Accedi o Registrati per vedere questo contenuto.
Successivamente, per eseguire operazioni come root, possiamo richiedere i privilegi elevati digitando su -, sudo su - oppure su root

Procediamo ora a bloccare l'accesso root in ssh, apriamo il file di configurazione già modificato precedentemente
Bash:
Accedi o Registrati per vedere questo contenuto.
e cerchiamo questa riga
Codice:
Accedi o Registrati per vedere questo contenuto.
ora modifichiamo PermitRootLogin yes con PermitRootLogin no, salviamo e riavviamo il servizio come fatto prima, ovvero digitando
Bash:
Accedi o Registrati per vedere questo contenuto.
d'ora in avanti tutte le connessioni ssh al root saranno rifiutate.

APPROFONDIMENTO: Possiamo aumentare considerevolmente la sicurezza del nostro accesso SSH utilizzando il metodo di autenticazione a chiave pubblica. Di seguito un link alla guida:

5. Installare Fail2Ban

Mai sentito parlare degli attacchi Brute Force o Denial of Service? Ecco, questo framework ci protegge proprio da quelli, bloccando gli ip di chi tenta insistentemente di accedere alla nostra macchina. Se usate un pannello di controllo come Plesk o simili, generalmente è già preinstallato e le modifiche a Fail2Ban dovrebbero essere eseguite tramite il pannello da voi utilizzato.

Per installare Fail2Ban digitiamo
Bash:
Accedi o Registrati per vedere questo contenuto.
Ora dobbiamo procedere a personalizzarlo. I file di configurazione sono salvati in /etc/fail2ban. Le impostazioni predefinite sono nel file jail.conf. Come suggerito da Fail2Ban, è sconsigliato modificare direttamente il file jail.conf, ma bisogna creare un file .local ed effettuare li tutte le modifiche o personalizzazioni che vogliamo.
Quindi, creiamo il file jail.local
Bash:
Accedi o Registrati per vedere questo contenuto.
e ora apriamolo con
Bash:
Accedi o Registrati per vedere questo contenuto.
Ora, consiglio una breve lettura di questo file, perché aiuta a capirne il suo funzionamento e diversi parametri sono intuibili, così che possiamo personalizzarlo per le nostre esigenze. Da notare che le azioni presenti sotto [DEFAULT] vengono eseguire per tutti i servizi, a meno che non sia presente uno specifico servizio sotto JAILS. Ad esempio possiamo proteggere il servizio SSH (sshd) in modo diverso rispetto ad altri, di seguito vedremo un esempio.
Detto ciò, una volta aperto il file la prima modifica suggerita è cambiare il tempo di ban nel caso il numero di tentativi (nell'arco di tempo stabilito) superano il valore da noi indicato, questo è possibile modificando la line
Codice:
Accedi o Registrati per vedere questo contenuto.
al posto di 600, inseriamo i secondi da noi desiderati, un buon punto di partenza è 2 ore, ovvero 7200 secondi.

Come anticipato, possiamo anche creare regole specifiche solo per alcuni servizi, ad esempio una regola ssh potrebbe essere questa (da inserire sotto la voce JAILS)
Codice:
Accedi o Registrati per vedere questo contenuto.
In questo modo abbiamo creato una regola in cui ogni tentativo di connessione fallito per 3 volte, in un tempo di 2 ore, viene bannato (l'ip) per un giorno, ovvero 86400 secondi.
Ricordiamoci che i parametri inseriti sotto JAILS sovrascrivono i globali definiti in DEFAULT solo per quel particolare servizio.
Per applicare le modifiche, riavviamo Fail2Ban
Bash:
Accedi o Registrati per vedere questo contenuto.

ATTENZIONE: Nel caso in cui Fail2Ban non dovesse avviarsi automaticamente, dobbiamo avviarlo noi e creare una regola di avvio ad ogni reboot.
Per avviarlo
Bash:
Accedi o Registrati per vedere questo contenuto.
Successivamente, per avviarlo automaticamente ad ogni riavvio
Bash:
Accedi o Registrati per vedere questo contenuto.

Aggiornamento Debian 12

IMPORTANTE: Se avete aggiornato il vostro sistema a Debian 12, o avete appena installato Debian 12, fail2ban potrebbe restituire un errore del genere:
Main process exited, code=exited, status=255/EXCEPTION

Prima di tutto, assicuriamoci di avere il pacchetto python3-systemd, altrimenti installiamolo
Bash:
Accedi o Registrati per vedere questo contenuto.

Successivamente dobbiamo spostare i log al systemd journal.

Per farlo, nel file local creiamo la direttiva
Codice:
Accedi o Registrati per vedere questo contenuto.
mentre le altre direttive rimarranno invariate, assicurandoci di non utilizzare i vecchi log (esempio)
Codice:
Accedi o Registrati per vedere questo contenuto.


6. Installare un firewall (iptables e ufw)

La spiegazione su cosa sia un firewall la evito, anche perché se possedete un server dovreste saperlo perfettamente! Questo passaggio si addentra leggermente di più in quella che è la gestione di un server. Quasi ogni distro linux ha un sul firewall preinstallato, ovvero iptables. Questo firewall non è proprio immediato da usare, in quanto richiede conoscenze approfondire di rete. In nostro aiuto ci viene ufw, ovvero un tool che semplifica la gestione di iptables. Come per Fail2Ban, se disponete di un pannello d'amministrazione, usate quello invece della riga di comando.

L'installazione di ufw, si porta dietro alcune dipendenze, come appunt iptables. Queste dipendenze vengono installate automaticamente se non presenti. Per evitare di dire "yes" ad ogni schermata, installiamo ufw con l'accettazione automatica
Bash:
Accedi o Registrati per vedere questo contenuto.
Se la vostra macchina è configurata per funzionare anche con IPV6, dobbiamo impostarlo su ufw aprendo il file di configurazione
Bash:
Accedi o Registrati per vedere questo contenuto.
Codice:
Accedi o Registrati per vedere questo contenuto.
Assicuriamoci che la riga IPV6 sia settata su yes come mostrato sopra. Dobbiamo ora riavviare ufw, per farlo digitiamo i comandi
Bash:
Accedi o Registrati per vedere questo contenuto.
seguito da
Bash:
Accedi o Registrati per vedere questo contenuto.

Ora, tutto ciò che segue dipende dalle vostre particolari esigenze. Se aprire o meno una porta o un insieme di porte, sta a voi deciderlo in base a come intendete utilizzare la vostra macchina e cosa dovrà fare.

A TITOLO DI ESEMPIO possiamo inizialmente chiudere tutte le porte in entrata, e aprire tutte le porte in uscita, per poi specificare singolarmente quale porta ci interessa aprire in entrata. Questa è un'impostazione molto comune, per aumentare ulteriormente la sicurezza possiamo anche decidere di chiudere le porte in uscita, ripeto, dipenderà da cosa vogliamo ottenere.
Per chiudere le porte in entrata, digitiamo
Bash:
Accedi o Registrati per vedere questo contenuto.
Mentre per aprire le porte in uscita digitiamo
Bash:
Accedi o Registrati per vedere questo contenuto.

Una regola che probabilmente vi servirà, sarà quella di aprire la porta SSH. possiamo farlo in 2 modi:
Bash:
Accedi o Registrati per vedere questo contenuto.
oppure indicando direttamente la porta, ad esempio inserendo quella che abbiamo modificato al punto 2
Bash:
Accedi o Registrati per vedere questo contenuto.
da notare che se non avessimo inserito /tcp, la porta sarebbe stata aperta sia in TCP che in UDP.

Stesso discorso può essere fatto con altre porte, tipo quella usata per le connessioni FTP, web etc. Ad esempio per aprire la porta 80 TCP (usata per un server web), basta scrivere
Bash:
Accedi o Registrati per vedere questo contenuto.
Possiamo anche indicare un range di porte da aprire, ad esempio
Bash:
Accedi o Registrati per vedere questo contenuto.
oppure consentire l'accesso solo ad un determinato indirizzo IP
Bash:
Accedi o Registrati per vedere questo contenuto.

Allo stesso modo, possiamo eliminare regole precedentemente create, ad esempio
Bash:
Accedi o Registrati per vedere questo contenuto.

ufw è uno strumento molto potente, il consiglio è di consultare la guida ufficiale per capirne meglio il funzionamento e le innumerevoli opzioni che ha.

Siamo arrivati alla fine, spero di aver fatto chiarezza su alcuni argomenti, illustrati con il solo scopo di far capire le "possibilità" nella protezione di un server. Naturalmente non sono le sole, e alcune accortezze vanno effettuate a monte, ad esempio mascherando l'ip della propria macchina, magari con un proxy dietro il vostro server DNS, sta a voi in quanto amministratori decidere cosa sia meglio fare.
Autore
Anyma
Visite
1,060
Primo rilascio
Ultimo aggiornamento
Valutazione
0.00 stella(e) 0 valutazioni

Più risorse di Anyma

Ultimi aggiornamenti

  1. Soluzione a Debian 12 Main process exited, code=exited, status=255/EXCEPTION

    Aggiornamento Debian 12 IMPORTANTE: Se avete aggiornato il vostro sistema a Debian 12, o avete...
  2. Approfondimento protezione SSH

    Inserito link alla guida su come proteggere l'accesso SSH tramite autenticazione a chiave pubblica
Indietro
Alto