5.0 KiB
SSH
SSH
, acronimo di Secure Shell, è un protocollo dell'Application layer che consente l'accesso remoto sicuro a host remoti.
Caratteristiche principali
- SSH utilizza la crittografia per proteggere le comunicazioni tra il client e il server
- Si basa su TCP ed è associato alla well-known port 22
- Supporta diversi metodi di autenticazione, tra cui:
- Username/password
- Chiave pubblica
Architettura SSH
SSH è un protocollo dell'application layer, ma la sua architettura è strutturata in moduli distinti che operano tra l'Application layer e il Transport layer.
Connection Layer Protocol
Questo modulo gestisce le sessioni e la comunicazione client/server all'interno della connessione SSH. Sfrutta il protocollo SSH per implementare diverse funzionalità, come SFTP (Secure File Transfer Protocol), tunneling SSH ecc.
User Authentication Protocol
Questo modulo si occupa dell'autenticazione degli utenti, implementando diversi metodi:
- Autenticazione classica con username/password
- Autenticazione tramite chiave pubblica: lato client, viene sempre utilizzata la crittografia asimmetrica. Il client genera una coppia di chiavi (pubblica e privata) e memorizza la chiave pubblica nel file
.ssh/authorized_keys
del server. Durante il processo di autenticazione, il server crea un messaggio randomico, cifrato con la chiave pubblica del client, e lo invia a quest'ultimo. Solo il client, utilizzando la sua chiave privata, putrá decifrare il messaggio. Se il messaggio decifrato corrisponde a quello inviato, il server può confermare l'identità del client, a meno che la chiave privata non sia stata compromessa
Transport Layer Protocol
Questo modulo è specifico di SSH e non deve essere confuso con il Transport layer del modello ISO/OSI. È un insieme di standard e procedure finalizzate a stabilire un canale di comunicazione cifrato. Le sue principali funzionalità includono:
- Autenticazione del server: il server verifica la propria identità mediante crittografia asimmetrica. Genera una coppia di chiavi, fornendo la chiave pubblica ai client che desiderano connettersi. La chiave privata rimane sul server e viene utilizzata per autenticarlo. Durante lo scambio delle chiavi, il server invia un messaggio randomico, firmato con la chiave privata, al client. Il client utilizza la chiave pubblica per decifrare il messaggio, confermando così l'identità del server. Questo processo protegge il client da attacchi man-in-the-middle, anche se non offre una garanzia assoluta, poiché le chiavi potrebbero essere state rigenerate o il server manomesso.
- Scambio dei messaggi: viene utilizzata la crittografia simmetrica a chiave singola per lo scambio dei messaggi, in quanto meno onerosa dal punto di vista computazionale
- Cifratura: SSH supporta vari algoritmi di cifratura
- Compressione: Vengono utilizzati algoritmi di compressione per ottimizzare lo scambio dei dati
- Integrità dei pacchetti: SSH implementa meccanismi per garantire che i pacchetti di dati non vengano alterati durante la trasmissione
File di Configurazione SSH
Tutti i client si connettono a un server remoto utilizzando il protocollo SSH tramite il programma ssh
. Il processo sul server che gestisce le richieste dei client è sshd
(Secure Shell Daemon).
Il file di configurazione per il server
SSH si trova in /etc/ssh/sshd_config
, mentre il file di configurazione per i client SSH è situato in /etc/ssh/ssh_config
.
I permessi consigliati per garantire la sicurezza delle chiavi SSH e delle configurazioni associate sono i seguenti:
.ssh
: 700authorized_keys
: 600
Servizio SSH
Per controllare lo stato del servizio SSH, avviare o fermare il daemon, utilizzare i seguenti comandi:
systemctl status ssh.service # Verifica lo stato del servizio SSH
systemctl start ssh.service # Avvia il servizio SSH
systemctl stop ssh.service # Ferma il servizio SSH
Creazione e gestione di chiavi SSH
Le chiavi generate lato server e utilizzate nel processo di validazione dell'identità si trovano nella directory /etc/ssh
del server. In particolare:
> ll /etc/ssh/
Permissions Size User Group Date Modified Name
.rw------- 505 root root 4 Jan 15:46 ssh_host_ecdsa_key
.rw-r--r-- 173 root root 4 Jan 15:46 ssh_host_ecdsa_key.pub
.rw------- 399 root root 4 Jan 15:46 ssh_host_ed25519_key
.rw-r--r-- 93 root root 4 Jan 15:46 ssh_host_ed25519_key.pub
.rw------- 2.6k root root 4 Jan 15:46 ssh_host_rsa_key
.rw-r--r-- 565 root root 4 Jan 15:46 ssh_host_rsa_key.pub
Quando un client si connette per la prima volta a un server tramite SSH, poiché non ha ancora chiavi associate a questo target nel file known_hosts
, situato nella directory ~/.ssh
, viene richiesto di accettare e memorizzare il fingerprint, che corrisponde alle chiavi pubbliche del server.
Per ulteriori informazioni sulla creazione e gestione delle chiavi lato client, riferirsi all'articolo Creazione e gestione di chiavi SSH.