středa 29. října 2014

SSH tunel skrz http(s) proxy

Popis situace:
PC - pracovní stanice
HTTP Proxy - Proxy server umožňující připojení do internetu. Umožňuje pouze připojování na vzdálené porty 80 a 443 pouze prostřednictvím protokolu HTTP na vybrané webové stránky.
ssh server- počítač umístění v internetu s veřejnou IP adresou na němž je nainstalovaný SSH server.

Cílem je umožnit pracovní stanici připojit se do internetu i způsobem, který proxy neumožňuje (na proxy nepovolené protokoly, webové stránky,...).

Nutné podmínky docílení kýženého stavu:
  • pravidla proxy musí umožňovat přístup na IP adresu či DNS ssh serveru (zde prodejna.biz).
  • ssh server na počítači prodejna.biz musí být možné nainstalovat na portu, který je povolen na HTTP proxy (v tomto případě 80 nebo 443).
K připojení k ssh serveru přes HTTP proxy budeme potřebovat nainstalovat aplikaci corkscrew. Předpokládejme následující:
  • na ssh serveru máme vytvořen účet sshaccount.
  • HTTP proxy běží na httpproxy.cz a portu 8080
  • K HTTP proxy je třeba autentizace, která je uložená v souboru auth
  • SSH server je dostupný na portu 443
  • Na pracovní stanici neběží nic na portu 8080
Obsahem souboru auth je pouze login a heslo oddělené dvojtečkou.
Následující příkaz spustí na lokálním počítači server SOCKS5 na portu 8080 (parametr -D):
ssh -ND 8080 sshaccount@prodejna.biz -o "ProxyCommand corkscrew httpproxy.cz 8080 prodejna.biz 443 auth"

V prohlížeči je pak třeba nastavit proxy takto:

Od této chvíle budou všechny požadavky směrovány SSH tunelem skrz HTTP Proxy na prodejna.biz.
Aby nebylo nutné psát takto dlouhý příkaz můžeme do souboru ~/.ssh/config umístit následující dva řádky:
Host prodejna.biz
ProxyCommand corkscrew httpproxy.cz 8080 prodejna.biz 443 ~/auth

a následně použít zjednodušený příkaz:
ssh -ND 8080 sshaccount@prodejna.biz

Nebo si jednoduše namapovat vzdálený disk k lokálnímu adresáři:
sshfs sshaccount@prodejna.biz: ~/remote
kde adresář ~/remote musí před voláním příkazu již existovat.