stunnel - Универсальный SSL/TLS тунель stunnel [<filename>] | -fd n | -help | -version | -sockets stunnel [ [-install | -uninstall | -start | -stop] [-quiet] [<filename>] ] | -help | -version | -sockets stunnel утилита разработанная для создания TLS защищенного соединения между клиентом и локальным (Iinetd-запускаемым) или удаленным сервером. Таким образом, не имея поддержки TLS в том или ином демоне(сервисе) в Вашей системы, Вы можете легко обеспечить защиту(шифрование, одностороннюю или двустороннюю аутентификацию) соединения с использыванием TLS. stunnel может быть использован для добавления функции TLS для популярных Inetd сервисов, тиких как POP-2, POP-3, и IMAP , так же для сервисов как NNTP, SMTP и HTTP, или организацию PPP тунелей без изменения кода самих сервисов. Этот продукт, для реализации TLS использует либо пакеты Security Support Provider Interface (SSPI) от Microsoft (www.microsoft.com) или Крипто-Про(www.cryptopro.ru), либо пакет OpenSSL написанный Eric Young (eay@cryptsoft.com) Использовать указанный конфигурационный файл Прочитать конфигурационный файл из указанного дескриптора Напечатать справку по stunnel Печать версии stunnel Печать опций для сокета Установить NT сервис Удалить NT сервис Запустить NT сервис Остановить NT сервис Не открывать окошки с сообщениями Каждая строка конфигурационного файла должна быть: Пустой строкой (игнорируется); Комментарий начинающийся с ';' (игнорируется); Парой 'option_name = option_value'; Строкой '[service_name]', с которой начиинается секция описания конкретного сервиса;

GLOBAL OPTIONS
Каталог вызова функции chroot() которая вызывается после разбора конфигурационного файла stunnel Примечания: 1)Использование данной возможности крайне желательно сопровождать использованием setuid; 2)При создании замкнутого окружения, в нем должны бытьустановлены все внешние обьекты CryptoAPI/SSPI, CApath, CRLpath, pid, exec дожны находиться в нем. Например, если вы используете (TCP Wrappers) вы дожны скопировать файлы /etc/hosts.allow /etc/hosts.deny внутрь каталога chroot. Алгоритм сжатия данных По умолчанию: без сжатия Уровень протоколирования Уровни задаются аналогично syslogd emerg (0), alert (1), crit (2), err (3), warning (4), notice (5), info (6), или debug (7). Все сообщения с заданным уровнем и уровнем ниже заданного будут запротоколированы. Пример debug = debug или debug = 7. По умолчанию: debug = notice и используется syslog(Unix only.) Параметры facility и level регистронезависимы. foreground режим Оставаться в foreground режиме (не использовать fork) и писать протокол в stderr (если не указан output). По умолчанию: no, т.е в режиме демона Писать протокол в file, а не в syslog Допустимо значение /dev/stdout Файл для сохранения pid Если аргумент не задан, то pid не сохраняется. Если задана опция chroot, то путь указывается относително ее. Количество байт для чтения из фала со случайной последовательностью. Количество байт для чтения из файла со случайной последовательностью. Для OpenSSL версии меньше 0.9.5a, она так же определяет сколько байт достаточно для инициализации датчика случайных чисел. Более поздние версии OpenSSL имеют встроенные функции для определения достаточного количества байт для инициализации. Путь к файлу со случайной последовательностью Библиотека OpenSSL использует эти данные для инициализации датчика случайных чисел. Перезаписывать файл со случайной последовательностью По умолчанию: yes Имя сервиса On Unix: В inetd это имя для TCP Wrapper библиотеки. On NT/2000/XP: Имя NT сервиса для контрольной панели. По умолчанию: stunnel Выплняется setgid() в эту группу. Выполняется setuid() под этого пользователя Опции setsockopt() для сокета приема соединений, а так же для локального и удаленного сокетов. Формат значений для SO_LINGER : l_onof:l_linger. Формат значений для времени: tv_sec:tv_usec. Пример: socket = l:SO_LINGER=1:60 Установить минунтный таймаут для локального сокета socket = r:TCP_NODELAY=1 Выключить Nagle алгоритм для удаленного сокета socket = a:SO_REUSEADDR=0 Запретить повторное использование портов TCP (по умолчанию разрешено) socket = a:SO_BINDTODEVICE=lo Принимать соединения только с loopback интерфейса Разрешить иконку. По умолчанию: yes

