STunnel — программа, позволяющая защитить любой небезопасный сервис, способный работать по TCP-протоколу,включая сервисы, которые изначально не имеют интеграции с TSL/SSL. STunnel осуществляет прозрачное, как для пользователя (в случае использования клиентских сертификатов), так и для сервиса шифрование трафика.
Принцип работы демона STunnel прост: зашифрованный пакет, поступающий для сервиса, расшифровывается STunnel и передается незащищенному сервису.
Передача ответа от сервиса происходит в обратном порядке.
К достоинствам STunnel можно отнести также простоту установки и настройки.
Приступим.
Ставим OpenSSL,если кто не поставил.
#cd /usr/ports/security/openssl
#make install
Ставим STunnel.
#cd /usr/ports/security/stunnel
#make && make install
#cp work/stunnel.cnf /usr/local/etc/stunnel/stunnel.conf
добавляем в rc.conf
stunnel_enable=»YES»
Создаем каталог для хранения сертификатов и копируем скачанный с сайта сертификат и приватный ключ сервера.
#mkdir /usr/local/etc/stunnel/certs
#cp certificate.crt /usr/local/etc/stunnel/certs
#cp privatekey.key /usr/local/etc/stunnel/certs
Так как демон STunnel работает в chroot-окружении, создаем каталог для chroot и установливаем нужные права.
#mkdir /var/run/stunnel
#chown stunnel:stunnel /var/run/stunnel
#chmod 700 /var/run/stunnel
Отредактируйте файл конфигурации stunnel и поместите туда следующие строки для
настройки демона stunnel:
Переменная
Значение
cert = /usr/local/etc/stunnel/certs/certificate.crt расположение сертификата
key = /usr/local/etc/stunnel/certs/privatekey.pem расположение ключа
chroot = /var/run/stunnel/ каталог chroot
chroot setuid = stunnel
setgid = stunnel
pid = /stunnel.pid PID-файл, создается в chroot-окружении
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
verify = 0 не запрашивать сертификат клиента
debug = 7 подробность записей в log-файле
output = /var/log/stunnel.log расположение log-файла
Обычные настройки, приведены для ОС FreeBSD:
cert = /etc/stunnel/certificate.crt
key = /etc/stunnel/privatekey.pem
Определите защищаемые сервисы в файле конфигурации, например, так
:
[https]
accept = 192.168.0.1:443
connect = 127.0.0.1:80
либо
[https]
accept = 443
connect = 80
Описание каждого сервиса должно быть в квадратных скобках.
Параметры:
accept
— адрес и порт, на который поступают зашифрованные запросы
connect
— адрес и порт, на который следует передавать расшифрованные данные для незащищенного сервиса.
Если адрес не указан, то использоваться будут все доступные сетевые интерфейсы.
При необходимости, отредактируйте правила брандмауэра.
Запустите stunnel
# stunnel start