Facebook

Come mettere in sicurezza un VPS con sistema operativo Rocky Linux

Livello base

Come mettere in sicurezza un VPS con sistema operativo Ubuntu Linux (livello base)

Come mettere in sicurezza un VPS con sistema operativo Rocky Linux (livello base)

Rocky Linux è un sistema operativo open-source di livello enterprise. La sua principale peculiarità è l'essere progettato e mantenuto di pari passo a Red Hat Enterprise Linux, ovvero essere 100% bug-per-bug compatibile. In questa guida andremo ad eseguire una prima basilare messa in sicurezza di una VPS Rocky Linux appena installato. Questi primi semplici step andranno poi integrati con eventuali altri meccanismi di sicurezza a seconda dei servizi che volete installare.

Vista l'origine comune (Red Hat), questa guida vale anche per sistemi operativi CentOS 7 e 8.

Prerequisiti

  1. Un VPS Rocky Linux
  2. Un utente con privilegi adeguati, ovvero root
  3. Un editor di testo, nel nostro esempio useremo nano
  4. Il gestore di pacchetti dnf, normalmente incluso nel sistema operativo
  5. [Consigliato] Un firewall, nel nostro esempio useremo firewalld

Verifichiamo il sistema operativo è installato

Come già detto, essendo una distribuzione linux che segue Red Hat EL è bene, in caso di problemi, essere certi della versione su cui si lavora per far questo possiamo lanciare il comando:

# cat /etc/os-release
NAME="Rocky Linux"
VERSION="9.0 (Blue Onyx)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.0"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Rocky Linux 9.0 (Blue Onyx)"
ANSI_COLOR="0;32"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:rocky:rocky:9::baseos"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
ROCKY_SUPPORT_PRODUCT="Rocky-Linux-9"
ROCKY_SUPPORT_PRODUCT_VERSION="9.0"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.0"

Nel nostro esempio la versione è la 9.0, denomianata Blue Onyx.

Aggiorna il tuo sistema operativo

Per verificare la presenza di aggiornamenti, usiamo il comando dnf con il parametro check-update

# dnf check-update

Questo comando ci mostrerà la lista di tutti i pacchetti da aggiornare, a questo punto è possibile scegliere se aggiornare quanto suggerito oppure selettivamente solo alcuni pacchetti. Nel primo caso basterà lanciare il comando:

# dnf -y update

Il parametro -y serve soltanto a preconfermare la volontà di aggiornare tutti i pacchetti, senza chiedere alcuna conferma. Se invece vogliamo procedere con un aggiornamento selettivo, aggiornando quindi un determinato pacchetto, basterà lanciare il comando:

# dnf update cockpit.x86_64

Nel nostro esempio aggiorniamo il pacchetto cockpit, tralasciando gli altri.

Creazione di un utente con privilegi limitati

Come regola generale per la sicurezza è bene non utilizzare l'utente root per le attività giornaliere sul VPS, a tale scopo andremo a creare un utente con privilegi limitati, ma che in caso di necessità possa impersonare temporaneamente l'utente root. Per creare un nuovo utente si utilizza il comando useradd:

# useradd mio_utente

Una volta creato l'utente, assegniamo una password utilizzando il comando passwd:

# passwd mio_utente
Changing password for user mio_utente
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

Anche se l'utente appena creato non avrà particolare chance di far danni sul sistema, evitiamo di utilizzare password deboli (almeno 8 caratteri alfanumerici, caratteri speciali compresi). A questo punto possiamo utilizzare l'utente appena creato per collegarci al VPS, ma per ora non saremo in grado di eseguire comandi che richiedono i privilegi dell'utente root.

Per eseguire comandi che richiedono i privilegi di root, è possibile procedere in due modi:

  1. utilizzare il comando $ su root, per impersonare l'utente root
  2. aggiungere l'utente appena creato al gruppo sudo (gruppo di utenti che possono eseguire comandi che richiedano privilegi di root) e quando si dovranno eseguire comandi con privilegi basterà scrivere $ sudo comando_con_privilegi (esempio $ sudo dnf update)

Se nel primo caso l'utente non privilegiato dovrà conoscere la password di root per poter operare, nel secondo invece sarà preautorizzato, a maggior ragione non bisognerà sottovalutare la qualità della password scelta. Meglio sarebbe evitare di esporre ssh sulla porta standard e ancor meglio, utilizzare chiavi cifrate per connettersi, piuttosto che il mero sistema utente/password.

Per aggiungere l'utente creato al gruppo sudo, accediamo al VPS come utente root ed usiamo il comando:

# usermod -aG wheel mio_utente

Il gruppo "wheel" è un gruppo speciale usato in alcuni sistemi Linux per controllare quali utenti possono utilizzare il comando sudo. Ora se accediamo al VPS in ssh con l'utente senza privilegi, utilizzando sudo seguito dal comando che richiede privilegi, potremo eseguire attività che richiedono normlamente i permessi di root, ad esempio:

$ sudo dnf check-update
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for mio_utente:

Ovviamente la password che ci sarà chiesta è quella dell'utente creato in precedenza, non quella di root. In questo modo potremo creare utenti per collaboratori esterni, senza diffondere la password di root.

Gestione Firewall

Un aspetto importante per la sicurezza del VPS è la gestione del firewall, in Rocky Linux il firewall è attivo per default ed ha una configurazione base che permette di collegarsi in SSH (porta standard TCP 22) e alla console web COCKPIT (porta TCP 9090). Quest'ultimo servizio (cockpit) non è attivo, quindi se proverete a collegarvi all'indirizzo https://ip_vps:9090 non riceverete alcuna risposta (della gestione dei servizi e della web console ne parleremo in un'altro articolo). Diversamente dai sistemi operativi derivati da Debian (esempio Ubuntu Server), Rocky Linux utilizza firewalld, di conseguenza i comandi utilizzati per la sua configurazione sono differenti da ufw (chi normalmente usa Ubuntu sa di cosa stiamo parlando).

Come primo step, assicuriamoci che il firewall sia in esecuzione:

$ sudo firewall-cmd --state

Visto che state utilizzando un utete non root, vi sarà richiesta la password. Se tutto procede come sterato, l'output sarà un semplice "running"

Per verificare l'attuale configurazione del firewall usiamo il comando:

$ sudo firewall-cmd --list-all
public (active)
 target: default
 icmp-block-inversion: no
 interfaces: eth0
 sources:
 services: cockpit dhcpv6-client ssh
 ports:
 protocols:
 forward: yes
 masquerade: no
 forward-ports:
 source-ports:
 icmp-blocks:
 rich rules:

Da qui possiamo vedere che la zona attiva si chiama public (active) che a tale zona è assegnata l'interfaccia di rete eth0, sono permesse le comunicazioni in ingresso per i servizi cockpit dhcpv6-client ssh e sono permesse le risposte icmp icmp-block-inversion: no (esempio le risposte al comando ping).

La zona public, blocca per default qualunque comunicazione in ingresso se non specificato diversamente. Un concetto fondamentale di firewalld è che tutte le modifiche fatte alla configurazione sono temporanee almeno che non venga utilizzato il parametro --permanent prima del comando. Questo significa che se ad esempio volessimo aprire la porta 443 per permettere l'accesso in HTTPS con il seguente comando:

$ sudo firewall-cmd --zone=public --add-service=https

In questo modo al primo riavvio del VPS questa regola non sarà più presente. Se invece volessimo renderla permanente, basterà come detto:

$ sudo firewall-cmd –-permanent --zone=public --add-service=https

Modificare la porta del servizio ssh

Come direbbe il geniale scrittore contemporaneo Ken Follett sulla fiducia: "Fidarsi di qualcuno è come tenere dell'acqua nelle mani chiuse a coppa...", se parliamo poi di sicurezza informatica immaginate di tenere l'acqua nelle vostre mani con le dita completamente aperte... visto che non possiamo conoscere il "qualcuno" che teneterà di collegarsi al vostro VPS, non diamogli alcuna fiducia. Un suggerimento già dato per in altri articoli è quello di modificare la porta standard del servizio SSH. Questa semplice operazione diminuisce i tentativi di accesso non autorizzati da parte di script che, in automatico, provano a collegarsi sulla porta 22.

Prima di iniziare la configurazione decidiamo quale porta utilizzare, in questo esempio abbiamo scelto la porta 4322/TCP.

Step 1 - Configuriamo il firewall

Aggiungiamo alla configurazione del firewall la porta 4322/TCP

$ sudo firewall-cmd --permanent --zone=public --add-port=4322/tcp

Come potete notare abbiamo usato il parametro per rendere permanente la configurazione. A questo punto ricarichiamo tutti i parametri e accertiamoci che non vi siano errori:

$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-ports

Nell'output comparira la nostra 4322/tcp.

Step 2 - Configuriamo il servizio ssh

La procedura per modificare la porta utilizzata di default è abbastanza semplice, basta modificare il file /etc/ssh/sshd_config cambiando il numero della porta e successivamente riavviare il servizio. Per modificare il file /etc/ssh/sshd_config useremo l'editor nano, con il seguente comando:

$ sudo nano /etc/ssh/sshd_config

In questo file tutto ciò che inizia con "#" indica un commento e non viene considerato dal sistema, allo stesso tempo però ci dice qual è il suo valore di default. Cerchiamo la riga che inizia per #Port 22

Come mettere in sicurezza un VPS con sistema operativo Rocky Linux (livello base)

Eliminiamo il simbolo "#" e modifichiamo il valore della porta, oppure aggiungiamo una riga appena sotto al commento "#Port 22" con la nostra nuova porta ssh: Port 4322, non resta che salvare la modifica con CTRL+X e Y di conferma.

Affinché le modifiche divengano effettive bisogna riavviare il servizio:

# sudo systemctl restart sshd.service

Da questo momento se provare a collegarvi in ssh al vostro VPS riceverete il messaggio ssh: connect to host IP_VPS port 22: Connection refused. Per potersi collegare è necessario aggiungere al comando l'opzione -p seguita dalla nuova porta:

ssh mio_utente@IP_VPS -p 4322

Disabilitare l'accesso root via ssh

Per una maggiore sicurezza del vostra VPS è fortemente consigliato non permettere all'utente root l'accesso via ssh, a tale scopo in precedenza abbiamo creato un utente con privilegi limitati, ma che all'occorrenza possa diventare root, ora andremo ad impedire l'accesso in ssh a root. Anche in questo caso dovremo modificare il file di configurazione del servizio ssh come fatto per il cambio della porta stadard.

Apriamo il file /etc/ssh/sshd_config con l'editor nano ($ sudo nano /etc/ssh/sshd_config ) e cerchiamo la stringa "PermitRootLogin yes" e la impostiamo a "no" :

# Authentication:
#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
#PubkeyAuthentication yes

Salviamo la modifica con CTRL+X e Y di conferma. Riavviamo il servizio per rendere effettive le modifiche:

# sudo systemctl restart sshd.service

Anche se può apparire scomodo impedire a root di connettersi via ssh è un passaggio importante per aumentare il livello di sicurezza del VPS. Se avrete la necessità di collegarvi direttamente alla macchina con l'utente root potete sempre utilizzare la console web dalla dashboard del vostro account a questo link Console VPS GREEN.

Indice  degli articoli

Articoli più recenti