SERVICE-LEVEL OPTIONS
Каждая секция в конфигурационном файле начинается с имени сервиса в квадратных скобках. Это имя будет использоваться библиотекой libwrap и PAM, а так же дает возможность различать протокольные сообщения. Примечание: Если вы хотите запускать stunnel в Inetd режиме, смотрите секцию Inetd MODE описанную ниже Принимать соединения только с host:port Если host не указан, то для всех ip данного компьютера. Хранилище доверенных корневых центров сертификации, используемое вместо ROOT. Пример: My Каталог с сертификатами CA Каталог в которой stunnel будет искать сертификаты CA при использовании verify. Сертификаты в этой дериктории должны называться как XXXXXXXX.0 где XXXXXXXX значение хэша Der кодированно сертификата. (первые 4 байта в MD5 хэше). Если указан chroot то CApath указывается относительно него. Файл с сертификатом СА Этот файл может сожержать множество сертификатов СА. Используется в verify. Цепочка сертификатов PEM файл. Сертификаты должны быть в PEM формате и должны начинаться с сертификата верхнего в цепочке (корневого CA). Сертификат stunnel обязателен для использования в качестве сервера. Указание этой опции в режиме клиента необходимо для удовлетворения требования TLS сервера на двустороннюю аутентификацию по сертификату клиента. Использование клиентского сертификата опционально. Сертификат в der кодировке. Соответствующий сертификат в хранилище должен иметь ссылку на закрытый ключ. Список разрешенный SSL/TLS алгоритмов. Пример: GOST34102001-WITH-GOST28147-OFB-GOST28147:DES-CBC3-SHA:IDEA-CBC-MD5 Минимальная длина ключа Режим клиента (удаленный сервис использует TLS/SSL) По умолчанию: no (режим сервера) Соединять с удаленным сервером, если не указано то с localhost Каталог сожержащий CRL. Примечание: Файлы в этой дериктории должны быть названы как XXXXXXXX.0 где XXXXXXXX значение хэша CRL. Если указан chroot то CApath указывается относительно него. Хранилище CRL, используемое вместо хранилища по умолчанию. Пример: My CRL файл Этот файл содержит множество CRL, используеммых в verify. Задержка для DNS запроса для 'connect' опции Использовать для чтения закрытого ключа engine Нумерация начинается с 1. Запустить локально inetd программу exec путь относителен chroot дериктории если она задана. Аргументы для программы указанной в exec опции, включая ее имя-($0) Кавычки не поддерживаются. Аргументы должны быть разделены пробелами. Использовать IDENT (RFC 1413) проверку имени Закрытый ключ для сертификата из cert опции Закрытый ключ необходим для аутентификации обладателя сертификата. Файл должен быть защищен от доступа третьих лиц,в Unix системах можно использовать следующую команду: chmod 600 keyfile По умолчанию: значение cert опции Интерфейс, который должен быть использован для соединения с удаленны хостом. OCSP сервер для проверки сертификатов Опции для библиотеки OpenSSL Параметры для OpenSSL описанные в SSL_CTX_set_options(3ssl) реководстве но без префискса SSL_OP_. Несколько options могут быть использованы для указания множества опций. Например, для совместимости с Eudora SSL реализацией следущие опции должны быть установлены. options = DONT_INSERT_EMPTY_FRAGMENTS Протокол внутри SSL/TLS Поддерживаемые: cifs, connect, nntp, pop3, smtp пароль и имя пользователя для протокола proto Удаленный сервер для внутренего протокола Создать псевдо-терминал для 'exec' опции Таймаут сессии Версия SSL протокола Допустимые опции: all, SSLv2, SSLv3, TLSv1 таймаут для ожидания входящий данных Таймаут для ожидания close_notify Таймаут для соединения с удаленным хостом Таймаут для keep alive transparent proxy Re-write address to appear as if wrapped daemon is connecting from the SSL client machine instead of the machine running stunnel. This option is only available in local mode (exec option) by LD_PRELOADing env.so shared library or in remote mode (connect option) on Linux 2.2 kernel compiled with transparent proxy option and then only in server mode. Note that this option will not combine with proxy mode (connect) unless the client's По умолчанию route to the target machine lies through the host running stunnel, which cannot be localhost. Уровень проверки цепочки default – Проверка по умолчанию, если не заданы CRLpath или CRLfile, то использует доступ к CDP по http/ldap; level 3 - Проверять используя локально установленные сертификаты; level 2 - Проверять каждый сертификат; level 1 - Проверять каждый сертификат если есть; level 0 - Не проверять; FIX ME!!! НЕ ЗАКОНЧЕНА Уровень проверки level 1 - Проверять каждый сертификат если есть level 2 - Проверять каждый сертификат level 3 - Проверять используя локально установленные сертификаты default - Не проверять stunnel Возвращает нулевой код завершения при успешном выполнении, при ошибках возвращается не нулевой код возвращения. Для реализации инкапсуляции imapd в SSL/TLS: [imapd] accept = 993 exec = /usr/sbin/imapd execargs = imapd Тунелирование pppd через SSL/TLS по порту 2020, [vpn] accept = 2020 exec = /usr/sbin/pppd execargs = pppd local pty = yes Для запуска stunnel в inetd стиле можно использовать следующий stunnel.conf. Примечание: в конфигурационном файле не должно быть [service_name] секции. exec = /usr/sbin/imapd execargs = imapd Ниже приведен пример конфигурации engine для считывания закрытого ключа используя OpenSC engine. engine=dynamic engineCtrl=SO_PATH:/usr/lib/opensc/engine_pkcs11.so engineCtrl=ID:pkcs11 engineCtrl=LIST_ADD:1 engineCtrl=LOAD engineCtrl=MODULE_PATH:/usr/lib/pkcs11/opensc-pkcs11.so engineCtrl=INIT [service] engineNum=1 key=id_45 stunnel Конфигурационный файл stunnel Сертификат и закрытый ключ Опция execargs не поддерживает кавычки. stunnel нельзя использовать с FTP демоном из-за природы FTP протокола который использует множество портов для передачи данных.

INETD MODE
Наиболее распространненый вариант использования stunnel когда он слушает порт и устанавливает соединение или с другим портом из опции connect или прграммой из exec опции. Так же могут быть причины по которым вы хотите что бы другая программа принимала входящие соединения и запускала stunnel из inetd, xinetd, или tcpserver. Например если вы имеете следующий конфиг в \fIinetd.conf\fR: imaps stream tcp nowait root /usr/sbin/stunnel stunnel /etc/stunnel/imaps.conf В таком случае inetd демон ответственен за привязку сокета и передачу его в stunnel когда соединение установлено. Таким образом stunnel не имеет ни одной accept опции. Все Service Level Options должны содержаться в глобалных опциях и не должно быть ни одной [service_name] секции Смотри раздел EXAMPLES с примерами.

CERTIFICATES
Каждый \s-1SSL\s0 демон должен предстваить валидный X.509 сертификат Так же ему нужен закрытый ключ для расшифровки входящий данных. Наиболее простой путь получения сертификата и закрытого ключа это использовать OpenSSL пакет. Больше информации про этот пакет можно найти в описании следующих пакетов. Две вещи наиболее важны при генерации пары сертификат-закрытый ключ для stunnel. Закрытый ключ не может быть зашифрован, так как сервер не имеет возможности получить пароль от пользователя. Для генерации незашифрованого ключа добавьте -nodes опцию при выполнении req каманды из пакета OpenSSL. Порядок следования сертификатов в .pem файле то же важен. Он должнет сожержать не зашифрованый закрытый ключ в начале, затем сертификат. Затем пустая строка после закрытого ключа и сертификата. Не зашифрованая информация о сертификате (в верху сертификата) должна быть удалена Файл должнен выглядеть вот так: -----BEGIN RSA PRIVATE KEY----- [encoded key] -----END RSA PRIVATE KEY----- [empty line] -----BEGIN CERTIFICATE----- [encoded certificate] -----END CERTIFICATE----- [empty line]

RANDOMNESS
В stunnel нужен для инициализации PRNG (Датчик псевдо случайных чисел) для того что бы SSL использовал хорошие последовательности. Следующие источники будут использоваться (в указанном порядке) до тех пор пока не будет получено соответствующие кол-во данных. Файл указанный в RNDfile опции. Файл указанный в переменной окружения RANDFILE (если указан). Файл .rnd в домашней дериктории, если не указана RANDFILE. Файл указанный в опции '--with-random' при компиляции. Содержимое экрана если работает под Windows. сокет указанный в EGD опции. Сокет указанный в опции '--with-egd-sock' при компиляции. /dev/urandom. В последних версиях (>=OpenSSL 0.9.5a) при получении достаточной энтропии источники случайных данных будут закрыты автоматически. В предыдущих версиях OpenSSL не существует функций для определения достаточного количества данных. Примечание: На Windows машинах нет консоли для интерактивного взаимодействия с пользователем (движение мыши, создание окон и т.д.) и содержание окна не достаточно, вам необходимо создать файл с случайной последовательностью и указать его в опции RNDfile. Файл указанный в опции RNDfile должен сожержать случайную последовательность это означает что он должен содержать разные данные при каждом запуске stunnel. Это будет делаться автоматически ло тех пор пока не будет указана опция RNDoverwrite. Если вы хотите обновлять его вручную, то openssl rand команда из последней версии OpenSSL будет весьма полезна. Если /dev/urandom доступен, OpenSSL имеет привычку инициализировать PRNG данными из него да же кога проверяет случайное состояние, таким образом на системах с ним вероятнее всего вы используете его да же если он в самом низу списка указаного выше. Это не поведение stunnel's, это OpenSSL. Управление доступом для интернет сервисов Интернет 'super-server' модель имперсонализации Установка опций для сокета создание замкнутого окружения домашняя страница stunnel Часто задаваемые вопросы по stunnel Домашняя страница проекта OpenSSL <Michal.Trojnara@mirt.net>