Jak na přípravu SSH tunelů?

28. května 2015

Přinášíme vám další díl seriálu o protokolu SSH. Dnes si probereme zajímavé téma a to, jak na SSH tunely. Posílat ostatní provoz skrz nějaký zabezpečený SSH tunel je vynikající způsob, jak se vypořádat s restriktivními nastaveními firewallu. Je to také skvělý způsob, jak zašifrovat jinak nezašifrovaný síťový provoz.

Konfigurace lokálního tunelování na server

Pomocí SSH připojení můžeme posílat provoz tunelem z portů na lokálním houstu na porty na vzdáleném houstu.

Lokální připojení představuje způsob, jak přistoupit k nějakému síťovému umístění z lokálního počítače prostřednictvím vzdáleného houstu. Nejprve se na vzdáleném houstu zřídí SSH připojení. Na vzdáleném serveru se učiní připojení k nějaké externí (nebo interní) síťové adrese poskytnuté uživatelem a provoz na toto umístění je tunelované na lokální počítač na specifikovaný port.

Tohle se často používá k tunelování na méně restriktivní síťové prostředí obejitím firewallu. Jiné běžné použití je přístup k webovému rozhraní „pouze localhost“ ze vzdáleného umístění.

Abyste zřídili lokální tunel do vzdáleného serveru, je třeba použít parametr -L, když se připojujete, a musíte uvést tři dodatečné informace:

  • Lokální port, kde si přejete přistupovat tunelovaným připojením.
  • Houst, k němuž se má připojit vzdálený houst.
  • Port, na kterém chcete, aby se vzdálený houst připojil.

Uvádějí se v pořadí uvedeném výše (a oddělují dvojtečkami) jako argumenty indikátoru -L. My zároveň použijeme indikátor -f, který způsobí, že SSH před vykonáváním přejde do pozadí, a indikátor -N, který na vzdálené sadě ani neotevře nějaký shell, ani nevykoná žádný program.

Například, chcete-li se připojit k example.com na portu 80 na vzdáleném houstu a učinit toto připojení dostupným na lokálním stroji na portu 8888, napište:
ssh -f -N -L 8888:example.com:80 username@remote_host

Nyní, když lokálnímu webovému prohlížeči indikujete 127.0.0.1:8888, měli byste uvidět jakýkoli obsah, který se nachází na example.com na portu 80.

Obecnější návod na tuto syntaxi je:

ssh -L vas_port:web_nebo_IP_kam_se_ma_pristupovat:port_webu uzivatelskejmeno@host

Protože je připojení v pozadí, budete muset najít jeho PID, abyste ho mohli zničit. Můžete to udělat tak, že vyhledáte port, který jste přeposlali:

ps aux | grep 8888
1001     5965 0.0 0.0 48168 1136 ?       Ss   12:28   0:00 ssh -f -N -L 8888:example.com:80 username@remote_host
1001     6113 0.0 0.0 13648   952 pts/2   S+   12:37   0:00 grep --colour=auto 8888

Pak můžete požadovaný proces zničit, když se zaměříte na PID, což je číslo ve druhém sloupci řádku, jemuž odpovídá váš SSH příkaz:

kill 5965
Jinou možností je nastartovat připojení bez indikátoru -f. To udrží připojení v popředí, a zabrání používat okno terminálu po dobu, kdy se přeposílá. Předností je, že tunel snadno zlikvidujete tím, že napíšete „CTRL-C“.

Konfigurace vzdáleného tunelování na server

Pomocí SSH připojení můžeme posílat provoz tunelem z portů na lokálním houstu na porty na vzdáleném houstu.

Při vzdáleném tunelování se připojení učiní k nějakému vzdálenému houstu. Při vytváření tunelu se specifikuje nějaký vzdálený port. Tento port, na tom vzdáleném houstu, pak bude tunelován na kombinaci houst a port, která je napojena z lokálního počítače. Umožní to vzdálenému počítači přístup k houstu prostřednictvím lokálního počítače.

Tento způsob se může hodit tehdy, potřebujete-li povolit přístup k nějaké interní síti, která je uzamčená pro externí připojení. Pokud firewall povoluje připojení ze sítě, umožní to připojit se ven k nějakému vzdálenému stroji a tunelovat provoz z tohoto stroje na nějaké umístění na té interní síti.

Abyste zřídili vzdálený tunel do vašeho vzdáleného serveru, je třeba použít parametr -R, když se připojujete, a musíte uvést tři dodatečné informace:

  • Port, kde může vzdálený houst přistupovat k tunelovému připojení.
  • Houst, k němuž se má připojit lokální počítač.
  • Port, k němuž se má připojit lokální počítač.

Uvádějí se v pořadí uvedeném výše (a oddělují dvojtečkami) jako argumenty indikátoru -R. My zároveň použijeme indikátor -f, který způsobí, že SSH před vykonáváním přejde do pozadí, a indikátor -N, který na vzdálené straně ani neotevře nějaký shell, ani nevykoná žádný program.

Například, chcete-li se připojit k example.com na portu 80 na lokálním počítači a učinit toto připojení dostupným na vašem vzdáleném houstu na portu 8888, napište:

ssh -f -N -R 8888:example.com:80 username@remote_host

Nyní, když na vzdáleném houstu otevřete webový prohlížeč na 127.0.0.1:8888, měli byste uvidět jakýkoli obsah, který je na example.com na portu 80.

