GNU/Linux >> Linux Esercitazione >  >> Linux

Come configurare il tunnel SSH inverso su Linux

Reverse SSH è una tecnica che può essere utilizzata per accedere ai sistemi (che si trovano dietro un firewall) dal mondo esterno.

Come già saprai, SSH è un protocollo di rete che supporta la comunicazione crittografica tra i nodi di rete. Usando questo protocollo, puoi eseguire un accesso remoto sicuro, una copia sicura da/su un computer remoto ecc.

In genere esegui le seguenti operazioni per connetterti a un server remoto in modo sicuro usando il comando ssh.

$ ssh [your-account-login]@[server-ip]

Cos'è Reverse SSH?

SSH è un ottimo strumento per accedere in modo sicuro a macchine o server remoti. Tuttavia, il problema sorge quando si tenta di connettersi a un server remoto che si trova dietro un firewall e questo firewall nega qualsiasi connessione in entrata o richiesta di trasferimento dati che non ha una precedente richiesta in uscita. Ciò significa che sarebbero consentite solo le connessioni avviate dalla macchina server remota. Questo è un vero problema per chi vuole accedere a questa macchina server da remoto.

Reverse SSH fornisce una tecnica attraverso la quale puoi simulare un normale SSH su questa macchina server remota.

Il problema principale è che il firewall rifiuta la connessione ssh che la tua macchina sta tentando di stabilire con la macchina server remota. Ma sai che lo stesso firewall non avrà alcun problema con le connessioni provenienti dalla macchina server. Quindi, perché non chiedere a qualcuno che è seduto dietro il firewall di fare qualcosa con cui puoi raggiungere il tuo obiettivo di accedere in remoto al server. Per fare ciò dobbiamo usare l'opzione ssh -R.

Questa è la descrizione dell'opzione ssh -R dalla pagina man:

-R [bind_address:]porta:host:hostport

Specifica che la porta specificata sull'host remoto (server) deve essere inoltrata all'host specificato e la porta sul lato locale. Funziona allocando un socket per ascoltare la porta sul lato remoto e ogni volta che viene stabilita una connessione a questa porta, la connessione viene inoltrata sul canale sicuro e viene stabilita una connessione alla porta host hostport dalla macchina locale.

Quindi puoi usare il comando ssh, con l'opzione -R, (dal server nel nostro caso) per connetterti alla tua macchina, allocare una porta lì e assicurarti che qualsiasi richiesta di connessione su quella porta venga inoltrata alla porta ssh del server remoto.

Invece della tua macchina che esegue un ssh, la macchina del server esegue un ssh e tramite il port forwarding si assicura che tu possa tornare alla macchina del server.

Come creare un tunnel SSH inverso?

Ecco il comando che il tuo amico seduto sul lato server remoto dovrebbe eseguire sul server:

ssh -fN -R 7000:localhost:22 username@yourMachine-ipaddress

Quindi questa richiesta di connessione ssh proveniente dal server remoto alla tua macchina assicurerà che qualsiasi richiesta di connessione ssh per la porta 7000 sulla tua macchina venga inoltrata alla porta 22 del server remoto.

Ora esegui una richiesta di connessione ssh dalla tua macchina alla tua macchina alla porta 7000:

ssh username@localhost -p 7000

Qui, anche se può sembrare che tu stia eseguendo ssh su localhost, ma la tua richiesta verrebbe inoltrata all'host remoto. Quindi, dovresti usare il tuo account "nome utente" sul server remoto e quando ti viene richiesta la password, inserisci la password corrispondente.

Questo dovrebbe chiarire la maggior parte degli aspetti relativi alla tecnica ssh inversa. Ma c'è un problema. Il problema è che devi chiedere a un tuo amico, che è seduto dietro il firewall, di creare prima una connessione ssh. Questo non è fattibile ogni volta.

Per superare questo problema, quello che puoi fare è configurare una macchina che è fuori dal firewall (proprio come il tuo) in modo che sia sempre accesa. Chiamiamo questa macchina come macchina_z.

Il vantaggio di machine_z è che una volta puoi eseguire questo ssh inverso impostato su di esso e lasciarlo così. In qualsiasi momento, quando devi accedere a una macchina remota, puoi accedere a machine_z su una porta specifica (come mostrato in precedenza) e la tua richiesta di connessione verrà inoltrata alla macchina server remota e Voilà, eseguirai i comandi su remoto server.

In una nota correlata, puoi anche impostare nessuna password SSH per connetterti a un altro server senza inserire la password.

Alcune impostazioni che devi configurare su machine_z includerebbero :

  • Assicurati che i parametri TCPKeepAlive, ClientAliveInterval, ClientAliveCountMax e GatewayPorts siano impostati su valori appropriati. Questi parametri si trovano nel file /etc/sshd_config o /etc/ssh/sshd_config
  • Se apporti alcune modifiche ai parametri precedenti, dovresti riavviare il demone sshd per riflettere le modifiche.
  • Inoltre, assicurati di eseguire il primo comando ssh (che viene eseguito dal server remoto a machine_z) usando il comando nohup in modo che questa sessione ssh diventi immune da riattacchi che possono verificarsi quando un utente si disconnette.

Linux
  1. Configura Apache Traffic Server come proxy inverso su Linux

  2. Come SSH su Linux da Android

  3. Come configurare SSH senza password su Linux

  4. Come configurare l'accesso SSH senza password in Linux

  5. Come eseguire SCP dal server Linux al client Windows

Come configurare il server di backup utilizzando Rsnapshot in Linux

Come configurare il server multimediale in streaming utilizzando Jellyfin in Linux

Come impostare l'autenticazione a più fattori per SSH in Linux

Ssh:come funziona il tunneling Ssh inverso?

Come SSH nel tuo server Linux da Windows

Come eseguire l'SSH sul server tramite Linux