3. díl - SSH - TCP tunelování

Software SSH SSH - TCP tunelování

V předchozích dílech jsme si vyzkoušeli základní konfiguraci SSH serveru i klienta a jak navázat spojení. Co známe teoreticky stačí k běžnému použití, byla by ale škoda nevyužít některé pokročilé možnosti. Dnes se podíváme na tunelování.. Pokud používáte cygwin, použijte návody pro Linux.

TCP Tunelování

Prozatím jsme SSH používali jen k připojení k serveru - jako terminál. Kromě toho můžeme ale SSH server využít i jako tzv. tunel. V praxi to znamená, že všechny přenosy provedené skrze tunel nepůjdou přímo k cíli, ale nejdřív na SSH server. Ukážeme si to na příkladu odeslání dat. Chceme poslat data na nějaký server.. Pokud to uděláme přes tunel, data se ve skutečnosti pošlou prvně na SSH server (tedy v zašifrované podobě) a až pak budou odeslána na cílový server.

Tunel je realizován přesměrováním portů (port forwarding), ale lze jej také využít v kombinaci se SOCKS proxy (o tom později). Port forwarding, jak už název napovídá, v praxi znamená, že pošlu data portem A na SSH server a ten je přepošle na cílový server na port B. Lze jej bez problému nastavit pro oba směry a mít tak plnohodnotný tunel.

A k čemu vlastně to TCP tunelování je? Zmínil bych dvě situace... Zaprvé. Není vůbec neobvyklé, že zaměstnavatel/škola blokují určité servery, popř. rovnou celé porty. Nebo provoz sledují a přístup k určitým službám může být tvrdě penalizován. Co s tím? My už odpověď známe.. Jednoduše si komunikaci přesměrujeme přes nějaký SSH server. Je zakázán port 12451 (což může být třeba port nějaké hry)? Nevadí - pošleme si to třeba přes 16455. Toto se navíc špatně sleduje a blokuje, takže to většina správců vůbec neřeší. Druhá situace je použití veřejného připojení - například někde v kavárně. Nikdy nevíte, kdo poslouchá (a odposlechnout data z veřejné sítě je otázka chvilky). Použitím tunelu si vlastně vytvoříme šifrované spojení a podstatně tím zvýšíme bezpečnost dat, které chceme přenést.

Lokální port forwarding

Přesměrování lokálního portu na vzdálený port. K použití je třeba na SSH serveru nastavit atribut AllowTcpForwarding.

Linux a Mac

Pro zapnutí lokálního port forwardingu, musíte před příkaz ssh přidat přepínač -L. Zde je příklad příkazu:

$ ssh -L 9000:mailserver.com:25 remoteuser@remotehost

Příkaz přesměruje lokální port 9000 na vzdálený port 25 serveru mailserver.com. Nyní když se připojíte v emailovém klientovi na svůj mailový účet na serveru mailserver.com, budou se všechny maily odesílat (ne příjmat) přes šifrovaný tunel. Pamatujte, že na linuxových SSH serverech nemůžete jako lokální port (zde 9000) použít bez rootovských práv port nižší než 1024.

Windows

V PuTTY běžte do sekce SSH->Tunnels. Do položky Source port zadejte lokální port, do Destination server a port, na které chcete přesměrovávat. Tunel vytvoříte kliknutím na Add a můžete jich vytvořet více. Tunel se otevírá tlačítkem Open.

Vzdálený port forwarding

Vzdálený port forwarding se používá přesně opačným způsobem. Například jste za routerem s NAT a potřebujete někomu ukázát svůj výtvor, co máte pouze na lokálu. Můžete použít právě vzdálený port forwarding. Port na SSH serveru se použije jako forward port na váš lokální port. Podmínka je explicitní povolení na serveru (u OpenSSH volba GatewayPorts).

Linux a Mac

Na Linuxu a Macu se vzdálený port forwarding používá následujícím způsobem, přepínačem -R :

$ ssh -R 9000:localhost:80 remoteuser@remotehost

