Novità
ItaliaNerd

Registrati gratuitamente per diventare un membro della community ItaliaNerd! Una volta effettuato l'accesso, potrai partecipare a questo sito aggiungendo i tuoi argomenti e post, nonché connetterti con altri membri tramite la tua casella di posta privata! Sentiti libero di utilizzare questo portale come meglio credi, per una breve panoramica dai un'occhiata QUI!

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:
sudo nano /etc/ssh/sshd_config
cerchiamo una riga simile a questa
Codice:
# What ports, IPs and protocols we listen for
Port 22
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:
sudo systemctl restart sshd
e poi riavviamo la macchina con
Bash:
sudo reboot

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:
ssh username@IPdelserver -p 49999
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:
sudo passwd root
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:
sudo adduser NomeUtentePersonalizzato
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:
sudo nano /etc/ssh/sshd_config
e cerchiamo questa riga
Codice:
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
ora modifichiamo PermitRootLogin yes con PermitRootLogin no, salviamo e riavviamo il servizio come fatto prima, ovvero digitando
Bash:
sudo systemctl restart sshd
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:
sudo apt install fail2ban
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:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
e ora apriamolo con
Bash:
sudo nano /etc/fail2ban/jail.local
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:
# "bantime" is the number of seconds that a host is banned.
bantime  = 600
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:
[sshd]
enabled = true
port = ssh
filter = sshd
maxretry = 3
findtime = 7200
bantime  = 86400
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:
sudo service fail2ban restart

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:
sudo systemctl start fail2ban
Successivamente, per avviarlo automaticamente ad ogni riavvio
Bash:
sudo systemctl enable fail2ban

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:
sudo apt install python3-systemd

Successivamente dobbiamo spostare i log al systemd journal.

Per farlo, nel file local creiamo la direttiva
Codice:
[DEFAULT]
backend = systemd
mentre le altre direttive rimarranno invariate, assicurandoci di non utilizzare i vecchi log (esempio)
Codice:
[sshd]
enabled = true
port = 22
bantime  = 1d
maxretry = 3
findtime  = 1h


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:
sudo apt install ufw -y
Se la vostra macchina è configurata per funzionare anche con IPV6, dobbiamo impostarlo su ufw aprendo il file di configurazione
Bash:
sudo nano /etc/default/ufw
Codice:
# /etc/default/ufw
#

# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback
# accepted). You will need to 'disable' and then 'enable' the firewall for
# the changes to take affect.
IPV6=yes
Assicuriamoci che la riga IPV6 sia settata su yes come mostrato sopra. Dobbiamo ora riavviare ufw, per farlo digitiamo i comandi
Bash:
sudo ufw disable
seguito da
Bash:
sudo ufw enable

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:
sudo ufw default deny incoming
Mentre per aprire le porte in uscita digitiamo
Bash:
sudo ufw default allow outgoing

Una regola che probabilmente vi servirà, sarà quella di aprire la porta SSH. possiamo farlo in 2 modi:
Bash:
sudo ufw allow ssh
oppure indicando direttamente la porta, ad esempio inserendo quella che abbiamo modificato al punto 2
Bash:
sudo ufw allow 49999/tcp
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:
sudo ufw allow 80/tcp
Possiamo anche indicare un range di porte da aprire, ad esempio
Bash:
sudo ufw allow 1000:2000/tcp
oppure consentire l'accesso solo ad un determinato indirizzo IP
Bash:
sudo ufw allow from tuo_ip

Allo stesso modo, possiamo eliminare regole precedentemente create, ad esempio
Bash:
sudo ufw delete allow 80/tcp

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,135
Primo rilascio
Ultimo aggiornamento

Ratings

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