Obecnější návod na tuto syntaxi je:

ssh -R vzdaleny_port:web_nebo_IP_kam_se_ma_pristupovat:port_webu uzivatelskejmeno@remote_host

Protože je připojení v pozadí, budete muset najít jeho PID, abyste ho mohli zničit. Můžete to udělat tak, že vyhledáte port, který jste předali dál:

ps aux | grep 8888

1001 5965 0.0 0.0 48168 1136 ? Ss   12:28   0:00 ssh -f -N -R 8888:example.com:80 username@remote_host
1001     6113 0.0 0.0 13648   952 pts/2   S+   12:37   0:00 grep --colour=auto 8888

Pak můžete požadovaný proces zničit, když se zacílíte na PID, což je číslo ve druhém sloupci řádku, jemuž odpovídá váš SSH příkaz:
kill 5965

Jinou možností je nastartovat připojení bez indikátoru -f. To udrží připojení v popředí, a zabrání používat okno terminálu po dobu, kdy se přeposílá. Předností je, že tunel snadno zlikvidujete tím, že napíšete „CTRL-C“.

Konfigurace dynamického tunelování na vzdálený server

Pomocí SSH připojení můžeme posílat provoz tunelem z portů na lokálním houstu na porty na vzdáleném houstu.

Dynamický tunel se podobá lokálnímu tunelu v tom, že povoluje lokálnímu počítači připojit se k jiným zdrojům prostřednictvím nějakého vzdáleného houstu. Dynamický tunel to dělá tak, že prostě specifikuje jediný lokální port. Aplikace, které si přejí využít tento port pro tunelování, musejí být schopné komunikovat pomocí protokolu SOCKS, aby mohly být pakety korektně přesměrované na druhou stranu tunelu.

Provoz, který se předává na tento lokální port, se bude odesílat vzdálenému houstu. Odtud se bude interpretovat protokol SOCKS, aby se zřídilo připojení do požadovaného koncového umístění. Tato příprava umožní aplikaci, která vnímá SOCKS, připojit se prostřednictvím vzdáleného serveru bez nutnosti mít více statických tunelů.

Abychom zřídili takové připojení, předáme indikátor -D spolu s lokálním portem, kde chceme přistoupit k tunelu. Zároveň použijeme indikátor -f, který způsobí, že SSH před vykonáváním přejde do pozadí, a indikátor -N, který na vzdálené straně ani neotevře nějaký shell, ani nevykoná žádný program.

Chcete-li například zřídit tunel na portu „7777“, napište:

ssh -f -N -D 7777 username@remote_host

Od této chvíle můžete začít s aplikací, která vnímá SOCKS (jako je webový prohlížeč), ukazovat na port, který jste vybrali. Aplikace bude odesílat své informace do soketu sdruženého s tímto portem.

Metoda směrování provozu na SOCKS port se bude lišit v závislosti na aplikaci. Ve Firefoxu je například obecné umístění Preferences > Advanced > Settings > Manual proxy configurations (v české verzi Nástroje > Možnosti > záložka Síť > tlačítko Nastavení připojení > Horní přepínač přepnete do polohy Ruční konfigurace proxy serverů a vyplníte zpřístupněné položky dialogu patřičnými údaji). V Chrome můžete aplikaci nastartovat s nastaveným indikátorem –proxy-server=. Budete chtít použít rozhraní localhost a port, který jste přeposlali.

Protože je připojení v pozadí, budete muset najít jeho PID, abyste ho mohli zničit. Můžete to udělat tak, že vyhledáte port, který jste přeposlali:

ps aux | grep 8888

1001     5965 0.0 0.0 48168 1136 ?       Ss   12:28   0:00 ssh -f -N -D 7777 username@remote_host
1001     6113 0.0 0.0 13648   952 pts/2   S+   12:37   0:00 grep --colour=auto 8888

Pak můžete požadovaný proces zničit, když se zacílíte na PID, což je číslo ve druhém sloupci řádku, jemuž odpovídá váš SSH příkaz:
kill 5965

Jinou možností je nastartovat připojení bez indikátoru -f. To udrží připojení v popředí, a zabrání používat okno terminálu po dobu, kdy se přeposílá. Předností je, že tunel snadno zlikvidujete tím, že napíšete „CTRL-C“.

V dalším díle našeho seriálu o SSH protokolu si probereme řízení připojení pomocí SSH escape kódů.

logo-zonercloudČlánek byl přeložen díky ZonerCloud.cz – Výkonné servery s garancí 99,99% dostupnosti

Zabezpečte váš server SSL certifikátem. Je to snadné. Přesvědčte se v článku 7 mýtů o SSL certifikátech na vašem serveru.

Napsal: Justin Elingwood
Přeložil RNDr. Jan Pokorný
Znění původního článku najdete zde

Creative Commons License

Štítky: SSH seriál

Mohlo by vás také zajímat

Nejnovější

2 komentářů

  1. Stefan K

    Kvě 28, 2015 v 23:53

    je to dost necitatelne. Niekolkokrat sa ti tam iste pasaze opakuju.

    Odpovědět
  2. Petr

    Lis 18, 2017 v 15:45

    „houst“ ? Really? Takhle prznit cestinu jsem dlouho nevidel a to nejsem zadnej spisovatel.

    Odpovědět

Napsat komentář: Petr Zrušit odpověď na komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *