solo con SSH: accesso web al tunnel inverso tramite proxy SOCKS ssh


15

Di tanto in tanto devo collegarmi a un server in cui l'accesso è fortemente limitato.
Solo il SSH in entrata è consentito dal firewall DMZ.
Le connessioni HTTP in uscita sono bloccate.

Sto cercando un modo semplice per tunnelizzare l'accesso al web attraverso la mia sessione SSH, quindi posso installare aggiornamenti e software tramite yum / apt-get. Idealmente, vorrei evitare di installare software / servizi aggiuntivi nell'area protetta.

Cosa fai in una situazione del genere?

SSH ha l' -D <port>opzione proxy SOCKS. Ma sfortunatamente è solo a senso unico da client a server e non esiste un'opzione inversa.

Risposte:


26

Finalmente sono riuscito a farlo sshsolo con :

  1. avvia un proxy SOCKS locale sul tuo computer client (usando ssh -D)
  2. connettersi al server remoto e impostare un port forwarding inverso ( ssh -R) sul proxy SOCKS locale
  3. configurare il software server per utilizzare il proxy inoltrato

1. Avviare il proxy calze locale in background

Connettersi a localhost tramite SSH e aprire il proxy SOCKS sulla porta 54321.

$ ssh -f -N -D 54321 localhost

-f esegue SSH in background.

Nota: se si chiude il terminale da cui è stato avviato il comando, il processo proxy verrà interrotto. Ricorda anche di ripulire dopo te stesso chiudendo la finestra del terminale quando hai finito o uccidendo il processo da solo!

2. connettersi al server remoto e impostare il port forwarding inverso

Associare la porta remota 6666 alla porta locale 54321. Ciò rende il proxy dei calzini locali disponibile al sito remoto sulla porta 6666.

$ ssh root@target -R6666:localhost:54321

3. configurare il software server per utilizzare il proxy inoltrato

Basta configurare yum, apt, curl, wget o qualsiasi altro strumento che supporti SOCKS per usare il proxy 127.0.0.1:6666.

Ecco! Buon tunneling!


4. facoltativo: configurare il software server per utilizzare il proxy inoltrato

Ho scoperto che l'installazione proxychainssul server di destinazione rende le cose molto più semplici.

Consente a qualsiasi software di utilizzare il proxy SOCKS (pari telnet), utilizzando un LD_PRELOADtrucco per reindirizzare le richieste TCP e DNS da comandi arbitrari in un proxy.

Installazione /etc/proxychains.confper utilizzare il proxy di calzini inoltrato:

[ProxyList]
# SSH reverse proxy
socks5  127.0.0.1 6666

Tunnel di strumenti arbitrari (che utilizzano TCP) con proxychains:

$ proxychains telnet google.com 80
$ proxychains yum update
$ proxychains apt-get update

3

Le versioni più recenti di SSH consentono di utilizzare l'opzione molto semplice di ssh-R <[bind_address:]port>. Utilizzando solo la porta sull'host e forse l'indirizzo di bind, ma non specificando la porta lato client verrà creato un proxy SOCKS inverso.

Questo è anche indicato nelle pagine man delle versioni SSH più recenti:

[...] se non è stata specificata alcuna destinazione esplicita, ssh fungerà da proxy SOCKS 4/5 e inoltrerà le connessioni alle destinazioni richieste dal client SOCKS remoto.

Puoi provarlo con il ricciolo collegandoti ad un semplice "dammi il mio IP" -API come http://ifconfig.io .

$ curl ifconfig.io

vs

$ curl --socks5 localhost:<PORT> ifconfig.io


2
Sarebbe utile menzionare in quale numero di versione quella funzione è stata introdotta.
Kasperd,

molto più semplice, grazie!
Kaii

1
@kasperd: OpenSSH 7.6 , rilasciato il 03-10-2017. Controlla il terzo punto
elenco
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.