SSH a forwardování portů

V tomto článku si ukážeme jednoduché forwardování portů s využitím SSH. Uvedu zde také příklady komprimovaného SSH kanálu použitelného u pomalého modemového připojení k stahování pošty či použití komprimovaného VNC spojení.

SSH port forwarding

SSH může spojení pro jakýkoliv TCP/IP port přesměrovat na zabezpečený kanál pomocí port forwardingu.
U port forwardingu můžeme buď namapovat lokální port na klientovi na vzdálený port na serveru či jakýkoliv port na serveru na jakýkoliv port na klientovi - čísla portů nemusí být shodná.

Pro vytvoření SSH kanálu který naslouchá na lokálním portu:
ssh -L local-port:remote-hostname:remote-port username@hostname

Tedy například pro stažení pošty ze serveru mail.domain.com:
ssh -L 1100:mail.domain.com:110 mail.domain.com

Poštu nyní můžete stahovat z localhostu připojením se na port 1100, poté bude vše forwardováno zabezpečeným kanálem na server mail.domain.com. Pokud nám na serveru mail.domain.com neběží SSH server, ale v síti, v které je mail.domain.com máme jiný server s SSH daemonem, můžeme forwardovat přes něj, tedy:
ssh -L 1100:mail.domain.com:110 other.domain.com

U tohoto příkladu je naše POP3 žádost forwardována z portu 1100 localhostu přes SSH spojení na portu 22 na other.domain.com. Server other.domain.com se připojí na port 110 serveru mail.domain.com a tento zareaguje na naši žádost. Zabezpečené spojení je vytvořeno pouze mezi Vaším systémem a other.domain.com.

SSH port forwarding může být použit (zneužit) u sítě s firewallem, kdy firewall umožňuje ssh komunikaci zatímco ostatní porty jsou zavřené, je možno připojit se na některý se zavřených portů přesměrováním komunikace přes SSH kanál, což může být nežádoucí zhlediska bezpečnosti systému.
Proto, pokud nechcete mít port forwarding dostupný na vašem systému, použijte parametr AllowTcpForwarding v /etc/ssh/sshd_config a restartujte ssh daemona.

Volby:

-f Požaduje, aby ssh po provedení autentizace a zahájení forwardování přešel do pozadí. Tato volba je vhodná, pokud uživatel chce, aby ssh běžel v pozadí, ale ssh bude ještě ptát na přihlašovací nebo přístupová hesla. Může být vhodná také ve skriptech. Implikuje volbu -n. Doporučený způsob pro start X11 programů na vzdáleném počítači je "ssh -f počítač xterm".
-q Tichý režim. Potlačí výpis varování a diagnostických zpráv. Jsou vypisovány pouze fatální chyby.
-v Upovídaný režim. Způsobí, že program ssh bude vypisovat ladící zprávy o své činnosti. Lze použít při ladění spojení a při autentizačních a konfiguračních problémech.
-g Povolí vzdáleným strojům připojování na lokální forwardované porty. Implicitně se může na tyto porty připojovat pouze localhost.
-x Zakáže X11 forwardování. V konfiguračním souboru lze nastavit i pro jednotlivé počítače.
-C Bude komprimovat všechna data (včetně stdin, stdout, stderr, a dat pro forwardované X11 a TCP/IP spojení). Komprimační algoritmus je týž jako v programu gzip. Úroveň komprese může být zadána volbou CompressionLevel volba (viz dále). Komprese je žádoucí na modemových linkách a pro jiná pomalá
spojení, ale přes rychlou síť bude zpomalovat činnost. Implicitní hodnota může být nastavenu pro jednotlivé počítače v konfiguračním souboru; viz volba Compress dále.
-L port:počítač:vzdálport
Určuje, že zadaný port na lokálním počítači (tj. ssh klientovi) má být forwardován přes bezpečný kanál na ssh server a z něj má být navazováno TCP spojení na zadaný vzdálený počítač a port. Alokuje soket, který bude naslouchat na zadaném portu na lokálním počítači, a kdykoli bude vytvořeno spojení na tento port, bude forwardováno přes bezpečný kanál, a ze vzdáleného stroje bude navázáno spojení na zadaný počítač:vzdálport. Forwardování portu může být také nastaveno v konfiguračním souboru.
Privilegované porty může forwardovat pouze root.
-R port:počítač:vzdálport
Určuje, že zadaný port na vzdáleném počítači (tj. serveru) má být forwardován na lokální počítač a odtud na další zadaný počítač a port. Alokuje soket, který bude naslouchat na zadaném portu na vzdálené straně, a kdykoli je navázáno spojení na tento port, spojení bude forwardováno přes bezpečný kanál na lokální stroj, a z něj bude navázáno spojení na zadaný počítač:vzdálport. Forwardování portů může být zadáno v konfiguračním souboru. Privilegované porty mohou být forwardovány pouze při přihlášení jako root na vzdáleném stroji.

 

Příklady

Stažení pošty ze serveru mail.domain.com z portu 1100 localhostu:
ssh -L 1100:mail.domain.com:110 mail.domain.com

Stažení pošty ze serveru mail.domain.com z portu 1100 localhostu přes server other.domain.com:
ssh -L 1100:mail.domain.com:110 other.domain.com

Zasílání pošty z portu 2525 localhostu na smtp mailserver.com s použitím komprimovaného SSH kanálu:
ssh -C -L 2525:mailserver.com:25 mailserver.com

Forwardování VNC spojení ze serveru vncserver.com na localhost s použitím komprimovaného SSH kanálu a s povolením vzdálených strojů připojování se na lokální forwardovaný port:
ssh -C -L 5901:vncserver.com:5901 vncserver.com -g

Odkazy:

http://www.openssh.org - OpenSSH Homepage
http://www.ssh.com/products/ssh/ - SSH by Sentinel
http://heimhardt.com/htdocs/ssh.html - SSH Dokumentace



Autor: Roman Pěch
Vytvořeno: 03.06.2002
Oblast: Sítě