Configurazioni avanzate di SSH (Parte III)

Secure Shell: configurazioni avanzate e best practices per mettere in sicurezza SSH
By Admin | Dicembre 28, 2022

Continuiamo il nostro viaggio nelle principali configurazioni di sicurezza per l'accesso sicuro a sistemi remoti tramite SSH.

Potremmo avere l'esigenza, e ciò è fortemente consigliato, di autorizzare il login soltanto di alcuni utenti, così come di negarlo esplicitamente per altri. Supponiamo sul nostro sistema di avere 3 utenti, admin1, user2 e user3. Vogliamo consentire l'accesso in SSH solo all'utente admin1, disabilitandolo per gli altri due.

Sempre nel file di configurazione sshd_config ci basterà dichiararlo esplicitamente tramite i record:

AllowUsers admin1
DenyUsers user2 user3

Le impostazioni possono essere "raffinate" utilizzando anche il gruppo a cui appartengono i vari utenti, impostando i record:

AllowGroups "gruppi autorizzati"
DenyGroups "gruppi non autorizzati"

Possiamo inoltre limitare l'accesso SSH da uno specifico IP, supponiamo di avere un amministratore di rete che opera da un PC con IP 192.168.1.155 sul nostro server con accesso SSH, ed un utente che ha necessità di loggarsi da un sistema esterno dotato di IP fisso, supponiamo 99.100.199.200. Il primo raggiunge il server sulla porta 22, il secondo sulla porta 2222. Possiamo configurare SSH per "ascoltare" solo il traffico proveniente da tali IP con le istruzioni:

ListenAddress 192.168.1.155:22
ListenAddress 99.100.199.200:2222

Possiamo aggiungere tutti gli indirizzi che vogliamo, all'occorrenza modificando le stringhe anche per formato IPv6.

Specifichiamo che una configurazione che raggiunga gli stessi scopi può essere ottenuta tramite configurazione firewall, filtrando il traffico per IP su opportune porte. Vedremo in calce a questo articolo un piccolo esempio.

Esistono poi numerose altre configurazioni "di nicchia" per operare un fine-tuning del comportamento che vogliamo imporre al nostro server SSH.

Ad esempio, per l'accesso tramite password, possiamo impostare un numero massimo di tentativi in cui l'utente può inserire una password errata prima della chiusura automatica della connessione. Il record da modificare o attivare è (vogliamo impostare massimo 3 tentativi):

MaxAuthTries 3

Per il numero massimo di sessioni attive, cioè quante connessioni possiamo aprire:

MaxSessions 5

Dopo una connessione, possiamo configurare un tempo massimo di "idle" inattività prima di terminarla automaticamente:

ClientAliveInterval 300 (tempo in secondi, massimo 5 minuti di inattività)
ClientAliveCountMax 1

In genere il tempo di timeout che vogliamo impostare per la connessione deve essere ricavato secondo la seguente relazione timeout = ClientAliveInterval * ClientAliveCountMax Infine, è buona norma monitorare i log di accesso in SSH, impostando opportunamente la "verbosità" dei file log tramite:

LogLevel DEBUG

Le opzioni da prendere in considerazione per un certo livello di verbosità sono VERBOSE e DEBUG. Le stesse potranno esserci utli in caso di incident-response o in caso di problemi nell'autenticazione di qualche utente.

Infine, due parole sul filtraggio del traffico per l'accesso al server SSH. Per varie esigenze, potremmo aver bisogno di impostare regole a livello firewall piuttosto che modificare il file di configurazione di SSH.

Supponiamo di trovarci in uno dei casi sovracitati, vogliamo consentire l'accesso alla macchina su una certa porta solo da un determinato IP. Per l'esempio prenderemo in configurazione Iptables ampiamente diffuso sui sistemi UNIX. Vediamo un classico esempio per regolamentare questa situazione:

$ iptables -A INPUT -p tcp -s ip_address --dport port -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Questa regola ci permette di aprire al traffico la porta che abbiamo scelto per SSH (port) all'IP di nostro interesse (ip_address).

Possiamo verificare subito l'aggiunta di tale regola dallo stesso Iptables con:

$ iptables -L

Iptables possiede una sconfinata varietà di opzioni settabili in maniera sempre più articolata, la stessa va ovviamente oltre lo scopo di questo articolo. Il lettore può riferirsi al manuale e alle varie guide per configurazioni più specifiche, relative a SSH e ad ogni altro ambito.

Solo per completezza, nei sistemi UNIX abbiamo a disposizione Ufw che fornisce un'interfaccia semplificata per Iptables. La stessa configurazione può raggiungeresi in maniera più diretta e comprensibile con il comando:

$ ufw allow from to any port 22

Cioè, autorizziamo il traffico sulla porta 22 solo dall'indirizzo ip specificato.

Concludiamo questo articolo ricordando che, per qualsiasi dubbio, i manuali ufficiali di SSH ed i principali software in ambito UNIX contengono una documentazione estensiva ed esaustiva raggiungibile con un semplice.

$ man ssh

Qualsivoglia richiesta può essere inviata a NAOSDATA che offre servizi di consulenza, implementazione e managment specifico sulle infrastrutture ICT.

Ci auguriamo che questo articolo vi sia piaciuto e vi possa essere d'aiuto nell'orientarvi nel mondo SSH. Se apprezzate il nostro lavoro seguite i nostri profili su Facebook e LinkedIn.

Creative Commons License
Questo lavoro è offerto tramite licenza Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.


Risorse e Link: