SSH клиент се свързва със сървър на Secure Shell, който ви позволява да стартирате команди на терминала, сякаш се намирате пред друг компютър. Но един SSH клиент ви позволява да "тунелирате" порт между вашата локална система и отдалечен SSH сървър.
Има три различни типа SSH тунели и всички те се използват за различни цели. Всеки от тях включва използването на SSH сървър за пренасочване на трафика от един мрежов порт към друг. Трафикът се изпраща през шифрирана SSH връзка, така че не може да бъде наблюдаван или променян по време на преноса.
Можете да направите това с SSH
команда, включена в Linux, MacOS и други UNIX-подобни операционни системи. В Windows, който не включва вградена команда ssh, препоръчваме безплатния инструмент PuTTY да се свърже със SSH сървърите. Поддържа SSH tunneling също.
"Пренасочване на локални портове" ви позволява да осъществите достъп до локални мрежови ресурси, които не са изложени на Интернет. Например, да речем, че искате да имате достъп до сървър на база данни във вашия офис от вашия дом. От съображения за сигурност този сървър на база данни е конфигуриран само да приема връзки от локалната офис мрежа. Но ако имате достъп до SSH сървър в офиса и SSH сървърът позволява връзки извън офисната мрежа, можете да се свържете с този SSH сървър от дома и да получите достъп до сървъра на базата данни, както ако бяхте в офиса. Това често се случва, тъй като е по-лесно да се осигури един SSH сървър срещу атаки, отколкото да се осигури разнообразие от различни мрежови ресурси.
За да направите това, установявате SSH връзка със SSH сървъра и кажете на клиента да препраща трафик от конкретен порт от локалния ви компютър - например порт 1234 - до адреса на сървъра на базата данни и пристанището му в офис мрежата. Така че, когато се опитате да осъществите достъп до сървъра на база данни на порт 1234 на текущия компютър "localhost", този трафик автоматично се "тунелира" през SSH връзката и се изпраща до сървъра на базата данни. SSH сървърът се намира в средата, пренасочвайки трафика напред и назад. Можете да използвате команден ред или графичен инструмент за достъп до сървъра на базата данни, както ако се изпълнява на локалния компютър.
За да използвате локалното пренасочване, свържете се със сървъра SSH нормално, но също и захранвайте -L
аргумент. Синтаксисът е:
ssh -L локален_порт: remote_address: remote_port [email protected]
Например, да предположим, че сървърът на база данни във вашия офис се намира на адрес 192.168.1.111 в офис мрежата. Имате достъп до SSH сървъра на офиса в ssh.youroffice.com
, а потребителският ви профил на SSH сървъра е Боб
, В този случай командата ви ще изглежда така:
ssh -L 8888: 192.168.1.111: 1234 [email protected]
След като стартирате тази команда, ще имате достъп до сървъра на базата данни на пристанище 8888 на адрес localhost. Така че, ако сървърът на базата данни предлага уеб достъп, можете да включите http: // localhost: 8888 във вашия уеб браузър, за да получите достъп до него. Ако разполагате с инструмент на командния ред, който се нуждае от мрежовия адрес на база данни, трябва да го посочите на адрес localhost: 8888. Целият трафик, който се изпраща на пристанище 8888 на компютъра ви, ще бъде пренасочен към 192.168.1.111:1234 във вашата офис мрежа.
Това е малко по-объркващо, ако искате да се свържете със сървърно приложение, изпълнявано на същата система като самия SSH сървър. Например, да речем, че имате SSH сървър, работещ на порт 22 на вашия офис компютър, но също така имате сървър на база данни, работещ на порт 1234 на същата система на същия адрес. Искате достъп до сървъра на базата данни от дома, но системата приема само SSH връзки на порт 22 и неговата защитна стена не позволява други външни връзки.
В този случай можете да изпълните команда като следната:
ssh -L 8888: localhost: 1234 [email protected]
Когато се опитате да осъществите достъп до сървъра на база данни на порт 8888 на текущия компютър, трафикът ще бъде изпратен през SSH връзката. Когато пристигне в системата, изпълняваща SSH сървъра, SSH сървърът ще го изпрати на порт 1234 на "localhost", което е един и същ компютър, работещ със самия SSH сървър. Така "localhost" в горната команда означава "localhost" от гледна точка на отдалечения сървър.
За да направите това в приложението PuTTY в Windows, изберете Connection> SSH> Tunnels. Изберете опцията "Local". За "Източник на порт" въведете локалния порт. За "Дестинация" въведете адреса на местоназначението и порт във формата remote_address: remote_port.
Например, ако искате да настроите същия SSH тунел, както е показано по-горе, бихте влезли 8888
като изходния порт и Localhost: 1234
като дестинация. Кликнете върху "Добавяне" след това и след това върху "Отваряне", за да отворите SSH връзката. Също така ще трябва да въведете адреса и порта на самия SSH сървър на основния екран "Сесия", преди да се свържете, разбира се.
"Препращане на отдалечен порт" е обратното на местното пренасочване и не се използва толкова често. Той ви позволява да направите ресурс на локалния компютър на сървъра SSH. Например, да речем, че имате уеб сървър на локалния компютър, който седи пред вас. Но вашият компютър е зад защитна стена, която не позволява входящ трафик към сървърния софтуер.
Ако приемем, че имате достъп до отдалечен SSH сървър, можете да се свържете със SSH сървъра и да използвате препращане на отдалечен порт. Вашият SSH клиент ще каже на сървъра да препрати конкретен порт, например, порт 1234 - на сървъра SSH до конкретен адрес и порт на текущия ви компютър или локална мрежа.Когато някой осъществи достъп до порт 1234 на SSH сървъра, този трафик автоматично ще бъде "тунелиран" през SSH връзката. Всеки, който има достъп до SSH сървъра, ще има достъп до уеб сървъра, работещ на вашия компютър. Това е ефективен начин за тунелиране през защитните стени.
За да използвате отдалечено пренасочване, използвайте SSH
команда с -R
аргумент. Синтаксисът е до голяма степен същият като при местното препращане:
ssh -R remote_port: локална_адрес: local_port [email protected]
Да приемем, че искате да направите сървърно приложение да слуша на порт 1234 на локалния ви компютър на разположение на порт 8888 на отдалечения SSH сървър. Адресът на SSH сървъра е ssh.youroffice.com
и потребителското ви име на SSH сървъра е Боб, Ще изпълните следната команда:
ssh-R 8888: localhost: 1234 [email protected]
След това някой може да се свърже със сървъра SSH в порт 8888 и тази връзка ще бъде пренасочена към сървърното приложение, работещо на порт 1234 на локалния компютър, от който сте установили връзката.
За да направите това в PuTTY на Windows, изберете Connection> SSH> Tunnels. Изберете опцията "Отдалечено". За "Източник на порт" въведете отдалечения порт. За "Дестинация" въведете адреса на местоназначението и порт във формата local_address: local_port.
Например, ако искате да настроите горния пример, бихте влезли 8888
като изходния порт и Localhost: 1234
като дестинация. Кликнете върху "Добавяне" след това и след това върху "Отваряне", за да отворите SSH връзката. Също така ще трябва да въведете адреса и порта на самия SSH сървър на основния екран "Сесия", преди да се свържете, разбира се.
Хората след това биха могли да се свържат към порт 8888 на SSH сървъра и техният трафик ще бъде тунелиран на порт 1234 на вашата локална система.
По подразбиране отдалеченият SSH сървър ще слуша само връзки от един и същ хост. С други думи, само хора на същата система като самия SSH сървър ще могат да се свържат. Това е от съображения за сигурност. Ще трябва да активирате опцията "GatewayPorts" в sshd_config на отдалечения SSH сървър, ако искате да отмените това поведение.
Има и "динамично прехвърляне на портове", което работи подобно на прокси или VPN. SSH клиентът ще създаде прокси сървър SOCKS, който можете да конфигурирате приложенията да използват. Целият трафик, който се изпраща през прокси сървъра, ще бъде изпратен през SSH сървъра. Това е подобно на местното пренасочване - това отнема местния трафик, изпратен до конкретен порт на компютъра ви и го изпраща през SSH връзката на отдалечено място.
Да приемем например, че използвате обществена Wi-Fi мрежа. Искате да сърфирате безопасно, без да бъдете подслушвани. Ако имате достъп до SSH сървър у дома, можете да се свържете с него и да използвате пренасочването на динамични портове. SSH клиентът ще създаде прокси сървър на вашия компютър. Целият трафик, изпратен до този прокси сървър, ще бъде изпратен през връзката към SSH сървъра. Никой, който наблюдава обществената Wi-Fi мрежа, няма да може да следи сърфирането ви или да цензурира уебсайтовете, до които имате достъп. От гледна точка на уебсайтовете, които посещавате, ще бъде като че ли седяхте пред вашия компютър у дома. Това също означава, че можете да използвате този трик за достъп до уеб сайтове само за САЩ, докато сте извън САЩ, разбира се, ако имате достъп до SSH сървър в САЩ.
Като друг пример, може да искате да осъществите достъп до приложение за медиен сървър, което имате в домашната си мрежа. От съображения за сигурност може да имате SSH сървър, изложен на Интернет. Не разрешавате входящите връзки от интернет към приложението за медиен сървър. Можете да настроите препращане на динамични портове, да конфигурирате уеб браузър, за да използвате прокси сървъра SOCKS и след това да имате достъп до сървъри, които се изпълняват във вашата домашна мрежа чрез уеб браузъра, сякаш се намирате пред вашата SSH система у дома. Например, ако вашият медиен сървър се намира на пристанище 192.168.1.123 във вашата домашна мрежа, можете да включите адреса 192.168.1.123
в което и да е приложение, използващо прокси сървър SOCKS и щяхте да получите достъп до медийния сървър, както ако сте били във вашата домашна мрежа.
За да използвате динамичното пренасочване, изпълнете командата ssh с -Д
аргумент, както е така:
ssh -D local_port [email protected]
Например, да кажем, че имате достъп до SSH сървър в ssh.yourhome.com
и потребителското ви име на SSH сървъра е Боб
, Искате да използвате динамично пренасочване, за да отворите прокси сървър SOCKS на порт 8888 на текущия компютър. Ще изпълните следната команда:
ssh-D 8888 [email protected]
След това можете да конфигурирате уеб браузър или друго приложение, за да използвате вашия локален IP адрес (127.0.01) и порт 8888. Целият трафик от това приложение ще бъде пренасочен през тунела.
За да направите това в PuTTY на Windows, изберете Connection> SSH> Tunnels. Изберете опцията "Динамика". За "Източник на порт" въведете локалния порт.
Например, ако искате да създадете прокси сървър SOCKS на порт 8888, трябва да влезете 8888
като източник на пристанище. Кликнете върху "Добавяне" след това и след това върху "Отваряне", за да отворите SSH връзката. Също така ще трябва да въведете адреса и порта на самия SSH сървър на основния екран "Сесия", преди да се свържете, разбира се.
След това можете да конфигурирате приложение за достъп до прокси сървъра на SOCKS на вашия локален компютър (т.е. IP адрес 127.0.0.1, който сочи към вашия локален компютър) и да зададете правилния порт.
Например, можете да конфигурирате Firefox да използва прокси сървъра SOCKS. Това е особено полезно, тъй като Firefox може да има свои собствени настройки на прокси сървър и не е необходимо да използва настройки за прокси за цялата система.Firefox ще изпраща своя трафик през SSH тунела, докато други приложения ще използват интернет връзката ви нормално.
Когато правите това в Firefox, изберете "Ръчна настройка на прокси сървър", въведете "127.0.0.1" в полето за хост SOCKS и въведете динамичния порт в полето "Порт". Оставете празни прозорци HTTP Proxy, SSL Proxy и FTP Proxy.
Тунелът остава активен и отворен, докато имате отворена връзка за SSH сесия. Когато прекратите SSH сесията и изключите сървъра, тунелът също ще бъде затворен. Просто свържете отново с подходящата команда (или съответните опции в PuTTY), за да отворите отново тунела.