WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Советы » Туннелирование

Туннелирование


Дата публикации: 12-12-2010

Как я уже говорил, Stunnel может работать в двух режимах - сервера и клиента. В качестве сервера Stunnel открывает указанный порт, дешифрует все поступившие данные и передает их либо в указанную в параметрах запуска программу, либо на указанный порт на указанном хосте, обеспечивая таким образом поддержку SSL у различных серверных приложений, которые таковой не обладают. В качестве клиента Stunnel открывает указанный порт, шифрует все поступившие на него данные и передает их (как и в качестве сервера) в определенную программу или на определенный порт на заданном хосте. И в качестве сервера, и в качестве клиента есть возможность запуска как отдельного демона, так и посредством inetd.

Покажу все это на примере создания защищенного telnet-соединения между хостами A и B. Предположим, что telnet-соединение будет осуществляться с хоста A на хост B. При нормальных условиях достаточно набрать telnet B на хосте A, ввести имя пользователя и пароль и соединение осуществлено. Все данные, передаваемые по такому соединению (в том числе и имя пользователя и пароль), идут в открытом виде. Если это чревато последствиями (причем неприятными), то лучше организовать весь обмен данными по TELNET между этими хостами в шифрованном виде.

Для начала надо на обоих хостах установить Stunnel (пригодиться...:)). Затем на хосте B запустить Stunnel в режиме сервера:

stunnel -d 992 -r 23

Опция -d указывает Stunnel работать в режиме отдельного демона, ждущего соединения по порту 992. Все данные, полученные в шифрованном виде на порт 992, в открытом виде передаются на порт 23 на локальной машине (опция -r).

Затем на хосте A запустить Stunnel в режиме клиента:

stunnel -c -d 1123 -r B:992

Опция -c указывает на работу в режиме клиента (по умолчанию Stunnel запускается в режиме сервера), как и в предыдущем случае, работа в режиме отдельного демона, все данные, полученные в открытом виде на порт 1123, передаются в шифрованном виде на порт 992 на хосте B. Таким образом, получается следующая цепочка:

данные_в_открытом_виде -> порт_1123_на_хосте_A -> шифрование ->
данные_в_зашифрованном_виде -> порт_992_на_хосте_B -> дешифровка ->
данные_в_открытом_виде -> порт_23_на_хосте_B

Теперь можно набрать telnet localhost 1123 на хосте A для подключения к порту 23 на хосте B. Сложно, зато безопасно...:) Естественно, во втором случае вместо B:992 должно быть указано реальное_имя_хоста_в_Internet:992. Порты, открытые на хосте A и хосте B (1123 и 992), могут быть любые - главное, чтоб они не использовались другими программами.

Случай, описанный выше, довольно-таки тривиальный. Усложним задачу.:)

Предположим, что есть хосты A1,B1,C1 в одной подсетке со шлюзом G1, но без прямого доступа в Internet, и хост A2 в другой подсети, также без прямого доступа в и из Internet, со шлюзом G2. Единственное соединение между двумя подсетками - через Internet. Также предположим, что хостам A1,B1 и C1 нужен доступ к различным почтовым аккаунтам на хосте A2. При этом, весь трафик, проходящий по незащищенным сетям между хостами A1, B1, C1 и хостом A2 должен быть шифрованным. (Нестандартная ситуация, не так ли?:))

Таким образом, прямое соединение хостов A1,B1,C1 возможно только с хостом G1, хост G1 может соединяться через Internet с хостом G2, а с хоста G2 напрямую доступен хост A2. В данном случае, незащищенное соединение - между хостами G1 и G2.

Решение:

Устанавливаем Stunnel на хосты G1 и G2. На хосте G2 запустим серверную часть:

stunnel -d 1110 -r A2:110
stunnel -d 1125 -r A2:25

Первый демон перенаправляет весь входящий трафик, предварительно расшифровав его, на порт 110(pop3), а второй - на порт 25(smtp) на хосте A2. Предполагается, что программы ipop3d (или подобная) и sendmail (или подобная) уже запущены на хосте A2.

На хосте G1 запускаем клиентскую часть:

stunnel -с -d 1110 -r G2:1110
stunnel -с -d 1125 -r G2:1125

На хостах A1,B1,C1 настраиваем почтовые клиенты, указывая в качестве pop3-сервера - G1, порт - 1110, а в качестве smtp-сервера - G1, порт - 1125, имена пользователей и пароли те, что прописаны на хосте A2.

Таким же образом можно создавать соединения по любым портам и практически по любым протоколам, основанным на TCP.

Единственная проблема в том, что надо запускать отдельный демон для каждого соединения, и каждый запущенный Stunnel должен использовать свой уникальный порт. Покажу это еще на одном примере:

Предположим, что есть хост A, который должен иметь защищенные telnet-соединения с хостами B,C и D. Соответственно, на всех указанных хостах должен быть установлен Stunnel.

Запустим Stunnel на хостах B,C и D в режиме сервера, выполнив на каждом из них следующую команду:

stunnel -d 992 -l /usr/sbin/in.telnetd -- in.telnetd

Опция -l указывает Stunnel при подключении к открытому порту запустить указанную программу с указанными аргументами (после "--") и передать ей весь входящий трафик. Имя программы и аргументы передаются в том же виде, что и в /etc/inetd.conf.

На хосте A запустим три Stunnel-клиента, каждый на своем порту:

stunnel -c -d 1123 -r B:992
stunnel -c -d 1124 -r C:992
stunnel -c -d 1125 -r D:992

Запустив на хосте A команду telnet localhost 1123, ты подключишься к хосту B, запустив telnet localhost 1124 - к хосту C, а telnet localhost 1125 отправит тебя на хост D.

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Октябрь 2018 (14)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)
Ноябрь 2015 (1)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта



Случайная цитата

Неизвестный автор:

"Как видно, совершенство достигается не тогда, когда уже нечего прибавить, но когда уже ничего нельзя отнять."

Опрос

Какой антивирус Вы используете?

Kaspersky Antivirus
NOD32
Norton Antivirus
Dr.Web
Panda
Аvast!
ClamWin
Другой...