STunnel

Материал из wiki.p3.ru
Версия от 10:56, 23 августа 2012; Eternity (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

В этой статье описан процесс быстрого поднятия шифрованного туннеля, который может служить для самых различных целей для VDS с ОС FreeBSD.

Очевидно, что для создания безопасной и устойчивой к сниффингу прокси-цепочки (ну или любого другого сервиса), необходимо создание шифрованного туннеля. Сразу скажу о том, что VPN на эту роль ну никак не подходит по той простой причине, что ни OpenVPN, ни какие-либо другие реализации VPN под текущей реализацией виртуализации FreeBSD не работают!

Итак, начнём.

Первое, что нужно сделать - это сконфигурировать сам STunnel:

# cd /usr/ports/security/stunnel
# make config

Советую выбрать потоковую модель "Ucontext", ибо все прочие на моей машине приводили к полному зависанию STunnel после определённого периода работы.

Далее:

# make install clean

Этим самым мы скомпилируем, установим STunnel и сразу же удалим временные файлы, которые занимают довольно приличное дисковое пространство.

На этом, фактически, сам процесс установки завершён. Далее следует созать сертификаты безопасности и настроить сам STunnel.

# cd /usr/local/etc/stunnel


Самостоятельно создаем ключи и сертификаты со сроком действия 1 год. В связи с тем, что stunnel не умеет работать с ключами, защищенными паролями, используем опцию -nodes.

# openssl req -new -x509 -days 365 -nodes -out stunnel.cert -keyout stunnel.key
Generating a 1024 bit RSA private key
................++++++
......................++++++
writing new private key to 'stunnel.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Rostov region
Locality Name (eg, city) []:Rostov-on-Don
Organization Name (eg, company) [Internet Widgits Pty Ltd]:home
Organizational Unit Name (eg, section) []:Test Lab
Common Name (eg, YOUR name) []:freebsd410.unreal.net
Email Address []:tigrisha@freebsd410.unreal

Обращаю внимание на то, что Email Address и Common Name должны соответствовать обратной DNS зоне вашего сервера (PTR-запись), иначе это может привести к различным негативным последствиям.

Далее создаёте сам файл конфигурации:

# echo "
cert = /usr/local/etc/stunnel/stunnel.cert
key = /usr/local/etc/stunnel/stunnel.key
; Protocol version (all, SSLv2, SSLv3, TLSv1)
sslVersion = SSLv3
; Some security enhancements for UNIX systems - comment them out on Win32
;chroot = /var/tmp/stunnel
;setuid = stunnel
;setgid = stunnel
; PID is created inside chroot jail
;pid = /stunnel.pid
;engineNum = 1
ciphers = AES256-SHA
; Some performance tunings
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
compression = rle 
; Workaround for Eudora bug
options = DONT_INSERT_EMPTY_FRAGMENTS
; Authentication stuff
;verify = 2
; Don't forget to c_rehash CApath
; CApath is located inside chroot jail
;CApath = /certs
; It's often easier to use CAfile
;CAfile = /usr/local/etc/stunnel/certs.pem
; Don't forget to c_rehash CRLpath
; CRLpath is located inside chroot jail
;CRLpath = /crls
; Alternatively you can use CRLfile
;CRLfile = /usr/local/etc/stunnel/crls.pem 
; Some debugging stuff useful for troubleshooting
debug = 4
output = /var/log/stunnel.log
; Use it for client mode
;client = yes 
[proxy]
accept = 5131
connect = 127.0.0.1:_порт_вашего_http_прокси_
TIMEOUTclose = 0
[sproxy]
accept = 5133
connect = 127.0.0.1:_порт_вашего_https_прокси_
TIMEOUTclose = 0
" > stunnel.conf
</source>

На это серверная часть настройки STunnel завершена. У клиента же потребуется указать в конфигурации всё то же самое, за исключением того, что необходимо закомментировать строчки с путями к сертификату и ключу, раскомментировать строку "client = yes", а также подправить секцию с сервисами следующим образом:

[proxy]
accept = 5131
connect = _ip_адрес_вашего_сервера_:5131
TIMEOUTclose = 0
[sproxy]
accept = 5133
connect = _ip_адрес_вашего_сервера_:5133
TIMEOUTclose = 0
</source>

Теперь в браузере необходимо указать в настройках прокси следущее:

HTTP-прокси: 127.0.0.1:5131
HTTPS-прокси: 127.0.0.1:5133

Всё, теперь данные от Вас до Вашего прокси-сервера надёжно защищены от сниффинга.