PDA

Bekijk de volledige versie : stunnel + srelay - туннелирование через SSL



kad
20-04-2009, 14:12
подскажите можно ли чем либо строить тунель используя ssl на машинку?
Это надо на случай если есть доступ в инет только по 80 443 портам через прокси, есть необходимость зацепица за роутер и дальше ходить уже куда хочешь

kodmis
20-04-2009, 16:13
dropbear -p 443
и
http://wl500g.info/showthread.php?t=12833

kodmis
20-04-2009, 18:31
Или


$ ipkg list | grep stunnel
stunnel - 4.25-3 - SSL encryption wrapper for all kinds of servers

ivlis
21-04-2009, 07:22
openvpn на 433 порту решает.

sun0s
06-06-2009, 13:37
я так и сделал. На рутере запущен socks-сервер (srelay) слушающий на localhost, а к нему прицеплен stunnel-сервер, запущенный на 443 порту. С работы запускается stunnel-клиент, и таким образом socks-сервер оказывается на рабочей машине.
Вариант с dropbear -p 443 не работал, потому что ssh handshake отлавливался bluecoat'ом и сессия рвалась. SSL полностью они запретить не могут, потому что тогда никто не сможет ходить по https.

--
sun0s

DfDf
06-06-2009, 22:03
я так и сделал. На рутере запущен socks-сервер (srelay) слушающий на localhost, а к нему прицеплен stunnel-сервер, запущенный на 443 порту. С работы запускается stunnel-клиент, и таким образом socks-сервер оказывается на рабочей машине.
Вариант с dropbear -p 443 не работал, потому что ssh handshake отлавливался bluecoat'ом и сессия рвалась. SSL полностью они запретить не могут, потому что тогда никто не сможет ходить по https.

--
sun0s

Прикольные админы. Парятся над ssh handshake, но забывают про software restriction policy, дабы шибко умные юзвери просто не могли запускать stunnel. :)

SinSel
10-12-2009, 05:44
А можно по-подробнее рассказать о настройке stunnel

kr1sed
10-12-2009, 09:42
А можно по-подробнее рассказать о настройке stunnel

Нарушаем запреты с помощью Stunnel и 3proxy.

В этой статье речь пойдет о возможности обхода некоторых ограничений в виде блокирования нежелательных портов и нежелательного трафика,
встречающихся в основном во внутрикорпоративной среде. Сразу предупрежу, что статья написана, как ознакомление, а не призыв к действию и
если вы решите «провернуть» все на практике, то по «шапке» получать именно вам, а не мне, я за ниже изложенное ответственности не несу. :)

Для реализации нашей идеи нужно установить и настроить Stunnel и 3proxy.

Серверная часть stunnel будет ждать подключение на 443 порту «доверенной зоны» и перенаправлять расшифрованный трафик на интерфейс «петли»
на котором запущен и ждет подключений 3proxy. Клиентская часть stunnel подключается к серверной и гонит весь трафик по защищенному каналу до
3proxy, который, в свою очередь, при успешной аутентификации распределяет этот трафик в нужном нам направлении. Думаю схема понятна.

Серверную часть stunnel я буду устанавливать на беспроводной роутер ASUS WL-500gp v1, прошитый прошивкой «Олега» с подключенной флешкой,
смонтированной в каталог /opt.

