Vai al contenuto
BeoHosting
BeoHosting
Technical

Cos'è un tunnel SSH e come usarlo

BeoHosting Team··11 min read di lettura
Cos'è un tunnel SSH e come usarlo

Introduzione al tunneling SSH

Un tunnel SSH è una tecnica che utilizza il protocollo SSH per creare una connessione crittografata tra due computer, più comunemente tra il tuo computer e un server VPS attraverso il quale è possibile inoltrare il traffico di rete. Il tunneling SSH, noto anche come port forwarding SSH, consente l'accesso a servizi altrimenti non disponibili da internet o la protezione dei dati che viaggiano su una rete non sicura. Questa tecnica è uno strumento fondamentale per amministratori di sistema, sviluppatori e chiunque lavori con server remoti.

Il principio di base di un tunnel SSH è semplice. Invece di connetterti direttamente a un servizio che potrebbe essere esposto a rischi di sicurezza, crei un canale SSH crittografato attraverso il quale inoltri il traffico. Tutti i dati che passano attraverso il tunnel sono crittografati con la crittografia AES, il che significa che anche se qualcuno intercetta il traffico di rete, non può leggere il contenuto della comunicazione. I tunnel SSH sono particolarmente utili quando si lavora con database, pannelli amministrativi o servizi interni che non dovrebbero essere accessibili pubblicamente.

Come funziona il protocollo SSH

Autenticazione

SSH utilizza la crittografia asimmetrica per l'autenticazione di client e server. Quando ti connetti per la prima volta a un server, il client SSH verifica il fingerprint della chiave del server e ti chiede se ti fidi. Dopo la conferma, il client memorizza la chiave nel file known_hosts e verifica automaticamente l'identità del server a ogni connessione successiva. Questo previene gli attacchi man-in-the-middle in cui un aggressore potrebbe impersonare il tuo server.

Per l'autenticazione dell'utente, SSH supporta password e chiavi SSH. Le chiavi SSH sono il metodo consigliato perché sono più sicure e pratiche. Una coppia di chiavi è composta da una chiave privata che conservi sul tuo computer e una chiave pubblica che metti sul server. La chiave privata non lascia mai il tuo computer e può essere ulteriormente protetta con una passphrase. Durante la connessione, il server utilizza la tua chiave pubblica per verificare che tu possieda la corrispondente chiave privata senza alcuno scambio di dati segreti.

Canale crittografato

Dopo un'autenticazione riuscita, SSH stabilisce un canale crittografato utilizzando la crittografia simmetrica, tipicamente AES-256. Tutti i dati che passano attraverso questo canale, inclusi comandi, file e traffico inoltrato, sono protetti dalle intercettazioni. SSH utilizza anche HMAC per la verifica dell'integrità dei dati, il che significa che qualsiasi modifica dei dati in transito viene rilevata. La compressione dei dati è opzionale ma può migliorare le prestazioni sulle connessioni più lente.

Tunnel SSH locale (Local Port Forwarding)

Concetto

Un tunnel SSH locale inoltra il traffico da una porta del tuo computer locale attraverso la connessione SSH a una porta di un server remoto o di una rete. Questo è il tipo di tunnel più comunemente utilizzato e serve per accedere a servizi disponibili solo sul server remoto o sulla sua rete locale. Il comando per creare un tunnel locale è ssh -L porta_locale:destinazione:porta_destinazione utente@server.

Ad esempio, se hai un database MySQL su un server in ascolto solo su localhost porta 3306, puoi creare un tunnel con ssh -L 3307:localhost:3306 utente@server. Dopodiché, sul tuo computer puoi connetterti a localhost:3307 e il traffico verrà inoltrato a MySQL sul server. Usa una porta locale diversa se hai già MySQL in esecuzione localmente. Il tunnel rimane attivo finché la sessione SSH è aperta.

Esempi pratici

Accedere a un pannello di amministrazione in ascolto solo sul localhost del server è uno scenario comune. Se hai un'applicazione web sulla porta 8080 disponibile solo localmente sul server, il comando ssh -L 8080:localhost:8080 utente@server ti consente di aprire http://localhost:8080 nel browser del tuo computer. Questo è più sicuro che aprire la porta sul firewall, perché l'accesso è limitato alle persone con accesso SSH al server.

Accedere a un servizio in una rete privata dietro il server è un altro scenario importante. Se il server ha accesso a una rete interna in cui si trova un database a 10.0.0.5:5432, puoi creare un tunnel con ssh -L 5432:10.0.0.5:5432 utente@server. Ora dal tuo computer puoi connetterti a localhost:5432 e accedere al database PostgreSQL nella rete privata. Questa è un'alternativa sicura alla VPN per accedere a singoli servizi.

Tunnel SSH remoto (Remote Port Forwarding)

Concetto

Un tunnel remoto funziona al contrario di uno locale. Inoltra il traffico da una porta del server remoto a una porta del tuo computer locale o della tua rete. Il comando è ssh -R porta_remota:destinazione:porta_destinazione utente@server. Questo è utile quando vuoi rendere disponibile sul server o esternamente un servizio del tuo computer locale. Ad esempio, se stai sviluppando un'applicazione web localmente sulla porta 3000 e vuoi mostrarla a un cliente senza deploy.

Il comando ssh -R 8080:localhost:3000 utente@server rende la tua applicazione locale disponibile su server:8080. Perché funzioni per l'accesso esterno, l'opzione GatewayPorts deve essere abilitata in sshd_config sul server. I tunnel remoti sono utili per lo sviluppo, i test e le situazioni in cui il tuo computer non ha un indirizzo IP pubblico ma devi fornire accesso a un servizio su di esso.

Considerazioni sulla sicurezza

I tunnel remoti richiedono attenzione perché aprono una porta sul server che potrebbe essere accessibile dall'esterno. Per impostazione predefinita, SSH lega la porta remota solo al localhost del server, il che significa che è accessibile solo dal server stesso. Se abiliti GatewayPorts, la porta diventa accessibile da qualsiasi indirizzo e dovresti usare regole del firewall per limitare l'accesso. Non lasciare mai un tunnel remoto attivo più del necessario e usa indirizzi IP specifici invece del binding wildcard.

Tunnel SSH dinamico (proxy SOCKS)

Concetto

Un tunnel dinamico crea un server proxy SOCKS sul tuo computer locale che inoltra tutto il traffico attraverso la connessione SSH. A differenza di un tunnel locale che inoltra il traffico per una porta specifica, un tunnel dinamico può inoltrare il traffico per qualsiasi destinazione. Il comando è ssh -D porta_locale utente@server. Ad esempio, ssh -D 1080 utente@server crea un proxy SOCKS sulla porta 1080.

Dopo aver creato il tunnel dinamico, configura il browser o il sistema operativo per usare il proxy SOCKS su localhost:1080. Tutto il traffico internet passa quindi attraverso il tunnel SSH crittografato fino al server ed esce su internet dall'indirizzo IP del server. Questo è utile per proteggere il traffico su reti WiFi pubbliche, accedere a contenuti con restrizioni geografiche o rendere anonima la navigazione. Firefox ha il supporto integrato per il proxy SOCKS nelle impostazioni di rete.

Quando usare un tunnel dinamico

Le reti WiFi pubbliche in bar, hotel e aeroporti sono note per i rischi di sicurezza. Un tunnel SSH dinamico crittografa tutto il tuo traffico internet, prevenendo le intercettazioni sulla rete non sicura. A differenza dei servizi VPN commerciali in cui devi fidarti del provider, un tunnel SSH usa il tuo server, dandoti il controllo completo dell'infrastruttura. Questo è particolarmente importante per lavorare con dati aziendali sensibili fuori dall'ufficio.

Opzioni avanzate e configurazione

Tunnel in background

L'opzione -f invia SSH in background dopo l'autenticazione, e -N dice a SSH di non eseguire comandi remoti. La combinazione ssh -fN -L 3306:localhost:3306 utente@server crea un tunnel in background senza aprire una sessione interattiva. Per avviare automaticamente i tunnel dopo il riavvio del sistema, usa lo strumento autossh, che ristabilisce automaticamente il tunnel se la connessione viene interrotta. Si installa con apt install autossh o yum install autossh.

Il file di configurazione SSH in ~/.ssh/config consente di definire tunnel che vengono creati automaticamente alla connessione a un server. Ad esempio, la riga LocalForward 3306 localhost:3306 nella sezione Host del tuo server stabilisce automaticamente il tunnel ogni volta che ti connetti. Questo elimina la necessità di ricordare un comando lungo e riduce la possibilità di errori. È possibile definire più tunnel per lo stesso host.

Multiplexing delle connessioni

L'opzione SSH ControlMaster consente di condividere una sola connessione SSH per più sessioni e tunnel. La prima connessione viene stabilita normalmente e tutte le successive usano la stessa connessione, velocizzando la connessione e riducendo il carico sul server. La configurazione nel file di configurazione SSH include ControlMaster auto, ControlPath ~/.ssh/sockets/%r@%h-%p e ControlPersist 600 per mantenere la connessione 10 minuti dopo la chiusura dell'ultima sessione.

Raccomandazioni di sicurezza per i tunnel SSH

Limitazione dell'accesso

Sui server di produzione, limita quali utenti possono creare tunnel utilizzando l'opzione AllowTcpForwarding in sshd_config. Puoi consentire solo il forwarding locale con AllowTcpForwarding local o disabilitare completamente i tunnel con AllowTcpForwarding no per gli utenti che non ne hanno bisogno. L'opzione PermitOpen limita verso quali destinazioni un tunnel può inoltrare il traffico, ad esempio PermitOpen localhost:3306 consente solo il tunnel MySQL.

Usa fail2ban per proteggere il servizio SSH dagli attacchi brute force e limita l'accesso SSH solo da indirizzi IP noti tramite un firewall. Cambia la porta SSH predefinita da 22 a una porta non standard, il che riduce le scansioni automatiche. Sui server BeoHosting, l'accesso SSH è protetto per impostazione predefinita con impostazioni di sicurezza moderne e il nostro team può aiutarti con la configurazione dei tunnel per le esigenze specifiche della tua infrastruttura.

Conclusione

I tunnel SSH sono uno strumento potente per la comunicazione sicura che consente l'accesso a servizi remoti, la protezione del traffico su reti non sicure e la creazione di connessioni sicure tra sistemi. I tunnel locali per accedere a servizi remoti, i tunnel remoti per esporre servizi locali e i tunnel dinamici per il proxy sono i tre tipi base che coprono la maggior parte degli scenari. Comprendere il tunneling SSH è una competenza essenziale per chiunque lavori con i server. Scopri di più sui server virtuali e sull'infrastruttura di rete.

BeoHosting Team

10+ anni di esperienza — Specialisti di web hosting e infrastrutture

  • Web Hosting
  • WordPress Hosting
  • VPS
  • Dedicated Serveri
  • Domeni
  • SSL
  • cPanel
  • LiteSpeed
  • Linux administracija
  • DNS

Ultimo aggiornamento: