3. diel - SSH - TCP tunelovanie
V predchádzajúcich dieloch sme si vyskúšali základné konfiguráciu SSH servera aj klienta a ako nadviazať spojenie. Čo poznáme teoreticky stačí na bežné použitie, bola by však škoda nevyužiť niektoré pokročilé možnosti. Dnes sa pozrieme na tunelovanie .. Ak používate Cygwin, použite návody pre Linux.
Tcp Tunelovanie
Zatiaľ sme SSH používali len na pripojenie k serveru - ako terminál. Okrem toho môžeme ale SSH server využiť aj ako tzv. Tunel. V praxi to znamená, že všetky prenosy vykonané skrze tunel nepôjdu priamo k cieľu, ale najprv na SSH server. Ukážeme si to na príklade odoslanie dát. Chceme poslať dáta na nejaký server .. Ak to urobíme cez tunel, dáta sa v skutočnosti pošlú prvýkrát na SSH server (teda v zašifrovanej podobe) a až potom budú odoslaná na cieľový server.
Tunel je realizovaný presmerovaním portov (port forwarding), ale možno ho tiež využiť v kombinácii so SOCKS proxy (o tom neskôr). Port forwarding, ako už názov napovedá, v praxi znamená, že pošlem dáta portom A na SSH server a ten ich prepošle na cieľový server na port B. Možno ho bez problému nastaviť pre oba smery a mať tak plnohodnotný tunel.
A k čomu vlastne to TCP tunelovanie je? Spomenul by som dve situácie ... Po prvé. Nie je vôbec neobvyklé, že zamestnávateľ / škola blokujú určité servery, popr. rovno celé porty. Alebo prevádzka sledujú a prístup k určitým službám môže byť tvrdo penalizovaný. Čo s tým? My už odpoveď poznáme .. Jednoducho si komunikáciu presmerujeme cez nejaký SSH server. Je zakázaný port 12451 (čo môže byť napríklad port nejaké hry)? Nevadí - pošleme si to treba cez 16455. Toto sa navyše zle sleduje a blokuje, takže to väčšina správcov vôbec nerieši. Druhá situácia je použitie verejného pripojenia - napríklad niekde v kaviarni. Nikdy neviete, kto počúva (a odposlechnout dáta z verejnej siete je otázka chvíľky). Použitím tunela si vlastne vytvoríme šifrované spojenie a podstatne tým zvýšime bezpečnosť dát, ktoré chceme preniesť.
Lokálny port forwarding
Presmerovanie lokálneho portu na vzdialený port. K použitiu je potrebné na SSH server nastaviť atribút AllowTcpForwarding.
Linux a Mac
Pre zapnutie lokálneho port forwarding, musíte pred príkaz ssh pridať prepínač -L. Tu je príklad príkazu:
$ ssh -L 9000:mailserver.com:25 remoteuser@remotehost
Príkaz presmeruje lokálny port 9000 na vzdialený port 25 servera mailserver.com. Teraz keď sa pripojíte v emailovom klientovi na svoj mailové konto na serveri mailserver.com, budú sa všetky maily odosielať (nie príjmať) cez šifrovaný tunel. Pamätajte, že na linuxových SSH serveroch nemôžete ako lokálne port (tu 9000) použiť bez rootovských práv port nižšia ako 1024.
Windows
V PuTTY bežte do sekcie SSH-> Tunnels. Do položky Source port zadajte lokálny port, do Destination server a port, na ktoré chcete presmerovať. Tunel vytvoríte kliknutím na Add a môžete ich vytvořet viac. Tunel sa otvára tlačidlom Open.
Vzdialený port forwarding
Vzdialený port forwarding sa používa presne opačným spôsobom. Napríklad ste za routerom s NAT a potrebujete niekomu ukázať svoj výtvor, čo máte iba na lokálu. Môžete použiť práve vzdialený port forwarding. Port na SSH serveri sa použije ako forward port na váš lokálny port. Podmienka je explicitné povolenie na serveri (u OpenSSH voľba GatewayPorts).
Linux a Mac
Na Linuxe a Macu sa vzdialený port forwarding používa nasledujúcim spôsobom, prepínačom -R:
$ ssh -R 9000:localhost:80 remoteuser@remotehost
Teraz, keď v prehliadači zadáte URL http: // remotehost: 9000, zobrazí sa hlavná stránka vášho lokálneho HTTP servera (ak nejaký máte, ak nie, zobrazí sa chyba prehliadača). Zase ako u lokálneho port forwarding, prvá hodnota (tu 9000), nesmie byť bez root práv nižšia ako 1024.
Windows
V PuTTY bežte opäť do sekcie SSH-> Tunnels. Do položky Source port napíšte port, ktorý chcete použiť na vzdialenom serveri a do poľa Destination napíšte localhost: port, kde port nahraďte portom vašej lokálne služby, na ktorú sa bude presmerovávať. Dole zaškrtnite miesto Local Remote, a kliknite na Add.
Socks Proxy
Jedná sa o transparentné HTTP forwarder, ktorý existuje na to, aby odovzdával sieťovú prevádzku medzi klientom a serverom. V zásade to funguje tak, že pošlete požiadavku na webovú stránku - ten ide ale prvýkrát na SSH server (skrze TCP tunel). SSH server potom pošle požiadavku na cieľový server a prijme odpoveď, ktorú zase odošle naspäť nám. Webovú stránku tak v zásade "prezerá" SSH server, ale obsah vidíme my. Je to jednoduchšie, než manuálne vytvárať tunel, ale je potreba podpora zo strany SSH servera. Nami používané OpenSSH ju má.
Linux a Mac
Tunelové SOCKS proxy vytvoríte príkazom:
$ ssh -D 9999 remoteuser@remotehost
Príkaz vytvorí tunelované SOCKS proxy na lokálnom porte 9999. Teraz si napríklad SOCKS proxy môžete nastaviť vo Firefoxe, a to s nastavením localhost na port 9999. Port môžete samozrejme ľubovoľne meniť.
Windows
V PuTTY opäť bežte do sekcie SSH-> Tunnels. Do položky source port napíšte port SOCKS proxy, ktoré bude lokálne vytvorené. Zmeňte prepínač na Dynamic, a kliknite na Add. Potom sa môžete pripojiť. SOCKS proxy potom môžete nastaviť v Firefoxu, s detailmi localhost a portom, ktorým ste zadali v nastavení.
Prehľad prepínačov
Dnes sme si ukázali tri nové prepínače SSH.
-L | Local, vytvorenie lokálneho port forwarding |
-R | Remote, vytvorenie vzdialeného port forwarding |
-D | Dynamic, vytvorenie SOCKS proxy spojenia |
-N | neobjaví sa výzva na prihlásenie |
-n | zabráni čítanie znakov zo stdin |
-T | zabráni otvoreniu terminálu |
$ ssh -L -nNT 9000:mailserver.com:25 remoteuser@remotehost
Takto SSH vôbec neotvorí terminál ani nič nevypíše, len vykoná príkaz, čo sme chceli. Aby to fungovalo, musíte sa však autorizovať kľúčom (o tom si povieme nabudúce). Pokiaľ na server pristupujeme pomocou hesla, logicky ho musíme nejako zadať ..
To je pre dnešok všetko. Nabudúce sa pozrieme na kľúče - čo to je, ako to funguje a na čo sa to dá použiť.