Как да използвам SSH тунелиране за достъп до ограничени сървъри и безопасно сърфиране

SSH клиент се свързва със сървър Secure Shell, който ви позволява да изпълнявате команди на терминал, сякаш седите пред друг компютър. Но SSH клиентът също ви позволява да "тунелирате" порт между вашата локална система и отдалечен SSH сървър.

Има три различни вида SSH тунелиране и всички те се използват за различни цели. Всеки включва използване на SSH сървър за пренасочване на трафика от един мрежов порт към друг. Трафикът се изпраща през криптирана SSH връзка, така че не може да бъде наблюдаван или модифициран по време на транзит.

Можете да направите това с sshкомандата, включена в Linux, macOS и други UNIX-подобни операционни системи. В Windows, който не включва вградена ssh команда, препоръчваме безплатния инструмент PuTTY за свързване със SSH сървъри. Той също така поддържа SSH тунелиране.

Локално пренасочване на портове: Направете достъп до отдалечени ресурси във вашата локална система

„Локално пренасочване на портове“ ви позволява достъп до ресурси на локалната мрежа, които не са изложени на Интернет. Да предположим например, че искате да осъществите достъп до сървъра на база данни в офиса си от дома си. От съображения за сигурност този сървър на база данни е конфигуриран само да приема връзки от локалната офис мрежа. Но ако имате достъп до SSH сървър в офиса и този SSH сървър позволява връзки извън офис мрежата, тогава можете да се свържете с този SSH сървър от дома и да получите достъп до сървъра на базата данни, сякаш сте в офиса. Това често е така, тъй като е по-лесно да се осигури един SSH сървър срещу атаки, отколкото да се осигурят различни мрежови ресурси.

За да направите това, установявате SSH връзка със SSH сървъра и казвате на клиента да пренасочва трафик от определен порт от вашия локален компютър - например порт 1234 - към адреса на сървъра на базата данни и неговия порт в офисната мрежа. Така че, когато се опитвате да осъществите достъп до сървъра на базата данни на порт 1234 към текущия ви компютър, „localhost“, този трафик автоматично се „тунелира“ през SSH връзката и се изпраща към сървъра на базата данни. SSH сървърът се намира в средата и пренасочва трафика напред-назад. Можете да използвате всеки команден ред или графичен инструмент за достъп до сървъра на базата данни, сякаш се изпълнява на вашия локален компютър.

За да използвате локално препращане, свържете се нормално към SSH сървъра, но също така предоставете -Lаргумента. Синтаксисът е:

ssh -L local_port: remote_address: remote_port [email protected]

Да предположим например, че сървърът на базата данни във вашия офис се намира на 192.168.1.111 в офисната мрежа. Имате достъп до SSH сървъра на офиса от ssh.youroffice.comи вашият потребителски акаунт на SSH сървъра е bob. В този случай вашата команда ще изглежда така:

ssh -L 8888: 192.168.1.111: 1234 [email protected]

След като изпълните тази команда, ще имате достъп до сървъра на базата данни на порт 8888 на localhost. Така че, ако сървърът на базата данни предлага уеб достъп, можете да включите // 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”. За “Source Port” въведете локалния порт. За „Дестинация“ въведете адреса на дестинацията и порта във формата remote_address: remote_port.

Например, ако искате да настроите същия SSH тунел, както по-горе, щяхте да въведете 8888като пристанищен порт и localhost:1234като дестинация. След това щракнете върху „Добавяне“ и след това върху „Отваряне“, за да отворите SSH връзката. Също така ще трябва да въведете адреса и порта на самия SSH сървър на главния екран „Сесия“, преди да се свържете, разбира се.

Отдалечено препращане на портове: Направете достъпни локални ресурси в отдалечена система

„Отдалечено пренасочване на портове“ е обратното на локалното препращане и не се използва толкова често. Тя ви позволява да направите ресурс на вашия локален компютър достъпен на SSH сървъра. Да предположим например, че използвате уеб сървър на локалния компютър, пред който седите. Но вашият компютър е зад защитна стена, която не позволява входящ трафик към сървърния софтуер.

Ако приемем, че имате достъп до отдалечен SSH сървър, можете да се свържете с този SSH сървър и да използвате пренасочване на отдалечени портове. Вашият SSH клиент ще каже на сървъра да препрати определен порт - да речем, порт 1234 - на SSH сървъра до определен адрес и порт на вашия текущ компютър или локална мрежа. Когато някой осъществи достъп до порта 1234 на SSH сървъра, този трафик автоматично ще бъде „тунелиран“ през SSH връзката. Всеки, който има достъп до SSH сървъра, ще има достъп до уеб сървъра, работещ на вашия компютър. Това на практика е начин за преминаване през тунел през защитни стени.

За да използвате дистанционно препращане, използвайте sshкомандата с -Rаргумента. Синтаксисът е до голяма степен същият като при локалното препращане:

ssh -R отдалечен_порт: local_address: local_port [email protected]

Да предположим, че искате да направите сървърно приложение, което слуша на порт 1234 на вашия локален компютър, на разположение на порт 8888 на отдалечения SSH сървър. Адресът на SSH сървъра е, ssh.youroffice.comа потребителското ви име на SSH сървъра е bob . Ще изпълните следната команда:

ssh -R 8888: localhost: 1234 [email protected]

След това някой може да се свърже със SSH сървъра на порт 8888 и тази връзка ще бъде тунелирана към сървърното приложение, работещо на порт 1234 на локалния компютър, от който сте установили връзката.

За да направите това в PuTTY на Windows, изберете Connection> SSH> Tunnels. Изберете опцията „Отдалечено“. За “Source Port” въведете отдалечения порт. За „Дестинация“ въведете адреса на дестинацията и порта във формата local_address: local_port.