Вот подробно - Настройка stunnel и 3proxy (http://bruteforcer.ru/narushaem-zaprety-s-pomoshhyu-stunnel-i-3proxy/)

kr1sed
10-12-2009, 09:42
Установка stunnel.

Начнем с установки пакета stunnel. Подключаемся через ssh к консоли роутера и выполняем команды:


# ipkg update
# ipkg upgrade
# ipkg install stunnel
В процессе установки будет создан файл с сертификатом и ключом, будем следовать рекомендациям с оффсайта и сгенерируем свой.


It is a bad idea to use the stunnel.pem file shipped with stunnel except for testing
Переходим в каталог «/opt/etc/stunnel/» и удаляем файл сертификата, созданный по умолчанию:


# rm -f stunnel.pem

Настройка stunnel.

Теперь правим файл конфигурации, который нам понадобится при генерации файла с новым ключом и сертификатом:


# nano stunnel-cert.conf
В этом файле нужно поправить следующие параметры:


Question
Country name
State or Province name
Locality
Organization Name
Organizational Unit Name
Common Name (FQDN)
Особое внимание следует уделить «Common Name (FQDN)» в этом параметре следует указать
полное доменное имя сервера, если таковое имеется, на котором запущен stunnel.
Генерируем файл с ключом и сертификатом:


openssl req -new -x509 -days 365 -nodes -config stunnel-cert.conf -out stunnel.pem -keyout stunnel.pem
Удаляем временный файл:


# rm -f stunnel.rnd
Выставляем владельца и права доступа на каталог и файлы:


# chown -R nobody:nobody /opt/etc/stunnel
# cd /opt/etc/stunnel
# chmod 600 *
Разберем параметры, что мы задали:

openssl req -new - создание нового сертификата.
-x509 - генерирование самоподписанного сертификата в формате pem.
-days 365 - сертификат будет действителен в течении года.
-nodes - не ставить пароль на ключ.
-config stunnel-cert.conf - конфигурацию берем из файла.
-out stunnel.pem - записать сертификат в файл.
-keyout stunnel.pem - записать ключ в файл.
Вывести информацию о сертификате на экран можно с помощью команд:


# openssl x509 -subject -dates -fingerprint -in stunnel.pem
Если вдруг под рукой не окажется openSSL, то сертификат с ключом можно сгенерировать прямо
на сайте stunnel.org через веб-интерфейс, перейдя по ссылке: http://www.stunnel.org/pem/

Отредактируем конфигурационный файл stunnel, изменив несколько параметров:


# nano stunnel.conf
У меня получился вот такой файл конфигурации:


CAfile = /opt/etc/stunnel/stunnel.pem
cert = /opt/etc/stunnel/stunnel.pem

chroot = /opt/var/stunnel/
setuid = nobody
setgid = nobody

pid = /stunnel.pid

socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1

verify = 2
debug = 7
output = stunnel.log

[3proxy]
accept = 443
connect = 127.0.0.1:3128

Кратко пробежимся по конфигурационному файлу:

CAfile - местоположение сертификата, применяемого при проверке.
cert - имя pem файла в цепочке сертификатов, всегда требуется указание в режиме сервера, указание на стороне клиента - не является
обязательным, но при указании на клиенте будет использован в цепочке сертификатов клиента. Сертификаты должны быть представлены
в формате PEM, и должны быть рассортированы, начиная с сертификата на самом высоком уровне (корневого ЦС).
chroot - запуск сервера в среде chroot.
setuid - имя непривилегированного пользователя от имени которого будет работать сервер.
setgid - имя группы от имени которой будет работать сервер.
pid - файл идентификатора процесса.
verify - достаточно важный параметр определяющий уровень проверки сертификатов у клиентов.
2 — означает разрыв соединения при отсутствии или неизвестном сертификате у клиента.
debug - уровень отладки, в последствии, как только сервер будет настроен, можно выставить
параметр 2 или совсем отключить, при первичных запусках рекомендуется выставить в 7.
output - включение и определение местоположения логов.
accept - на каком интерфейсе и порту принимать соединение.
connect - куда их перенаправлять.
Сохраняем параметры и перезапускаем серверную часть stunnel:


# cd /opt/etc/init.d/
# ls
# ./68Stunnel restart
Проверяем запустился ли stunnel:


# netstat -an | grep LISTEN
Если все хорошо и сервер работает, то переходим к установке 3proxy.

Настройка stunnel и 3proxy (http://bruteforcer.ru/narushaem-zaprety-s-pomoshhyu-stunnel-i-3proxy/)

kr1sed
10-12-2009, 09:42
Установка и настройка 3proxy.

Процесс установки достаточно подробно описан на форуме wl500g.info:
http://wl500g.info/showpost.php?p=159638&postcount=88

Для работы на роутере должны быть установлены следующие пакеты:
ipkg-opt, tar, wget, make, optware-devel, buildroot, nano, net-tools, procps.

Переходим в каталог /opt:


# cd /opt
Скачиваем исходники 3proxy:


# wget http://3proxy.ru/0.6/3proxy-0.6.tgz
Разархивируем:


# tar zxvf 3proxy-0.6.tgz
Собираем:


# cd /opt/3proxy-0.6/
# make -f Makefile.Linux
После компиляции 3proxy, создадим файл конфигурации и разместим его по следующему пути:
/opt/3proxy-0.6/src/config.cfg.

У меня файл конфигурации получился следующего содержания:


daemon
nserver 172.22.0.1
timeouts 1 5 30 60 180 1800 15 60
users "alexey:CR:$1$fgfgfg$qUNgjW8Go0emlW16OWsUc."
log /opt/var/log/3proxy.log D
logformat "%d-%m-%Y %H:%M:%S %U %C:%c %R:%r %O %I %T"
external 0.0.0.0
internal 127.0.0.1
auth strong
proxy -p3128 -n
setgid 99
setuid 99
Объясню некоторые значения и что они означают в конфигурационном файле, остальное затруднений не вызовет:

users - пользователь, которому разрешено пользоваться 3proxy, в данном случае вместо пароля
указан его хэш, рассчитанный с помощью утилиты «mycrypt». Кавычки обязательны, если в строке
встречается знак «$», используемый в 3proxy для подключения файлов конфигурации.
External - интерфейс, от имени которого будут уходить запросы от 3proxy.
Internal - интерфейс, на котором будет ждать соединений прокси сервер, в нашем случае
это интерфейс «петли», потому что, соединения устанавливать с прокси stunnel будет локально.
auth - режим аутентификации, в нашем случае это «strong» — принудительно по логину и паролю.
proxy -p3128 -n - прокси работает на порту 3128 с отключенной NTLM авторизацией.
Setgid, setuid - идентификатор пользователя и группы от имени которого работает процесс прокси,
в нашем случае это nobody (посмотреть id пользователя можно командой «id nobody»).
Иногда, в плане безопасности, бывает не лишним заводить для каждой службы, работающей с сетью, отдельного
пользователя с ограниченными правами, с отключенной оболочкой и возможностью интерактивного входа в систему.

Далее нам понадобится утилита mycrypt, берем ее из приаттаченного архива и кладем по следующему пути:
/opt/bin/, выставляем для нее права 777. Так как в конфигурационном файле пароли пользователей завели
не в открытом, а хэшированном варианте, эта утилита выполняет роль создания хэша и проверки пароля.


# mycrypt <sailt> <password>
mycrypt - http://wl500g.info/attachment.php?attachmentid=4311&d=1235101521

Ну что, когда все настроено, позволим прокси загружаться вместе с роутером,
для этого в файл «/usr/local/sbin/post-mount» вставляем следующий код:


#!/bin/sh
cd /opt/3proxy-0.6/src/
./3proxy config.cfg
Для разрешения входящих соединений на порт прослушиваемый stunnel, добавляем
разрешающее правило для iptables в файл /usr/local/sbin/post-firewall:


iptables -I INPUT -p tcp --dport 443 -j ACCEPT
iptables -t nat -A PREROUTING -i vlan1 -p tcp --dport 443 -j DNAT --to-destination "$4":443

В вашем случае вместо vlan1 указываем тот интерфейс, на котором вы хотите, чтобы stunnel
принимал запросы на подключение. Сохраняем изменения и перезагружаем роутер:


# flashfs save && flashfs commit && flashfs enable && reboot
Проверим все ли работает:


# ps aux | grep 3proxy
# netstat -na | grep 3128
Если в выводе первой команды в процессах значится 3proxy, а в результате вывода второй слушающий порт 3128 на
интерфейсе 127.0.0.1, значит мы все сделали верно и можно переходить к конфигурации клиентской части stunnel.

Настройка stunnel и 3proxy (http://bruteforcer.ru/narushaem-zaprety-s-pomoshhyu-stunnel-i-3proxy/)

kr1sed
10-12-2009, 09:42
Установка Stunnel в качестве клиента.

Установка stunnel в качестве клиента достаточно тривиальна, все действия те же как и
при установке сервера, различия лишь в нескольких строках конфигурационного файла:


cafile = stunnel.pem
cert = stunnel.pem

ocket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1

client = yes
debug = 7
output = stunnel.log

[3proxy]
accept = 127.0.0.1:3333
connect = 192.168.1.1:443
Для примера, файл конфигурации взят от платформы win32.
Ключевые и разнящиеся с серверным файлом конфигурации параметры:


client = yes
accept = 127.0.0.1:3333
connect = 192.168.1.1:443
И еще нужно проследить, если вы будете копировать и редактировать конфигурационный файл с сервера
другой платформы, нежели клиент, чтобы не было параметров не относящихся к клиентской платформе,
например: pid, setuid, setgiud в случае клиента под win32.

Теперь, чтобы проверить нашу работу, открываем «проблемное» ПО на стороне клиента, то есть ту программу,
доступ которой был ограничен, переходим в настройки соединения данной программы, и выставляем в качестве
proxy адрес и порт в соответствии с указанными нами параметрами в конфигурации клиента:
stunnel (accept = 127.0.0.1:3333), а именно — адрес 127.0.0.1, порт 3333, логин и пароль.

Применяем настройки, запускаем клиент stunnel и пробуем соединение. Сейчас должно все работать.

На этом статью можно считать завершенной, до встречи.

Настройка stunnel и 3proxy (http://bruteforcer.ru/narushaem-zaprety-s-pomoshhyu-stunnel-i-3proxy/)

SinSel
10-12-2009, 21:56
Вот подробно - Настройка stunnel и 3proxy (http://bruteforcer.ru/index.php/narushaem-zaprety-s-pomoshhyu-stunnel-i-3proxy/)
Dropbear - авторизация по ключам на Asus WL-500gP (http://bruteforcer.ru/dropbear-avtorizaciya-po-klyucham-na-primere-asus-wl-500gp-v1/)

Спасибо! Буду изучать!

Asgard
10-12-2009, 22:03
Вот подробно - Настройка stunnel и 3proxy
(http://bruteforcer.ru/index.php/2009/11/30/narushaem-zaprety-s-pomoshhyu-stunnel-i-3proxy/)

Установил stunnel согласно инструкции, выполняю ps aux | grep stunnel

root 229 0.0 1.3 1492 420 pts/2 D+ 22:13 0:00 \_ grep stunnel
nobody 142 0.0 4.7 3164 1432 ? S 21:41 0:00 /opt/sbin/stunnel
nobody 143 0.0 4.7 3164 1432 ? S 21:41 0:00 /opt/sbin/stunnel
nobody 144 0.0 4.7 3164 1432 ? S 21:41 0:00 /opt/sbin/stunnel
nobody 145 0.0 4.7 3164 1432 ? S 21:41 0:00 /opt/sbin/stunnel
nobody 146 0.0 4.7 3164 1432 ? S 21:41 0:00 /opt/sbin/stunnel
nobody 149 0.0 4.8 3164 1456 ? Ss 21:41 0:00 /opt/sbin/stunnel

Как видно в памяти висит аж 6 процессов stunnel что настораживает.

Делаю netstat -an | grep LISTEN

tcp 0 0 0.0.0.0:51777 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1026 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN
tcp 0 0 192.168.1.1:139 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
unix 2 [ ACC ] STREAM LISTENING 863 /tmp/php-fcgi.sock-0
unix 2 [ ACC ] STREAM LISTENING 894 /tmp/screens/S-p2p/177.rtorrent

и не вижу строки с stunnel.

Подскажите так и должно быть или где-то нахомутал?

kr1sed
11-12-2009, 09:00
Установил stunnel согласно инструкции, выполняю ps aux | grep stunnel

Как видно в памяти висит аж 6 процессов stunnel что настораживает.

Делаю netstat -an | grep LISTEN

и не вижу строки с stunnel.

Подскажите так и должно быть или где-то нахомутал?
Все верно. Несколько процессов, насколько я понимаю, для поддержки нескольких сессий.
В выводе netstat процесс и не должен быть виден, в вашем случае достаточно убедиться, что прослушивается порт 443.

Asgard
11-12-2009, 13:11
Прикрутил stunnel и 3proxy - в процессах есть, порты открыты. Остался главный вопрос как заставить SSL-клиент поднять туннель с локального компа имеющего доступ в инет только через корпоративный HTTP (HTTPS) прокси.

kr1sed
11-12-2009, 13:45
Напрашивается вопрос, корпоративный прокси "прозрачный"(transparent)?
Если да, то достаточно запустить клиента stunnel, а в программе клиенте(которому "обрезан" доступ) указать использовать прокси 127.0.0.1:рort и прописать логин и пароль для доступа к 3proxy.
Если прокси "не прозрачный", то тут можно попробовать воспользоваться прграммой "соксификатором" позволяющей выстраивать цепочку из прокси.
Ну это все разумеется, если вы обладаете нужными правами в системе.

Asgard
14-12-2009, 16:14
Напрашивается вопрос, корпоративный прокси "прозрачный"(transparent)?
Если да, то достаточно запустить клиента stunnel, а в программе клиенте(которому "обрезан" доступ) указать использовать прокси 127.0.0.1:рort и прописать логин и пароль для доступа к 3proxy.
Если прокси "не прозрачный", то тут можно попробовать воспользоваться прграммой "соксификатором" позволяющей выстраивать цепочку из прокси.
Ну это все разумеется, если вы обладаете нужными правами в системе.

К сожалению прокси непрозрачный и все мои попытки "соксифицировать" stunnel не увенчались успехом, благо я вспомнил о старой доброй программе HTTPort и с ее помощью удалось пробросить stunnel через прокси.

kr1sed
16-12-2009, 16:38
К сожалению прокси непрозрачный и все мои попытки "соксифицировать" stunnel не увенчались успехом, благо я вспомнил о старой доброй программе HTTPort и с ее помощью удалось пробросить stunnel через прокси.
А такой вариант вы пробовали? В свойствах обозревателя Windows указать корпоративный прокси, а в уже самой программе, которой нужен доступ, адрес клиента stunnel?

Asgard
17-12-2009, 00:50
А такой вариант вы пробовали? В свойствах обозревателя Windows указать корпоративный прокси, а в уже самой программе, которой нужен доступ, адрес клиента stunnel?

А каким боком настройки ИЕ касаются stunnel? И потом stunnel без доп. патчей прокси вообще не понимает.

З.Ы. Вопрос к знатокам: как доп. патчи на stunnel ставить под виндозой?

BuuuGGi
05-12-2010, 03:20
Хорошая тема. Спасибо.
Проксю запустили и это здорово, а вот теперь как бы прикрутить + STunnel к этому празднику жизни? Хотелось бы через роутер сделать секьюрный туннель SWAN 2 WAN. Первая мысль приходит это залупить STunnel на localhost, а сквиду в конфе указать брать трафу из localhost залупленого порта STunnelа и так же в обратном направлении. Мысль идёт в верном направлении? :) И вопрос тем кто так уже делал скажите- мощи не пере паяного DIR320 с большим свопом на сколько хватает? Вообще реально пользоваться?

Gaku
20-01-2011, 22:09
1. Почему при запуске sTunnel в памяти появляется сразу шесть процессов?
2. Как заставить sRelay работать по IPv4?Эту тему (http://wl500g.info/showthread.php?t=20327) видел :-(

Спасибо!

Gaku
21-01-2011, 21:51
Здравствуйте!

После неудачи sRelay, решил перейти на Nylon. Установил, всё отлично кроме отсутствия авторизации.

Подскажите пожалуйста а как бы так обеспечить какую-нибудь безопасность? так чтобы к sTunnel-серверу нельзя было подключиться без пароля?

Спасибо!

Gaku
24-01-2011, 08:27
Здравствуйте!

1. Dropbear почему-то очень нагружает процессор во время передачи, что сказывается на скорости. Вероятно, причина в шифровании. Возможно ли его отключить?

2. Пробовал использовать sTunnel[xinetd]+Nylon. Для каждого коннекта в списке "ps" появлялось две дополнительные строчки sTunnel и Nylon. Что негативно сказывается на памяти.

Подскажите пожалуйста решение, которое позволило бы
1. Обеспечить парольный доступ к socks-прокси-серверу (установленном на роутере) извне для нескольких пользователей
2. Раздавать интернет внутри квартиры с высшим приоритетом

Спасибо!

FilimoniC
24-01-2011, 08:46
Здравствуйте!
Здравствуйте!


1. Dropbear почему-то очень нагружает процессор во время передачи, что сказывается на скорости. Вероятно, причина в шифровании. Возможно ли его отключить?
Нет, это основа технологии доступа по SSH. Без шифрования работает http, ftp, telnet (но им файл не передать), nfs.
cifs(samba) тоже с шифрованием, но там оно силь понижается опционально, что вредит совместимости.


2. Пробовал использовать sTunnel[xinetd]+Nylon. Для каждого коннекта в списке "ps" появлялось две дополнительные строчки sTunnel и Nylon. Что негативно сказывается на памяти.

xinetd так устроен, что на каждое новое подключение он поднимает новый экземпляр службы.
Более того, 80% служб в Linux работают по принципу "каждому потоку по процессу". Таким образом есть один главный процесс и по 1 на каждую задачу (worker process)Попробуйте 2жды по SSH прицепиться.
Однако в нормальном софте (не берем xinetd), рабочие процессы (workers) могут использовать память главного процесса.



Подскажите пожалуйста решение, которое позволило бы
1. Обеспечить парольный доступ к socks-прокси-серверу (установленном на роутере) извне для нескольких пользователей
2. Раздавать интернет внутри квартиры с высшим приоритетом

1. 99% прокси серверов умеют пароли. Вам надо установить проксик, настроить и открыть порт наружу.
2. Что такое "интернет с высшим приоритетом"? Представьте толпу ломящуюся в маленький узкий турникет метро. Единственный способ пройти идеально - войти через служебный проход. А если обвешаться мигалками, дубинками, пистолетами, то все равно хоть один идиот да полезет первым, парочка пришмыгнет перед вами, парочку вы пристрелите и прийдется кому то убирать трупы, парочка пойдет вместе с вами и будете обтирать стенки турникета.
Так что либо давайте отдельный канал, либо ищите по слову QoS. Но QoS - решение не позволит на 100% использовать канал, либо же будет слишком долго "выделять вам полосу".



Спасибо!
Незачто

kondrat
06-04-2011, 12:06
Кто настраивал поделитесь опытом.

stunnel.conf
...........
............
[pop3s]
accept = sipnet.ru
connect = sipnet.ru
Username = 00238ХХХХ
.................
стартуем
/opt/etc/init.d/S68stunnel start

получаем
2011.04.06 14:06:29 LOG7[345:1024]: RAND_status claims sufficient entropy for the PRNG
2011.04.06 14:06:29 LOG7[345:1024]: PRNG seeded successfully
2011.04.06 14:06:29 LOG3[345:1024]: Unknown TCP service 'sipnet.ru'
file /opt/etc/stunnel/stunnel.conf line 45: Failed to resolve accepting address

Чую косяк где то в конфиге, но куда копать не знаю.

ryzhov_al
19-05-2014, 14:11
В связи с неоднократными просьбами добавил в Entware stunnel.

Так и не понял в чём убийственная фича этого проксика? Умение зашифровать любое TCP-соединение SSL-сертификатом?

DemonGloom
20-05-2014, 06:58
В связи с неоднократными просьбами добавил в Entware stunnel.

Так и не понял в чём убийственная фича этого проксика? Умение зашифровать любое TCP-соединение SSL-сертификатом?

Угу, именно эта фича. Проблема в том, что иногда дальний конец работает только с ssl, из-за чего и приходится городить такую пакость.
Мне, например, он когда-то нужен был для отправки из php почты через стандартный sendmail через аккаунт гуглопочты

Sitron
02-11-2014, 20:41
Товарищи, а кто-нибудь пробовал поставить srelay на олеговской прошивке?

p.s.http://habrahabr.ru/post/133984/

ryzhov_al
03-11-2014, 13:06
Товарищи, а кто-нибудь пробовал поставить srelay на олеговской прошивке?Кто-то ставил (https://github.com/Entware/entware/issues/43).