STunnel
В этой статье описан процесс быстрого поднятия шифрованного туннеля, который может служить для самых различных целей для 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
Всё, теперь данные от Вас до Вашего прокси-сервера надёжно защищены от сниффинга.