Например, ако искате да настроите примера по-горе, ще въведете 8888като пристанищен порт и localhost:1234като дестинация. След това щракнете върху „Добавяне“ и след това върху „Отваряне“, за да отворите SSH връзката. Също така ще трябва да въведете адреса и порта на самия SSH сървър на главния екран „Сесия“, преди да се свържете, разбира се.

След това хората могат да се свържат към порт 8888 на SSH сървъра и техният трафик ще бъде тунелиран към порт 1234 на вашата локална система.

По подразбиране отдалеченият SSH сървър ще слуша само връзки от същия хост. С други думи, само хора от същата система като самия SSH сървър ще могат да се свързват. Това е от съображения за сигурност. Ще трябва да активирате опцията “GatewayPorts” в sshd_config на отдалечения SSH сървър, ако искате да замените това поведение.

Динамично пренасочване на портове: Използвайте вашия SSH сървър като прокси

СВЪРЗАНИ: Каква е разликата между VPN и прокси?

Има и „динамично пренасочване на портове“, което работи подобно на прокси или VPN. Клиентът SSH ще създаде прокси SOCKS, който можете да конфигурирате за използване на приложения. Целият трафик, изпратен през проксито, ще бъде изпратен през SSH сървъра. Това е подобно на локалното препращане - отнема локален трафик, изпратен до определен порт на вашия компютър и го изпраща по SSH връзката до отдалечено място.

СВЪРЗАНИ: Защо използването на обществена Wi-Fi мрежа може да бъде опасно, дори при достъп до криптирани уебсайтове

Да приемем например, че използвате обществена Wi-Fi мрежа. Искате да сърфирате сигурно, без да бъдете шпионирани. Ако имате достъп до SSH сървър у дома, можете да се свържете с него и да използвате динамично пренасочване на портове. Клиентът SSH ще създаде прокси SOCKS на вашия компютър. Целият трафик, изпратен до този прокси сървър, ще бъде изпратен през връзката на SSH сървъра. Никой, който наблюдава обществената Wi-Fi мрежа, няма да може да наблюдава вашето сърфиране или да цензурира уебсайтовете, до които имате достъп. От гледна точка на всички уебсайтове, които посещавате, ще бъде сякаш седите пред компютъра си у дома. Това също означава, че бихте могли да използвате този трик за достъп до уебсайтове само за САЩ, докато сте извън САЩ - разбира се, ако имате достъп до SSH сървър в САЩ.

Като друг пример може да поискате достъп до приложение за медиен сървър, което имате в домашната си мрежа. От съображения за сигурност може да имате само SSH сървър, изложен на Интернет. Не разрешавате входящи връзки от Интернет към вашето приложение за медиен сървър. Можете да настроите динамично пренасочване на портове, да конфигурирате уеб браузър да използва проксито SOCKS и след това да осъществявате достъп до сървъри, работещи във вашата домашна мрежа през уеб браузъра, сякаш седите пред вашата SSH система у дома. Например, ако вашият медиен сървър се намира на порт 192.168.1.123 във вашата домашна мрежа, можете да включите адреса 192.168.1.123във всяко приложение, използвайки проксито SOCKS, и ще получите достъп до медийния сървър, сякаш сте в домашната мрежа.

За да използвате динамично препращане, изпълнете командата ssh с -Dаргумента по следния начин:

ssh -D local_port [email protected]

Да предположим например, че имате достъп до SSH сървър на ssh.yourhome.comи потребителското ви име на SSH сървъра е bob. Искате да използвате динамично препращане, за да отворите прокси SOCKS на порт 8888 на текущия компютър. Ще изпълните следната команда:

ssh -D 8888 [email protected]

След това можете да конфигурирате уеб браузър или друго приложение да използва вашия локален IP адрес (127.0.01) и порт 8888. Целият трафик от това приложение ще бъде пренасочен през тунела.

За да направите това в PuTTY на Windows, изберете Connection> SSH> Tunnels. Изберете опцията „Динамично“. За “Source Port” въведете локалния порт.

Например, ако искате да създадете прокси SOCKS на порт 8888, ще въведете 8888като порт източник. След това щракнете върху „Добавяне“ и след това върху „Отваряне“, за да отворите SSH връзката. Също така ще трябва да въведете адреса и порта на самия SSH сървър на главния екран „Сесия“, преди да се свържете, разбира се.

След това можете да конфигурирате приложение за достъп до прокси SOCKS на вашия локален компютър (т.е. IP адрес 127.0.0.1, който сочи към вашия локален компютър) и да посочите правилния порт.

СВЪРЗАНИ: Как да конфигурирам прокси сървър във Firefox

Например можете да конфигурирате Firefox да използва прокси SOCKS. Това е особено полезно, тъй като Firefox може да има свои собствени настройки за прокси сървър и не е необходимо да използва прокси настройки за цялата система. Firefox ще изпраща трафика си през SSH тунела, докато други приложения ще използват нормално вашата интернет връзка.

Когато правите това във Firefox, изберете „Ръчна конфигурация на прокси“, въведете „127.0.0.1“ в полето за хост SOCKS и въведете динамичния порт в полето „Port“. Оставете полетата HTTP прокси, SSL прокси и FTP прокси празни.

Тунелът ще остане активен и отворен, докато имате отворена SSH сесийна връзка. Когато приключите вашата SSH сесия и прекъснете връзката със сървър, тунелът също ще бъде затворен. Просто се свържете отново със съответната команда (или подходящите опции в PuTTY), за да отворите отново тунела.