GNU/Linux >> Linux Esercitazione >  >> Linux

Ssh:come funziona il tunneling Ssh inverso?

A quanto ho capito, i firewall (presupponendo le impostazioni predefinite) negano tutto il traffico in entrata che non ha precedente traffico in uscita corrispondente.

Basato su Inversione di una connessione ssh e Tunneling SSH semplificato, il tunneling SSH inverso può essere utilizzato per aggirare le fastidiose restrizioni del firewall.

Vorrei eseguire i comandi della shell su una macchina remota. La macchina remota ha il proprio firewall ed è protetta da un firewall aggiuntivo (router). Ha un indirizzo IP come 192.168.1.126 (o qualcosa di simile). Non sono protetto da un firewall e conosco l'indirizzo IP della macchina remota visto da Internet (non l'indirizzo 192.168.1.126). Inoltre, posso chiedere a qualcuno di eseguire ssh (something) come root prima sulla macchina remota.

Qualcuno potrebbe spiegarmi, passo dopo passo, come funziona il tunneling SSH inverso per aggirare i firewall (i firewall delle macchine locali e remote e il firewall aggiuntivo tra di loro)?

Qual è il ruolo degli switch (-R , -f , -L , -N )?

Risposta accettata:

Mi piace spiegare questo genere di cose attraverso la visualizzazione. 🙂

Pensa alle tue connessioni SSH come a tubi. Grandi tubi. Normalmente, raggiungerai questi tubi per eseguire una shell su un computer remoto. La shell viene eseguita in un terminale virtuale (tty). Ma conosci già questa parte.

Pensa al tuo tunnel come a un tubo dentro un tubo. Hai ancora la grande connessione SSH, ma l'opzione -L o -R ti consente di impostare un tubo più piccolo al suo interno.

Ogni tubo ha un inizio e una fine. Il grande tubo, la tua connessione SSH, è iniziato con il tuo client SSH e finisce sul server SSH a cui ti sei connesso. Tutti i tubi più piccoli hanno gli stessi punti finali, tranne per il fatto che il ruolo di "inizio" o "fine" è determinato dall'utilizzo di -L o -R (rispettivamente) per crearli.

(Non l'hai detto, ma suppongo che la macchina "remota" che hai menzionato, quella dietro il firewall, possa accedere a Internet utilizzando Network Address Translation (NAT). Questo è piuttosto importante, quindi correggi questa ipotesi se è falsa.)

Quando crei un tunnel, specifichi un indirizzo e una porta su cui risponderà e un indirizzo e una porta a cui verrà consegnato. Il -L opzione dice al tunnel di rispondere sul lato locale del tunnel (l'host che esegue il client). Il -R opzione dice al tunnel di rispondere sul lato remoto (il server SSH).

Quindi... Per poter eseguire SSH da Internet in una macchina dietro un firewall, è necessario che la macchina in questione apra una connessione SSH al mondo esterno e includa un -R tunnel il cui punto di “ingresso” è il lato “remoto” della sua connessione.

Dei due modelli mostrati sopra, vuoi quello a destra.

Correlati:esiste un modo per lavorare con CollectionViews nidificate in Xamarin Forms con MvvmCross??

Dall'host con firewall:

ssh -f -N -T -R22222:localhost:22 yourpublichost.example.com

Questo dice al tuo cliente di stabilire un tunnel con un -R punto di ingresso dell'emoticon Tutto ciò che si collega alla porta 22222 all'estremità del tunnel raggiungerà effettivamente "localhost porta 22", dove "localhost" è dalla prospettiva del punto di uscita del tunnel (ad esempio il tuo client ssh).

Le altre opzioni sono:

  • -f dice a ssh di eseguire automaticamente lo sfondo dopo l'autenticazione, quindi non devi sederti a eseguire qualcosa sul server remoto affinché il tunnel rimanga attivo.
  • -N dice che vuoi una connessione SSH, ma in realtà non vuoi eseguire alcun comando remoto. Se stai creando solo un tunnel, l'inclusione di questa opzione consente di risparmiare risorse.
  • -T disabilita l'allocazione pseudo-tty, che è appropriata perché non stai cercando di creare una shell interattiva.

Ci sarà una sfida per la password a meno che tu non abbia impostato le chiavi DSA o RSA per un accesso senza password.

Tieni presente che è VIVAMENTE consigliato di utilizzare un account usa e getta (non il tuo login) che hai configurato solo per questo tunnel/cliente/server.

Ora, dalla tua shell su yourpublichost , stabilisci una connessione all'host con firewall tramite il tunnel:

ssh -p 22222 [email protected]

Riceverai una sfida con la chiave dell'host, poiché probabilmente non hai mai colpito questo host prima. Quindi riceverai una sfida per la password per il username account (a meno che tu non abbia impostato le chiavi per l'accesso senza password).

Se hai intenzione di accedere regolarmente a questo host, puoi anche semplificare l'accesso aggiungendo alcune righe al tuo ~/.ssh/config file:

host remotehostname
    User remoteusername
    Hostname localhost
    Port 22222

Regola remotehostname e remoteusername stare bene. Il remoteusername il campo deve corrispondere al tuo nome utente sul server remoto, ma remotehostname può essere qualsiasi nome host adatto a te, non deve corrispondere a nulla di risolvibile.

  • Esponi l'endpoint inverso su un host non locale IP
  • Suggerimenti sull'utilizzo di ControlMaster per mantenere il tuo tunnel

Linux
  1. Cos'è NGINX? Come funziona?

  2. Come funziona il bit appiccicoso?

  3. Come funziona rm? Cosa fa rm?

  4. Come funziona effettivamente sig_atomic_t?

  5. Come funziona un debugger in Linux?

Come funziona SSH?

Come funziona Git?

Che cos'è il DNS inverso e come funziona?

Come funziona la memoria di scambio in Linux?

Come funziona il display di Linux?

Connessione SSH tramite un tunnel SSH inverso (remoto).