Files
learning/networking/035-ssh.md

3.7 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:

  • Username/password
  • 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.

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