Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 3 - SSH - TCP tunelování

V minulé lekci, SSH - Instalace a nastavení serveru, jsme nainstalovali a nastavili SSH server na operačních systémech Linux a Windows.

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.

SSH

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.

SSH

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.

SSH

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í.

SSH

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.


 

Předchozí článek
SSH - Instalace a nastavení serveru
Všechny články v sekci
SSH
Článek pro vás napsal Neaktivní uživatel
Avatar
Uživatelské hodnocení:
28 hlasů
Tento uživatelský účet již není aktivní na základě žádosti jeho majitele.
Aktivity