Все о Linux. LinuxRSP.Ru


Cвежие новости Linux и BSD, анонсы статей и книг прямо в почтовый ящик!
Подписаться письмом


 Сегодняшние новости:

25 лет исполнилось ядру Linux

Релиз KDevelop 5.0

Oracle открывает код JDK9 для ARM

Выпущен Timewarrior 1.0.0

Релиз Android 7.0

Percona Memory Engine для MongoDB на базе WiredTiger

PowerShell открыт и доступен для Linux

Форк TrueCrypt: VeraCrypt 1.18

Релиз Snapcraft 2.14

Релиз Go 1.7

Стабильный выпуск рабочего стола Lumina

Вышла первая версия аналога OpenCV - DCV 0.1

Выпуск минималистичной программы для мониторинга jsonmon 3

В MIT разработали новый язык программирования

Первый релиз Qt5Gtk2

Godot 2.1 - новая версия открытого игрового движка

Свободная цифровая станция звукозаписи: Ardour 5.0

Обновление SkypeWeb Plugin for Pidgin

Вышла версия 3.0 Android File Transfer для Linux (и для OS X)

Программный аналог MIDI-контроллера для создания музыки: Launchpadd v1.3

Mozilla спонсирует поддержку Python 3.5 в PyPy

Ef 0.08 - программа для моделирования динамики заряженных частиц

Обновление текстового редактора TEA до версии 42.0.0

Релиз OpenOrienteering Mapper 0.6.4

Вышли Guix и GuixSD 0.11

Релиз Opera 39

Выпуск LibreOffice 5.2

В OpenSSH обнаружены и устранены некоторые уязвимости

Эмулятор FCEUX 2.2.3

Компания Билайн переходит на российскую СУБД с открытым исходным кодом Tarantool

Google

 Новые статьи :

Утилиты для восстановления потерянных данных в Linux

Лучшие файловые менеджеры для Android

20 лучших бесплатных книг о Linux

Как сгенерировать открытый/закрытый SSH-ключ в Linux

Grive - клиент Google Drive для Linux с открытым исходным кодом

Протокол IPv6: варианты подключения

Сервер из образа: DHCP + TFTP + Initrd + OpenVZ

Обзор веб-панелей управления хостингом

Приёмы работы с Vim

Nginx как Reverse Proxy для сайта, использующего SSL

Разработка модулей ядра Linux

Мониторинг нагрузки http-сервера Apache 2

Перевод комментариев к файлу конфигурации Squid

Решение проблем при использовании "1c предприятие" 8.2 в Linux

Advanced Bash-Scripting Guide Искусство программирования на языке сценариев командной оболочки







Rambler's Top100





 
 

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

Как я уже говорил, 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.

Предыдущая

Содержание

Следующая


(c)Ерижоков А.А., 2001.
Использование данного документа разрешено только с согласия автора и с указанием первоисточника: DH's Linux Site



      

Связь | О проекте LinuxRSP | Реклама | О Linux
© 1999-2017 LinuxRSP