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

    Как да използвате 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 сървъра е Боб . В такъв случай командата ви ще изглежда така:

    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 като дестинация. След това кликнете върху “Add” и след това щракнете “Open”, за да отворите SSH връзката. Вие също ще трябва да въведете адреса и порта на самия SSH сървър на главния екран "Сесия", преди да свържете, разбира се.

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

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

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

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

    ssh -R remote_port: local_address: 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. Изберете опцията “Remote”. За „Порт за източник“ въведете отдалечения порт. За „Дестинация“ въведете адреса на предназначението и порта във формата local_address: local_port.

    Например, ако искате да настроите примера по-горе, трябва да въведете 8888 като изходен порт и Localhost: 1234 като дестинация. След това кликнете върху “Add” и след това щракнете “Open”, за да отворите SSH връзката. Вие също ще трябва да въведете адреса и порта на самия SSH сървър на главния екран "Сесия", преди да свържете, разбира се.

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

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

    Dynamic Port Forwarding: Използвайте SSH сървъра като прокси

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

    Например, да речем, че използвате обществена Wi-Fi мрежа. Искате да преглеждате сигурно, без да сте нахлузени. Ако имате достъп до SSH сървър у дома, можете да се свържете с него и да използвате динамично пренасочване на портове. SSH клиентът ще създаде SOCKS прокси на вашия компютър. Целият трафик, изпратен към този прокси сървър, ще бъде изпратен през връзката към 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 като изходен порт. След това кликнете върху “Add” и след това щракнете “Open”, за да отворите SSH връзката. Вие също ще трябва да въведете адреса и порта на самия SSH сървър на главния екран "Сесия", преди да свържете, разбира се.

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

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

    Когато правите това във Firefox, изберете “Manual proxy configuration”, въведете “127.0.0.1” в SOCKS хост кутията и въведете динамичния порт в полето “Port”. Оставете полетата HTTP Proxy, SSL Proxy и FTP Proxy празни.

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