Reverse SSH tunnel SOCKS5 proxyn keresztül

Mindenki tudja, hogy a tűzfalak jók, a tűzfalak kellenek, a tűzfalak remek szabályokat tudnak kikényszeríteni amikkel sokkal biztonságosabbá tehetjük a hálózatunkat. Természetesen azonban a biztonságnak ára is van. Ez az ár esetemben egy többszörösen eltűzfalazott linux gép internet felőli elérhetetlenségét jelenti, ami időnként elég kellemetlen tud lenni. Mit lehet ilyenkor tenni?

Az egyik kézenfekvő megoldás a reverse SSH tunnel. Emellett meg kell említeni a VPN lehetőségét is, de engem most nem ez izgatott, így reverse SSH tunnel lett. Ez a következő képpen néz ki egy Fedora 22-t futtató "védett" gép és egy Ubuntut futtató "külső" gép esetén.

Triviálisnak tűnő, de mindenképpen fontos, hogy jelen megoldásnál a külsőnek nevezett gép rendelkezik publikus IP címmel és lehet rá csatlakozni SSH-n keresztül a standard 22-es TCP porton. Ha másik porton érhető el az SSH az se gond, viszont ennek a megoldása már legyen házi feladat az alábbiak alapján :)

A "védett" gépen adjuk ki a következő utasításokat:

yum install connect-proxy -y
PROXY='1.2.3.4:1081'
KULSO='[email protected]'
ssh -f -N -T -R22222:localhost:22 -o ProxyCommand="connect-proxy -R both -5 -S $PROXY %h %p" $KULSO

Némi magyarázat a kapcsolókhoz:

  • -f: az authentikációt követően az ssh command kerüljön a háttérbe
  • -N: erőforrást spórolunk vele. Jelentése, hogy az SSH kapcsolaton keresztül nem akarunk parancsokat futtatni
  • -T: kikapcsolja a pseudo-tty allokációt
  • -R (ssh command esetén): reverse tunnel: a távoli gépen a 22222 porton beérkező kapcsolatok legyenek átirányítva a helyi gép 22-es portjára
  • -R (connect-proxy command estén): a DNS feloldás először közvetlenül, majd sikertelenség esetén proxyn keresztül történjen
  • -o ProxyCommand: ennek a segítségével állítjuk be, hogy az ssh kapcsolat létrehozásához a connect-proxy alkalmazást is használja fel a proxyzás érdekében
  • -S: SOCKS proxyt akarunk használni. HTTP proxyhoz -H kapcsolót is használhatnánk.
  • -5: SOCKS5 proxy-n keresztül akarunk csatlakozni. Itt lehetne -4 kapcsolót is használni és akkor SOCKS4 lenne.

A "külső" gépen (vagyis ahonnan pedig csatlakozni szeretnénk) adjuk ki a következő parancsot a távoli konzol eléréséhez:

ssh -p 22222 root@localhost

Ezen a módon, ha a kifelé menő kapcsolat létre tud jönni, akkor már meg is kerültük a tűzfalnak ezt a korlátozását.

Fontos, hogy az SSHd biztonsági megfontolások miatt csak a loopback interfécen engedélyezi a reverse tunnel létrehozását. Ha azonban ez nekünk nem jó és valamilyen okból kifolyólag a reverse tunnel-t másik gépről is szeretnénk elérni, akkor a /etc/ssh/sshd_config fájlban kell yes értékre kell állítani a GatewayPorts opciót. Erről a beállításról például itt taláható bővebb információ.

A fent leírtakhoz itt és itt találtam segítséget.