Stunnel. Шифруем трафик.
Stunnel это по сути дела прокси сервер шифрующий трафик. Его можно использовать в том случае, если сервис не умеет использовать SSL шифрацию, а вам нужно ее обеспечить — воспользоваться можно Stunelем. Типичными примерами использования являются pop3, imap, http сервисы. Это связано с тем, что пароли в этих протоколах передаются открытым текстом и с легкостью могут быть прослушаны обычным snifferом. Конечно большинство современных почтовых и http серверов поддерживают ssl, тем не менее использование stunnel остается актуальным.
Устанавливаем stunnel из портов:
cd /usr/ports/security/stunnel/ make |
В начале будет небольшой диалог настройки:
┌────────────────────────────────────────────────────────────────────┐ │ Options for stunnel 4.27 │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │ [ ] FORK use the fork(3) threading model │ │ │ │ [X] PTHREAD use the pthread(3) threading model (default) │ │ │ │ [ ] UCONTEXT use the ucontext(3) threading model │ │ │ │ [ ] IPV6 enable IPv6 support │ │ ├─└────────────────────────────────────────────────────────────────┘─┤ │ [ OK ] Cancel │ └────────────────────────────────────────────────────────────────────┘ |
Когда сборка закончится сгенерируем сертификат:
make cert |
При этом понадобится заполнить диалог создания сертификата.
И после того, как вы создадите сертификат, можно устанавливать stunnel.
make install clean |
И после того, как установка закончится, можно начинать настройку.
В первую очередь скопируем stunnel-sample.conf в stunnel.conf
cd /usr/local/etc/stunnel/ cp stunnel-sample.conf stunnel.conf |
И редактируем stunnel.conf
#Путь к сертификату #Поскольку у нас stunnel chrootится в /var/tmp/stunnel #То сертификат мы положим прямо в эту директорию и #и он будет в прямо в корне cert = stunnel.pem #Версия SSL sslVersion = SSLv3 #chrootимся в каталог /var/tmp/stunnel chroot = /var/tmp/stunnel #работать будем от юзера stunnel setuid = stunnel #и группы nogroup setgid = nogroup #Путь к пидфайлу. Создадим его прямо в корне pid = /stunnel.pid #Немного стандартного тюнинга socket = l:TCP_NODELAY=1 socket = r:TCP_NODELAY=1 #Описываем сервис, трафик к которому будем шифровать [https] #Внешние соединения принимаем на 443 порту accept = 443 #Переадресовываемся на 80 порт localhost. #Если адрес в connect не указан(192.168.0.1:80), #то по умолчанию подразумевается локалхост connect = 80 TIMEOUTclose = 0 |
далее создаем директорию в которую stunnel будет chrootится:
mkdir /var/tmp/stunnel |
И ставим владельца на эту директорию
chown stunnel:nogroup /var/tmp/stunnel |
Тепеь скопируем сертификат в /var/tmp/stunnel:
cp /usr/local/etc/stunnel/stunnel.pem /var/tmp/stunnel |
Теперь изменим немного /usr/local/etc/rc.d/stunnel, выставим другое место где находится pid файл stunnel.
Для этого найдем строку:
${stunnel_pidfile="/var/run/${name}.pid"} |
и изменим ее:
${stunnel_pidfile="/var/tmp/stunnel/${name}.pid"} |
Теперь остается разрешить запускаться stunnel:
echo 'stunnel_enable="YES"' >> /etc/rc.conf |
теперь запускаем его:
/usr/local/etc/rc.d/stunnel start |
И можно соединятся с нашим сервером по шифрованному каналу.
В конфигурационном файле приведен пример только для вебсервера, но можно организовать шифрованный канал с любым TCP сервисом, на любом порту.
На этом настройка закончена.
By Anonym, 15.11.2009 @ 18:56
Спасибо, хорошее описание. Только поправьте
echo ‘stunnel_enable=»YES»‘ > /etc/rc.conf
на
echo ‘stunnel_enable=»YES»‘ >> /etc/rc.conf