Linux Sysadmin Security Networking SSH VPN / Proxy

Guida Completa SSH: Chiavi Ed25519, Tunneling & SOCKS5 Proxy con SwitchyOmega

SSH (Secure Shell) è un protocollo crittografato fondamentale per l'amministrazione di server Linux, l'esecuzione remota di comandi, il trasferimento sicuro di dati e la creazione di tunnel di rete avanzati. Questa guida illustra dalle basi fino a tecniche avanzate di Dynamic Port Forwarding (SOCKS5 proxy) per navigare sul web in modo cifrato con l'estensione SwitchyOmega.

Guida completa all'uso di SSH, Tunneling e SOCKS5 Proxy su Linux

Panoramica della connessione SSH, gestione chiavi crittografiche e configurazione del proxy SOCKS5 con SwitchyOmega.

1. Cos'è SSH e a cosa serve

Il protocollo SSH (Secure Shell) è lo standard de facto per la gestione remota e sicura di sistemi operativi Unix-like e server Linux. Progettato come sostituto crittograficamente sicuro di protocolli obsoleti e vulnerabili come telnet, rlogin e FTP in chiaro, SSH garantisce riservatezza, integrità dei dati e autenticazione forte attraverso una connessione client-server completamente cifrata.

Opera tipicamente sulla porta TCP 22 e fornisce quattro funzionalità essenziali:

  • Accesso remoto interattivo: Controllo della shell remota con crittografia end-to-end.
  • Esecuzione remota di comandi: Automazione di task, script e pipeline di deployment senza avviare una sessione interattiva.
  • Trasferimento sicuro di file: Protocolli SFTP e SCP integrati.
  • Tunneling e Port Forwarding: Creazione di canali sicuri per inoltrare porte locali, remote e creare proxy dinamici SOCKS5 (simulando un tunnel VPN).
Crittografia di SSH SSH impiega crittografia asimmetrica per la fase di handshake e autenticazione iniziale, e crittografia simmetrica ad alte prestazioni (es. ChaCha20-Poly1305 o AES-256-GCM) per la sessione dati, garantendo velocità e massima sicurezza.

2. Connessione Base e Gestione Utenti

La sintassi fondamentale del client SSH da riga di comando è:

ssh [opzioni] username@indirizzo_server

Esempi Pratici di Connessione:

# Connessione classica su porta standard 22
ssh [email protected]

# Connessione su porta personalizzata (es. 2222)
ssh -p 2222 [email protected]

# Esecuzione di un comando remoto singolo senza aprire la shell
ssh [email protected] "uptime && free -h"

# Modalità verbose per diagnosticare problemi di connessione
ssh -v [email protected]

Alla prima connessione verso un nuovo host, il client SSH mostra il fingerprint della chiave del server e chiede conferma per salvarla nel file ~/.ssh/known_hosts. Digita yes per confermare e procedere con l'inserimento della password.

3. Autenticazione con Chiave Pubblica (Ed25519)

L'autenticazione tramite password è vulnerabile ad attacchi brute-force. L'approccio raccomandato consiste nell'utilizzare una coppia di chiavi crittografiche (una chiave privata che rimane sul tuo PC locale e una chiave pubblica installata sul server).

Perché Ed25519 invece di RSA? L'algoritmo basato su curve ellittiche Ed25519 è superiore a RSA: genera chiavi più corte (256-bit), è estremamente più veloce nella firma e offre una sicurezza equivalente a un'enorme chiave RSA da 3072/4096-bit, risultando immune a molti attacchi di temporizzazione.

Passo 1: Generare la Coppia di Chiavi

Sul tuo computer locale, esegui il generatore di chiavi specificando la tua email o etichetta:

ssh-keygen -t ed25519 -C "[email protected]"

Il sistema ti chiederà dove salvare il file (premi Invio per confermare la cartella predefinita ~/.ssh/id_ed25519) e ti inviterà a inserire una passphrase sicura per proteggere la chiave privata.

Passo 2: Copiare la Chiave Pubblica sul Server Remoto

Utilizza l'utility integrata ssh-copy-id che aggiungerà in automatico la chiave pubblica al file ~/.ssh/authorized_keys sul server:

# Su porta standard
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]

# Se il server ascolta su una porta personalizzata
ssh-copy-id -p 2222 -i ~/.ssh/id_ed25519.pub [email protected]

Passo 3: Configurare i Permessi di Sicurezza dei File SSH

OpenSSH rifiuta di funzionare se i permessi sui file di configurazione sono troppo permissivi. Assicurati che i permessi siano corretti:

# Sul computer client
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub

# Sul server remoto
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Passo 4: Utilizzare l'Agente SSH (SSH-Agent)

Per non dover digitare la passphrase della chiave ad ogni accesso, avvia l'agente SSH e carica la chiave:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

4. File di Configurazione Client (~/.ssh/config)

Invece di digitare ogni volta indirizzi IP lunghi, nomi utente, porte e percorsi di chiavi, puoi definire degli alias all'interno del file ~/.ssh/config:

# Server Principale di Produzione
Host production-server
    HostName 198.51.100.24
    User username
    Port 2222
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60
    ServerAliveCountMax 3

# Homelab Locale
Host homelab
    HostName 192.168.1.50
    User root
    IdentityFile ~/.ssh/id_ed25519

Da questo momento puoi connetterti digitando semplicemente:

ssh production-server

5. Port Forwarding e Tunneling SSH

Il tunneling SSH permette di incapsulare qualsiasi connessione TCP all'interno del canale crittografato. Esistono tre modalità principali:

Modalità Flag Direzione Caso d'Uso Tipico
Local Forwarding -L [porta_locale]:[host_dest]:[porta_dest] Locale → Remoto Accedere a database o servizi web interni al server (es. MySQL 3306, Cockpit 9090) senza esporli su Internet.
Remote Forwarding -R [porta_remota]:[host_dest]:[porta_dest] Remoto → Locale Esporre un web server in sviluppo locale sul server pubblico.
Dynamic Forwarding -D [porta_locale] Locale → SOCKS5 Proxy Creare un proxy SOCKS5 dinamico per instradare tutto il traffico web del browser (funzione VPN).

Esempio di Local Port Forwarding:

Inoltra la porta 8080 del tuo computer alla porta interna 80 del server remoto:

ssh -L 8080:localhost:80 -N [email protected]

Aprendo http://localhost:8080 nel browser locale, visualizzerai il servizio web attivo sul server remoto.

6. Creazione SOCKS5 Proxy con SSH & Connessione con SwitchyOmega (Tunnel VPN)

Uno degli utilizzi più potenti e versatili di SSH è il Dynamic Port Forwarding (flag -D). Con un unico comando, SSH trasforma il server remoto in un server proxy SOCKS5 attivo localmente.

Tutto il traffico inviato a questo socket viene cifrato, inviato al server SSH e da lì inoltrato verso Internet. Collegando il browser (ad esempio con l'estensione Proxy SwitchyOmega), la tua navigazione web acquisisce l'indirizzo IP pubblico del server remoto e bypassa restrizioni di rete, firewall locali o reti Wi-Fi pubbliche non protette, esattamente come una VPN ma senza installare alcun demone aggiuntivo sul server!

Passo 1: Avviare il Tunnel SOCKS5 da Terminale

Esegui il comando SSH specificando la porta locale desiderata (solitamente la 1080 o 10808):

# Avvio del proxy SOCKS5 con compressione dati (-C) e senza shell remota (-N)
ssh -D 1080 -C -N [email protected]

# Oppure in background / modalità demone (-f) e silenziosa (-q):
ssh -D 1080 -f -N -C -q [email protected]

Spiegazione dei parametri:

  • -D 1080: Apre un socket di ascolto locale SOCKS5 sulla porta 1080 (127.0.0.1:1080).
  • -C: Abilita la compressione zlib dei flussi per velocizzare la navigazione web.
  • -N: Indica a SSH di non eseguire comandi remoti e non aprire la shell (ottimizzato solo per inoltro traffico).
  • -f: Manda il processo SSH in background subito dopo aver autenticato la sessione.

Configurazione Permanente in ~/.ssh/config:

Puoi aggiungere un blocco dedicato nel tuo file di configurazione per avviarlo in qualsiasi momento con un solo comando:

Host vpn-tunnel
    HostName server.domain.com
    User username
    Port 22
    DynamicForward 1080
    ServerAliveInterval 30
    ServerAliveCountMax 3
    IdentityFile ~/.ssh/id_ed25519

Per attivare il tunnel basterà digitare:

ssh -N vpn-tunnel

Passo 2: Configurare l'Estensione SwitchyOmega nel Browser

Proxy SwitchyOmega è una delle estensioni più potenti e affidabili per gestire proxy su browser Chromium (Google Chrome, Brave, Edge) e Mozilla Firefox.

  1. Installa l'estensione Proxy SwitchyOmega dal Web Store del tuo browser.
  2. Clicca sull'icona dell'estensione e seleziona "Options" (Opzioni).
  3. Nel menu laterale a sinistra, clicca sul pulsante "+ New profile".
  4. Assegna un nome al profilo (es. SSH-VPN-Tunnel) e seleziona come tipologia "Proxy Profile", quindi premi "Create".
  5. Nella schermata di configurazione del profilo:
    • Scheme / Protocol: Seleziona SOCKS5 dal menu a tendina.
    • Server: Inserisci 127.0.0.1 (oppure localhost).
    • Port: Inserisci 1080 (o la porta impostata con il flag -D).
  6. Clicca sul pulsante verde "Apply changes" a sinistra per salvare la configurazione.
DNS Remoto tramite SOCKS5 (Zero DNS Leaks)
Con il protocollo SOCKS5 configurato su SwitchyOmega, anche le richieste di risoluzione dei nomi a dominio (DNS) vengono inoltrate cifrate attraverso il tunnel SSH verso il server remoto, evitando qualsiasi leak DNS da parte del provider Internet locale.

Passo 3: Attivare il Profilo e Verificare il Tunnel

  1. Clicca sull'icona circolare di SwitchyOmega nella barra degli strumenti del browser.
  2. Seleziona il profilo SSH-VPN-Tunnel appena creato (l'icona assumerà il colore identificativo del profilo).
  3. Visita un sito di verifica IP come https://ifconfig.me o https://ipinfo.io: l'indirizzo IP pubblico mostrato sarà quello del tuo server remoto!
  4. Per terminare la sessione VPN, seleziona [Direct] dall'estensione SwitchyOmega e chiudi il processo SSH (killall ssh o premendo Ctrl + C nel terminale).

Passo 4: Regole Avanzate con "Auto Switch" (Routing Intelligente)

Con SwitchyOmega puoi creare un profilo di tipo "Auto Switch": il browser navigherà normalmente con la tua connessione locale per tutti i siti generici, ma instraderà automaticamente attraverso il tunnel SSH solo specifici domini (es. pannelli interni aziendali *.internal.lan, *.domain.com o indirizzi IP della tua subnet privata).

7. Trasferimento File Sicuro (SCP, SFTP & Rsync)

SSH include strumenti ad alte prestazioni per sincronizzare e copiare file in modo cifrato:

Utilizzo di SCP (Secure Copy):

# Copia di un singolo file dal PC locale al server
scp backup.tar.gz [email protected]:/var/backups/

# Copia ricorsiva di un'intera cartella dal server al PC locale
scp -r [email protected]:/var/www/html/ ./sito_locale_backup/

Utilizzo di Rsync over SSH (Consigliato per grandi volumi di dati):

# Sincronizzazione incrementale con barra di avanzamento e compressione
rsync -avzh --progress -e "ssh -p 22" ./progetti/ [email protected]:/home/username/progetti/

8. Jump Host & Bastion Server (ProxyJump)

In architetture aziendali o homelab complesse, i server interni non hanno un IP pubblico diretto e sono accessibili solo tramite un server gateway (denominato Bastion Host o Jump Host).

Puoi collegarti direttamente al server privato con il parametro -J:

ssh -J [email protected]:22 [email protected]

Oppure configurarlo permanentemente nel tuo ~/.ssh/config:

Host bastion
    HostName bastion.domain.com
    User bastion_user

Host internal-node-1
    HostName 10.0.0.45
    User internal_user
    ProxyJump bastion

Digitando ssh internal-node-1, SSH stabilirà la connessione attraverso il bastion in modo completamente trasparente.

9. Hardening del Server SSH (/etc/ssh/sshd_config)

Per proteggere il tuo server Linux da scansioni automatizzate e tentativi di intrusione, modifica il file di configurazione del demone /etc/ssh/sshd_config:

# 1. Disabilita il login con password (forza l'uso di chiavi Ed25519)
PasswordAuthentication no
ChallengeResponseAuthentication no

# 2. Impedisci l'accesso diretto all'utente root con password
PermitRootLogin prohibit-password

# 3. Modifica la porta predefinita per abbattere il rumore dei bot
Port 2222

# 4. Limita gli utenti autorizzati ad accedere
AllowUsers username admin

# 5. Riduci i tentativi massimi di autenticazione e il timeout
MaxAuthTries 3
LoginGraceTime 30

# 6. Disabilita inoltri X11 e permessi vuoti non necessari
X11Forwarding no
PermitEmptyPasswords no
Testare la Sintassi Prima del Riavvio Prima di riavviare o ricaricare il demone SSH, verifica sempre la sintassi del file di configurazione con sudo sshd -t per evitare di rimanere bloccati fuori dal server in caso di errori tipografici!

Applica le modifiche ricaricando il servizio:

sudo sshd -t
sudo systemctl reload ssh   # Su Debian / Ubuntu
# oppure: sudo systemctl reload sshd   # Su RHEL / CentOS / Arch

10. Risoluzione dei Problemi Comuni (FAQ)

1. Errore: Host key verification failed / WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

Questo errore si verifica quando il server remoto è stato reinstallato o la sua chiave di host è cambiata. Per aggiornare la chiave registrata:

ssh-keygen -R 192.168.1.10

2. Errore: Permission denied (publickey)

Verifica che la tua chiave pubblica sia inserita in ~/.ssh/authorized_keys sul server e controlla i permessi con:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

3. Errore: bind: Address already in use durante l'apertura del Socket SOCKS5

Significa che un processo precedente sta ancora occupando la porta 1080. Per individuarlo e terminarlo:

# Trova il processo attivo sulla porta 1080
lsof -i :1080

# Oppure termina rapidamente il processo occupante
fuser -k 1080/tcp

11. Riepilogo & Conclusione

SSH non è soltanto un emulatore di terminale remoto, ma un coltellino svizzero di rete in grado di cifrare trasferimenti file, superare firewall complessi con i Jump Host e proteggere l'intera navigazione web trasformandosi in un tunnel VPN con proxy SOCKS5 e SwitchyOmega.

Adottando chiavi moderne Ed25519, configurando profili in ~/.ssh/config e applicando le regole di hardening su sshd_config, otterrai un'infrastruttura di gestione sicura, ultra-performante e a prova di intrusioni.