Přejít k obsahu
BeoHosting
BeoHosting
Technické

Co je SSH tunel a jak ho používat

BeoHosting Team··11 min čtení čtení
Co je SSH tunel a jak ho používat

Úvod do SSH tunelování

SSH tunel je technika, která využívá protokol SSH k vytvoření šifrovaného spojení mezi dvěma počítači, nejčastěji mezi vaším počítačem a VPS serverem, přes který lze přesměrovat síťový provoz. SSH tunelování, známé také jako SSH port forwarding, umožňuje přístup ke službám, které jsou jinak z internetu nedostupné, nebo ochranu dat putujících po nezabezpečené síti. Tato technika je základním nástrojem pro systémové administrátory, vývojáře a každého, kdo pracuje se vzdálenými servery.

Základní princip SSH tunelu je jednoduchý. Místo přímého připojení ke službě, která může být vystavena bezpečnostním rizikům, vytvoříte šifrovaný SSH kanál, přes který přesměrujete provoz. Všechna data procházející tunelem jsou šifrována pomocí AES, což znamená, že i kdyby někdo zachytil síťový provoz, nemůže přečíst obsah komunikace. SSH tunely jsou obzvláště užitečné při práci s databázemi, administračními panely nebo interními službami, které by neměly být veřejně přístupné.

Jak funguje protokol SSH

Autentizace

SSH používá asymetrické šifrování pro autentizaci klienta a serveru. Když se k serveru připojujete poprvé, SSH klient zkontroluje otisk klíče serveru a zeptá se, zda mu důvěřujete. Po potvrzení klient uloží klíč do souboru known_hosts a při každém dalším připojení automaticky ověří identitu serveru. To zabraňuje útokům typu man-in-the-middle, kdy by se útočník mohl vydávat za váš server.

Pro autentizaci uživatele SSH podporuje hesla a SSH klíče. SSH klíče jsou doporučovanou metodou, protože jsou bezpečnější a praktičtější. Pár klíčů se skládá z privátního klíče, který si ponecháte ve svém počítači, a veřejného klíče, který umístíte na server. Privátní klíč nikdy neopustí váš počítač a lze jej navíc chránit přístupovou frází (passphrase). Při připojení server pomocí vašeho veřejného klíče ověří, že vlastníte odpovídající privátní klíč, aniž by docházelo k výměně tajných dat.

Šifrovaný kanál

Po úspěšné autentizaci SSH naváže šifrovaný kanál pomocí symetrického šifrování, obvykle AES-256. Všechna data procházející tímto kanálem včetně příkazů, souborů a přesměrovaného provozu jsou chráněna před odposlechem. SSH také používá HMAC pro ověření integrity dat, což znamená, že jakákoli modifikace dat při přenosu je odhalena. Komprese dat je volitelná, ale může zlepšit výkon na pomalejších připojeních.

Lokální SSH tunel (Local Port Forwarding)

Koncept

Lokální SSH tunel přesměrovává provoz z portu na vašem lokálním počítači přes SSH spojení na port na vzdáleném serveru nebo síti. Jde o nejčastěji používaný typ tunelu a slouží pro přístup ke službám dostupným pouze na vzdáleném serveru nebo v jeho lokální síti. Příkaz pro vytvoření lokálního tunelu je ssh -L lokalni_port:cil:cilovy_port uzivatel@server.

Pokud máte například databázi MySQL na serveru naslouchající pouze na localhost portu 3306, můžete vytvořit tunel příkazem ssh -L 3307:localhost:3306 uzivatel@server. Poté se na svém počítači můžete připojit k localhost:3307 a provoz bude přesměrován na MySQL na serveru. Použijte jiný lokální port, pokud již máte MySQL spuštěné lokálně. Tunel zůstává aktivní, dokud je SSH relace otevřená.

Praktické příklady

Přístup k administračnímu panelu naslouchajícímu pouze na localhost serveru je běžným scénářem. Pokud máte webovou aplikaci na portu 8080 dostupnou pouze lokálně na serveru, příkaz ssh -L 8080:localhost:8080 uzivatel@server vám umožní otevřít http://localhost:8080 v prohlížeči vašeho počítače. To je bezpečnější než otevírání portu na firewallu, protože přístup je omezen na osoby s SSH přístupem k serveru.

Přístup ke službě v privátní síti za serverem je dalším důležitým scénářem. Pokud má server přístup k interní síti, kde se nachází databáze na 10.0.0.5:5432, můžete vytvořit tunel příkazem ssh -L 5432:10.0.0.5:5432 uzivatel@server. Nyní se ze svého počítače můžete připojit k localhost:5432 a přistupovat k databázi PostgreSQL v privátní síti. Jde o bezpečnou alternativu k VPN pro přístup k jednotlivým službám.

Vzdálený SSH tunel (Remote Port Forwarding)

Koncept

Vzdálený tunel funguje opačně než lokální. Přesměrovává provoz z portu na vzdáleném serveru na port na vašem lokálním počítači nebo síti. Příkaz je ssh -R vzdaleny_port:cil:cilovy_port uzivatel@server. To je užitečné, když chcete zpřístupnit službu z vašeho lokálního počítače na serveru nebo navenek. Například pokud lokálně vyvíjíte webovou aplikaci na portu 3000 a chcete ji ukázat klientovi bez nasazení.

Příkaz ssh -R 8080:localhost:3000 uzivatel@server zpřístupní vaši lokální aplikaci na adrese server:8080. Aby to fungovalo pro externí přístup, musí být v souboru sshd_config na serveru povolena volba GatewayPorts. Vzdálené tunely jsou užitečné pro vývoj, testování a situace, kdy váš počítač nemá veřejnou IP adresu, ale potřebujete poskytnout přístup ke službě, která na něm běží.

