Безопасное соединение с STUNNEL — HackZona.Ru

Безопасное соединение с STUNNEL

Безопасное соединение с STUNNEL

Тип статьи:
Со старой ХакЗоны.
Источник:
ill
1. Введение

Stunnel — это SSL шифровальщик, при помощи которого обычный текст и нешифрованные каналы могут быть зашифрованы на время передачи. Stunnel в недавнем времени претерпел крупные изменения и текущая (4.х) версия имеет совершенно иную архитектуру, в отличие от предыдущих. В этой статье я буду иметь дело исключительно с новой версией.

Stunnel широко используется для шифрование каналов между POP или IMAP mail серверами и e-mail клиентами. Оба этих протокола требуют аутентификацию пользователей с использованием их имени и пароля. В большинстве случаях, имя пользователя и пароль используется те же что и при удаленной или локальной аутентификации через SSH. Без использования Stunnel для шифрования данных, любой, перехвативший данные может войти на сервер и поднять свои привилегии гораздо легче, чем при использованием локального exploit'a.


2. Получение и установка Stunnel

В основном, Stunnel поставляется в виде собранного пакета, который включается в наиболее распространенные дистрибутивы и, возможно, он уже установлен на Вашей системе. Если нет, тогда найдите его на вашем установочном диске или скачайте с веб сайта распространителя.

Исходный код распространяется в соответствии с лицензией GNU General Public License и так же, он свободно доступен для скачивания и установки. Текущая версия (на момент написания была 4.05) может быть скачена с ftp://stunnel.mirt.net/stunnel/. Для установки Stunnel скачаете исходные тексты и выполните следующие команды :


$ tar zxf stunnel-4.XX.tar.gz
$ cd stunnel-4.XX
$ ./configure
$ make
$ make install (с правами root)


3. Создание самоподписанного сертификата (ключа)

В соответствии с использованием Stunnel, первым делом нам необходима пара ключей. Если вы собирали из исходников, тогда необходимая пара была создана автоматически (stunnel.pem).
Некоторые предустановленные пакеты могут включать пару ключей, другие же, генерируют во время установки, а остальные оставляют это дело пользователю.

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


$ cd tools
$ make stunnel.pem


Я решил не рассматривать особые детали в этой статье, но если Вам интересно разобраться в этом, тогда Вам лучше посмотреть Makefile из папки «tools».


4. Использование Stunnel для шифрации POP3/IMAP

Этот метод шифрации может быть использован для любого подобного сервиса, где на стороне клиента поддерживается SSL. Многие почтовые клиенты поддерживают SSL для доступа к POP3, IMAP и SMTP, а так же интернет клиенты (веб браузеры) с поддержкой HTTPS и т.д.

Так как Stunnel установлен и сгенерирована пара ключей, остается просто сконфигурировать файл, который stunnel использует. Простой пример, который шифрует POP3 и IMAP будет выглядеть так:


# Sample stunnel configuration file for POP3/IMAP

# Provide the full path to your certificate-key pair file
cert = /usr/local/etc/stunnel/stunnel.pem

# lock the process into a chroot jail
chroot = /usr/local/var/run/stunnel/
# and create the PID file in this jail
pid = /stunnel.pid

# change the UID and GID of the process for security reasons
setuid = nobody
setgid = nobody

# Configure our secured POP3 and IMAP services

[pop3s]
accept = 995
connect = 110

[imaps]
accept = 993
connect = 143


Используя эту конфигурацию, любое шифрованное соединение, поступающее на 995 порт (POP3s) будет расшифровано и переправлено на локальный сервис POP3 на 110 порт. Когда локальный POP3 сервис ответит, то ответ будет зашифрован при помощи Stunnel и отправлен обратно через 995 порт. то же самое и для IMAPs по 993 порту.

Stunnel работает как сервис (демон) по умолчанию, поэтому для его старта с этой конфигурацией просто выполните :

stunnel stunnel-secure-email.conf

где «stunnel-secure-email.conf» это текстовый файл содержащий конфигурацию представленную выше; убедись что прописанные пути правильные для твоей системы.

Мы можем запускать Stunnel при загрузке системы, прописав необходимую команду в файл rc.local, который обычно находится в /etc/rc.d/. Этот файл используется последним при загрузке системы, и в основном используется администраторами для своих целей. Когда пропишите команду в скрипте, убедитесь, что используете полный путь, например :

/путь/к/stunnel /путь/к/конфигурационному файлу

[ Для Debian и подобных ему, без rc.local, эта процедура немного другая: измените копию файла, например "/etc/init.d/named, прописав туда команду для запуска и переименуйте его в /etc/init.d/stunnel, затем создайте ссылку на него в соответствующих папках запуска, обычно это /etc/rc2.d/....]

Если желаете, Stunnel так же может быть запущен с использованием (x)inetd. Про это Вы можете почитать в документации к Stunnel.


5. Использование Stunnel для шифрации SQL транзакций.

Этот метод может быть использован для шифрации любого сервиса, где ни сервер ни клиент не поддерживают SSL. например CVS, MySQL, и т.д.

В примере с POP3 и IMAP, мы заботились о предоставление SSL шифрации сервером, так как клиенты имели такую возможность. Однако, ни MySQL сервер ни клиент не имеют такой возможности — но мы по прежнему можем использовать Stunnel для этого.

Это предполагает использования Stunnel на двух сторонах, на сервере и на клиентском хосте. Конфигурация для сервера такая же как и в случае с POP3/IMAP. По умолчанию MySQL использует порт 3306, и так как нет зарезервированного порта для безопасного соединения с MySQL сервером, я буду использовать 3307 :


# Sample stunnel configuration file for securing MySQL (server side)

# Provide the full path to your certificate-key pair file
cert = /usr/local/etc/stunnel/stunnel.pem

# lock the process into a chroot jail
chroot = /usr/local/var/run/stunnel/
# and create the PID file in this jail
pid = /stunnel.pid

# change the UID and GID of the process for security reasons
setuid = nobody
setgid = nobody

# Configure our secured MySQL server

[mysqls]
accept = 3307
connect = 3306


Теперь я могу запустить демона Stunnel на сервере при помощи :

$ stunnel stunnel-mysql-server.conf

где «stunnel-mysql-server.conf» текстовый файл содержащий конфигурацию. Так же нам необходимо установить демона Stunnel на клиентском хосте со следующими настройками:


# Sample stunnel configuration file for securing MySQL (client side)

# Provide the full path to your certificate-key pair file
cert = /usr/local/etc/stunnel/stunnel.pem

# lock the process into a chroot jail
chroot = /usr/local/var/run/stunnel/
# and create the PID file in this jail
pid = /stunnel.pid

# change the UID and GID of the process for security reasons
setuid = nobody
setgid = nobody

# enable client mode
client = yes

# Configure our secured MySQL client

[mysqls]
accept = 3306
connect = 1.2.3.4:3307


Вы видите, что я использовал новую опцию: client = yes. Это включает клиентский режим, который сообщает Stunnel'ю что удаленный сервис использет SSL. Наш локальный Stunnel теперь ожидает соединения на локальный MySQL порт (3306), шифрует его и переправляет его на наш MySQL сервер (в нашем случае 1.2.3.4), где другой Stunnel, ожидает соединения на порту 3307. Удаленный Stunnel получает данные на порт 3307, расшифровует и переправляет их на MySQL сервер, который в свою очередь ожидает соединения на 3306 порту на той же машине. Все ответы будут отправлены через тот же шифрованный канал.

Сохраните клиентскую конфигурацию как «tunnel-mysql-client.conf» и запустите Stunnel :

$ stunnel stunnel-mysql-client.conf

и теперь вы можете соединится с удаленным MySQL сервером используя шифрованный канал, подсоединившись к локальному Stunnel демону, который слушает порт 3306:

$ mysql -h 127.0.0.1 -u username -p

6. Решение проблем

Stunnel может вытворять фокусы с правами — особенно, когда используется chroot среда и понижение пользователя и группы до «NOBODY» (некоторые системы должны иметь «nogroup» для установки GID). Убедитесь, что Ваша «chroot» имеет право на запись для пользователя и/или группы «NOBODY» (nogroup).

Stunnel по умолчанию запускается в фоновом режиме, и не показывает каких бы то нибыло сообщений об ошибках. Это значит, что Вы не сможете узнать из командной строки, работает ли Stunnel или нет! Вы можете проверить, что такой процесс запущен по средством команды «ps» :

$ ps -ef | grep stunnel
nobody 21769 1 0 09:12? 00:00:00 /usr/local/sbin/stunnel ./stunnel-mysql-server.conf


Stunnel'y можно указать запускаться не в фоновом режиме, путем добавления следующей команды в файл конфигурации (перед конфигурацией сервисов) :

foreground = yes

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


debug = 7
output = /tmp/stunnel.log


Если Вы запустили Stunnel не в фоновом режиме, для отладки/проверки, тогда Вам лучше указать «стандартный вывод» для сообщений :


debug = 7
output = /dev/stdout


7. Дальнейшее изучение

Существует ещё множество команд, которые могут быть использованный в конфигурационном файле, и все они перечислены в документации к Stunnel.

так же могут быть использованы следующие веб сайты :

* Официальная страничка Stunnel: stunnel.mirt.net/
* Stunnel.org: www.stunnel.org/
* The OpenSSL project: www.openssl.org/
* SSL certificates HOWTO: www.tldp.org/HOWTO/SSL-Certificates-HOWTO/



перевод:ill
специально для HackZona
автор оригинальной статьи:Barry O'Donovan
linuxgazette.net/107/odonovan.htm
Нравится
Не нравится

2 комментария

22:58
Текста много. Надо почитать ;)
17:45
Попробывал покавырять- неполучилось :(