Nyní, když v prohlížeči zadáte URL http://remotehost:9000, zobrazí se hlavní stránka vašeho lokálního HTTP serveru (pokud nějaký máte, pokud ne, zobrazí se chyba prohlížeče). Zase jako u lokálního port forwardingu, první hodnota (zde 9000), nesmí být bez root práv nižší než 1024.

Windows

V PuTTY běžte opět do sekce SSH->Tunnels. Do položky Source port napište port, který chcete použít na vzdáleném serveru a do pole Destination napište localhost:port, kde port nahraďte portem vaší lokální služby, na kterou se bude přesměrovávát. Dole zaškrtněte místo Local Remote, a klikněte na Add.

SOCKS Proxy

Jedná se o transparetní HTTP forwarder, který existuje k tomu, aby předával síťový provoz mezi klientem a serverem. V zásadě to funguje tak, že pošlete požadavek na webovou stránku - ten jde ale prvně na SSH server (skrze TCP tunel). SSH server pak pošle požadavek na cílový server a přijme odpověď, kterou zase odešle zpátky nám. Webovou stránku tak v zásadě "prohlíží" SSH server, ale obsah vidíme my. Je to jednodušší, než manuálně vytvářet tunel, ale je potřeba podpora ze strany SSH serveru. Námi používané OpenSSH ji má.

Linux a Mac

Tunelové SOCKS proxy vytvoříte příkazem :

$ ssh -D 9999 remoteuser@remotehost

Příkaz vytvoří tunelované SOCKS proxy na lokálním portu 9999. Nyní si například SOCKS proxy můžete nastavit ve Firefoxu, a to s nastavením localhost na port 9999. Port můžete samozřejmě libovolně měnit.

Windows

V PuTTY opět běžte do sekce SSH->Tunnels. Do položky source port napište port SOCKS proxy, které bude lokálně vytvořeno. Změnte přepínač na Dynamic, a klikněte na Add. Poté se můžete připojit. SOCKS proxy potom můžete nastavit v Firefoxu, s detaily localhost a portem, kterým jste zadali v nastavení.

Přehled přepínačů

Dnes jsme si ukázaly tři nové přepínače SSH.

-L Local, vytvoření lokálního port forwardingu
-R Remote, vytvoření vzdáleného port forwardingu
-D Dynamic, vytvoření SOCKS proxy spojení

Když použijete příkazy, které jsme si ukázali, budou vypisovat otravné hlášky a otevírat nový shell, které ovšem při vytváření tunelu nepotřebujeme. Naštěstí exitují přepínače, které toto nastavují..

-N neobjeví se výzva k přihlášení
-n zabrání čtení znaků ze stdin
-T zabrání otevření terminálu

Ideálně tedy můžeme spouštět příkazy následovně:

$ ssh -L -nNT 9000:mailserver.com:25 remoteuser@remotehost

Takhle SSH vůbec neotevře terminál ani nic nevypíše, jen provede příkaz, co jsme chtěli. Aby to fungovalo, musíte se ovšem autorizovat klíčem (o tom si povíme příště). Pokud na server přistupujeme pomocí hesla, logicky ho musíme nějak zadat.. ;)

To je pro dnešek vše. Příště se podíváme na klíče - co to je, jak to funguje a k čemu se to dá použít.


 

  Aktivity (1)

Článek pro vás napsal Filip Šohajek
Avatar

Jak se ti líbí článek?
Celkem (4 hlasů) :
55555


 


Miniatura
Všechny články v sekci
SSH

 

 

Komentáře

Avatar
mkub
Redaktor
Avatar
mkub:

dodam, ze SSH forwarding sa pouziva aj na tunelovanie komunikacie X Window Systemu, kedze XWS nijako komunikaciu nesifruje a takisto sa da pouzit aj na vytvorenie sifrovaneho tunela pre VNC

 
Odpovědět 4.6.2015 20:40
Avatar
David Novák
Tým ITnetwork
Avatar
Odpovědět  +1 4.6.2015 20:48
Chyba je mezi klávesnicí a židlí.
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na mkub
Filip Šohajek:

V dalším článku o X forwardingu budou informace, jen ještě není vydaný.

 
Odpovědět  +1 4.6.2015 20:48
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.