Bezpečnostní úvahy

Vzdálené tunely vyžadují pozornost, protože otevírají na serveru port, který může být přístupný zvenčí. Ve výchozím nastavení SSH naváže vzdálený port pouze na localhost serveru, což znamená, že je přístupný pouze ze serveru samotného. Pokud povolíte GatewayPorts, port se stane přístupným z jakékoli adresy a měli byste použít pravidla firewallu k omezení přístupu. Nikdy nenechávejte vzdálený tunel aktivní déle, než je nutné, a používejte konkrétní IP adresy namísto vázání na wildcard.

Dynamický SSH tunel (SOCKS proxy)

Koncept

Dynamický tunel vytvoří na vašem lokálním počítači SOCKS proxy server, který přesměrovává veškerý provoz přes SSH spojení. Na rozdíl od lokálního tunelu, který přesměrovává provoz pro jeden konkrétní port, dynamický tunel může přesměrovat provoz pro libovolný cíl. Příkaz je ssh -D lokalni_port uzivatel@server. Například ssh -D 1080 uzivatel@server vytvoří SOCKS proxy na portu 1080.

Po vytvoření dynamického tunelu nastavte svůj prohlížeč nebo operační systém tak, aby používal SOCKS proxy na localhost:1080. Veškerý internetový provoz pak prochází šifrovaným SSH tunelem na server a vychází na internet z IP adresy serveru. To je užitečné pro ochranu provozu na veřejných WiFi sítích, přístup k geograficky omezenému obsahu nebo anonymizaci procházení. Firefox má vestavěnou podporu SOCKS proxy v nastavení sítě.

Kdy použít dynamický tunel

Veřejné WiFi sítě v kavárnách, hotelech a na letištích jsou známé bezpečnostními riziky. Dynamický SSH tunel šifruje veškerý váš internetový provoz a brání odposlechu na nezabezpečené síti. Na rozdíl od komerčních VPN služeb, kde musíte důvěřovat poskytovateli, SSH tunel využívá váš vlastní server, čímž získáváte úplnou kontrolu nad infrastrukturou. To je obzvláště důležité při práci s citlivými obchodními daty mimo kancelář.

Pokročilé možnosti a konfigurace

Tunely na pozadí

Volba -f odešle SSH na pozadí po autentizaci a -N říká SSH, aby nespouštělo vzdálené příkazy. Kombinace ssh -fN -L 3306:localhost:3306 uzivatel@server vytvoří tunel na pozadí bez otevření interaktivní relace. Pro automatické spouštění tunelů po restartu systému použijte nástroj autossh, který tunel automaticky znovu naváže, pokud je spojení přerušeno. Instaluje se příkazem apt install autossh nebo yum install autossh.

Konfigurační soubor SSH na ~/.ssh/config umožňuje definovat tunely, které se automaticky vytvoří při připojení k serveru. Například řádek LocalForward 3306 localhost:3306 v sekci Host pro váš server automaticky naváže tunel pokaždé, když se připojíte. To eliminuje nutnost pamatovat si dlouhý příkaz a snižuje možnost chyb. Pro stejného hostitele lze definovat více tunelů.

Multiplexování spojení

Volba SSH ControlMaster umožňuje sdílet jedno SSH spojení pro více relací a tunelů. První spojení se naváže normálně a všechna následující používají totéž spojení, čímž se urychlí připojení a sníží zátěž serveru. Konfigurace v souboru SSH config zahrnuje ControlMaster auto, ControlPath ~/.ssh/sockets/%r@%h-%p a ControlPersist 600 pro udržení spojení 10 minut po uzavření poslední relace.

Bezpečnostní doporučení pro SSH tunely

Omezení přístupu

Na produkčních serverech omezte, kteří uživatelé mohou vytvářet tunely, pomocí volby AllowTcpForwarding v sshd_config. Můžete povolit pouze lokální přesměrování pomocí AllowTcpForwarding local nebo zcela zakázat tunely pomocí AllowTcpForwarding no pro uživatele, kteří je nepotřebují. Volba PermitOpen omezuje, kam tunel může přesměrovat provoz, například PermitOpen localhost:3306 povolí pouze tunel pro MySQL.

Použijte fail2ban k ochraně SSH služby před útoky hrubou silou a omezte SSH přístup pouze ze známých IP adres pomocí firewallu. Změňte výchozí SSH port z 22 na nestandardní port, což sníží počet automatických skenů. Na serverech BeoHosting je SSH přístup ve výchozím nastavení chráněn moderními bezpečnostními nastaveními a náš tým vám může pomoci s konfigurací tunelů pro specifické potřeby vaší infrastruktury.

Závěr

SSH tunely jsou mocným nástrojem pro bezpečnou komunikaci, který umožňuje přístup ke vzdáleným službám, ochranu provozu na nezabezpečených sítích a vytváření bezpečných spojení mezi systémy. Lokální tunely pro přístup ke vzdáleným službám, vzdálené tunely pro zpřístupnění lokálních služeb a dynamické tunely jako proxy jsou tři základní typy pokrývající většinu scénářů. Porozumění SSH tunelování je nezbytnou dovedností pro každého, kdo pracuje se servery. Zjistěte více o virtuálních serverech a síťové infrastruktuře.

BeoHosting Team

10+ let zkušeností — Specialisté na webhosting a infrastrukturu

  • Web Hosting
  • WordPress Hosting
  • VPS
  • Dedicated Serveri
  • Domeni
  • SSL
  • cPanel
  • LiteSpeed
  • Linux administracija
  • DNS

Naposledy aktualizováno: