Создание SSL-туннеля при помощи Stunnel в Ubuntu
Что такое Stunnel?
Программа Stunnel предназначена для развертывания шифрования SSL между удаленным клиентом и локальным или удаленным сервером. Stunnel добавляет функциональность SSL к наиболее часто используемым демонам Inetd (например, POP2, POP3) и IMAP-серверам без каких-либо изменений в коде программы.
Stunnel превращает любой небезопасный TCP-порт в зашифрованный с помощью криптографического пакета OpenSSL. Это похоже на небольшую безопасную VPN, которая работает на определенных портах.
Примечание: данное руководство было протестировано на виртуальных выделенных серверах Ubuntu 12.04, Ubuntu 12.10, Ubuntu 13.04.
1: Подготовка системы
При помощи нижеприведенных команд обновите список пакетов и сами пакеты:
apt-get update
apt-get upgrade
2: Установка Stunnel
Программу Stunnel можно установить при помощи стандартного менеджера пакетов:
apt-get install stunnel4 -y
3: Настройка Stunnel
Настройки Stunnel хранятся в файле stunnel.conf, который по умолчанию находится в /etc/stunnel. Чтобы создать этот файл, используйте:
nano /etc/stunnel/stunnel.conf
Чтобы идентифицировать себя на сервере, нужно использовать сертификат SSL; для этого необходимо задать путь к этому сертификату в файле stunnel.conf Используйте следующую строку (сам файл сертификата будет создан далее):
cert = /etc/stunnel/stunnel.pem
Затем нужно указать сервис для взаимодействия с Stunnel. Это может быть любой сервис, который использует сеть (почтовый сервер, прокси-сервер и т.д.).
В данном руководстве для примера будет показано, как защитить трафик между прокси-сервером Squid и клиентом, использующим Stunnel. Инструкции по установке Squid можно найти в разделе 6.
Указав название сервиса, взаимодействующего с Stunnel, нужно указать Stunnel, на каком порте нужно прослушивать данный сервис. Это может быть любой из 65535 портов, если только он не заблокирован другим сервисом или фаерволом.
[squid]
accept = 8888
Далее нужно указать в конфигурационном файле порт и IP-адрес сервиса, для которого создается безопасный туннель. В основном Stunnel принимает пакеты от безопасного порта, а затем пересылает их на порт и IP-адрес указанного сервиса.
По умолчанию Squid-прокси запускается на локальном хосте и использует порт 3128; следовательно, чтобы программа Stunnel могла принимать соединения с этим сервисом, в данном случае в конфигурационный файл нужно внести следующую строку:
connect = 127.0.0.1:3128
В целом конфигурационный файл stunnel.conf должен иметь такой вид:
client = no
[squid]
accept = 8888
connect = 127.0.0.1:3128
cert = /etc/stunnel/stunnel.pem
Примечание: параметр client = no не является обязательным, поскольку Stunnel по умолчанию работает в режиме сервера.
4: Создание SSL-сертификата
Stunnel использует сертификат SSL для защиты соединений. Такой сертификат можно легко создать с помощью пакета OpenSSL:
openssl genrsa -out key.pem 2048
openssl req -new -x509 -key key.pem -out cert.pem -days 1095
cat key.pem cert.pem >> /etc/stunnel/stunnel.pem
Вышеприведенные команды генерируют закрытый ключ, создают сертификат при помощи этого ключа, а затем объединяют эти файлы в один файл по имени stunnel.pem, который и будет использовать Stunnel.
Примечание: при создании сертификата нужно указать некоторую информацию; обратите внимание на поле Common Name – в нем нужно указать имя хоста или IP-адрес сервера.
Затем настройте автоматический запуск Stunnel. Для этого откройте файл /etc/default/stunnel4 в текстовом редакторе:
nano /etc/default/stunnel4
и измените значение параметра ENABLED на 1:
ENABLED=1
В завершение перезапустите Stunnel, чтобы обновить настройки.
/etc/init.d/stunnel4 restart
5: Установка прокси-сервера Squid
Чтобы установить Squid, используйте:
apt-get install squid3 -y
6: Настройка Stunnel как клиента
Примечание: данный раздел демонстрирует установку и настройку Stunnel в качестве клиента в Windows, но настройки и инструкции по установке программы в Linux или даже Android останутся такими же. Единственное отличие – местонахождение конфигурационного файла stunnel.conf.
Для того, чтобы Stunnel мог взаимодействовать с сервером, сертификат SSL (см. раздел 4) должен находиться на клиенте. Существует множество способов перемещение файла stunnel.pem с сервера, но в данном случае для этого используется протокол SFTP – одновременно достаточно простой и безопасный.
При помощи SFTP-клиента (например, Filezilla) подключитесь к серверу и загрузите файл stunnel.pem из каталога /etc/stunnel/ на клиент.
Примечание: чтобы получить больше информации о работе SFTP, читайте руководство «Использование SFTP для безопасного обмена файлами с удаленным сервером».
Скачайте Stunnel с сайта проекта.
Установите Stunnel в любой удобной точке системы. Затем перейдите в папку Stunnel и переместите в нее файл сертификата stunnel.pem.
Создайте в папке Stunnel файл stunnel.conf (если такого файла еще нет). Откройте файл при помощи текстового редактора (например, Notepad).
Для начала нужно указать путь к сертификату, который в Windows находится в каталоге Stunnel.
Примечание: в Ubuntu этот файл находится в каталоге /etc/stunnel/.
cert = stunnel.pem
В данном случае нужно перевести Stunnel в режим клиента. Поместите следующую строку в файл:
client = yes
Далее нужно указать конфигурации сервиса, который нужно использовать.
Сначала укажите имя сервиса, затем его IP и порт, который должна прослушивать программа Stunnel на клиенте.
[squid]
accept = 127.0.0.1:8080
Для этого подойдет любой порт на клиентском компьютере, если он не занят другим сервисом и не блокируется брандмауэром.
Затем нужно настроить Stunnel для передачи пакетов, поступающих на данный порт, серверу Stunnel; для этого укажите IP-адрес виртуального сервера и порт, заданный при настройке сервера Stunnel (в данном случае это порт 8888):
connect = [внешний IP-адрес]:8888
В итоге файл stunnel.conf будет иметь такой вид:
cert = stunnel.pem
client = yes
[squid]
accept = 127.0.0.1:8080
connect = [Server’s Public IP]:8888
Сохраните и закройте файл.
Готово! Взаимодействие клиента и сервера надежно защищено SSL-туннелем. Теперь для подключения к любому сервису VPS нужно вводить не только IP, но также и порт, заданный в параметре accept конфигурационного файла Stunnel.
Например, чтобы подключиться к прокси-серверу Squid на облачном сервере, нужно указать 127.0.0.1:8080, и Stunnel автоматически подключится к сервису, запущенному на указанном порте. Чтобы защитить трафик, настройте браузер использовать порт 8080 в качестве прокси.
Tags: Cloud Server, Linux, OpenSSL, Squid, SSL, Stunnel, TCP, Ubuntu, Ubuntu 12.04, Ubuntu 12.10, Ubuntu 13.04, Windows
1 комментарий
Как можно использовать socks, который в браузерах например поддерживается сразу, чтоб не ставить stunnel?