Page 1 of 2 12 LastLast
Results 1 to 15 of 29

Thread: stunnel + srelay - туннелирование через SSL

  1. #1

    Post stunnel + srelay - туннелирование через SSL

    подскажите можно ли чем либо строить тунель используя ssl на машинку?
    Это надо на случай если есть доступ в инет только по 80 443 портам через прокси, есть необходимость зацепица за роутер и дальше ходить уже куда хочешь

  2. #2

  3. #3
    Или
    PHP Code:
    ipkg list | grep stunnel
    stunnel 
    4.25-SSL encryption wrapper for all kinds of servers 

  4. #4
    openvpn на 433 порту решает.

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

    --
    sun0s

  6. #6
    Quote Originally Posted by sun0s View Post
    я так и сделал. На рутере запущен socks-сервер (srelay) слушающий на localhost, а к нему прицеплен stunnel-сервер, запущенный на 443 порту. С работы запускается stunnel-клиент, и таким образом socks-сервер оказывается на рабочей машине.
    Вариант с dropbear -p 443 не работал, потому что ssh handshake отлавливался bluecoat'ом и сессия рвалась. SSL полностью они запретить не могут, потому что тогда никто не сможет ходить по https.

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

  7. #7
    А можно по-подробнее рассказать о настройке stunnel

  8. Настройка stunnel & 3proxy

    Quote Originally Posted by SinSel View Post
    А можно по-подробнее рассказать о настройке stunnel
    Нарушаем запреты с помощью Stunnel и 3proxy.

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

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

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

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

    Вот подробно - Настройка stunnel и 3proxy
    Last edited by Omega; 03-11-2014 at 14:13. Reason: fixed

  9. Настройка stunnel & 3proxy

    Установка stunnel.

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

    Code:
    # 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/» и удаляем файл сертификата, созданный по умолчанию:

    Code:
    # rm -f stunnel.pem
    Настройка stunnel.

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

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

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

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

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

    Code:
    # 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 - записать ключ в файл.

    Вывести информацию о сертификате на экран можно с помощью команд:

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

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

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

    Code:
    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:

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

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

    Настройка stunnel и 3proxy
    Last edited by Omega; 03-11-2014 at 14:16. Reason: fixed

  10. Настройка stunnel & 3proxy

    Установка и настройка 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:

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

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

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

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

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

    Code:
    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. Так как в конфигурационном файле пароли пользователей завели
    не в открытом, а хэшированном варианте, эта утилита выполняет роль создания хэша и проверки пароля.

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

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

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

    Code:
    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
    принимал запросы на подключение. Сохраняем изменения и перезагружаем роутер:

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

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

    Настройка stunnel и 3proxy
    Last edited by Omega; 03-11-2014 at 14:17. Reason: fixed

  11. Настройка stunnel & 3proxy

    Установка Stunnel в качестве клиента.

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

    Code:
    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.
    Ключевые и разнящиеся с серверным файлом конфигурации параметры:

    Code:
    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
    Last edited by Omega; 03-11-2014 at 14:18. Reason: fixed

  12. #12
    Спасибо! Буду изучать!
    Last edited by Omega; 03-11-2014 at 14:21. Reason: fixed

  13. #13
    Join Date
    Nov 2009
    Location
    Kyiv, Ukraine
    Posts
    142
    Quote Originally Posted by kr1sed View Post
    Вот подробно - Настройка stunnel и 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.

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

  14. Quote Originally Posted by Asgard View Post
    Установил stunnel согласно инструкции, выполняю ps aux | grep stunnel

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

    Делаю netstat -an | grep LISTEN

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

    Подскажите так и должно быть или где-то нахомутал?
    Все верно. Несколько процессов, насколько я понимаю, для поддержки нескольких сессий.
    В выводе netstat процесс и не должен быть виден, в вашем случае достаточно убедиться, что прослушивается порт 443.
    Last edited by kr1sed; 11-12-2009 at 09:04.

  15. #15
    Join Date
    Nov 2009
    Location
    Kyiv, Ukraine
    Posts
    142
    Прикрутил stunnel и 3proxy - в процессах есть, порты открыты. Остался главный вопрос как заставить SSL-клиент поднять туннель с локального компа имеющего доступ в инет только через корпоративный HTTP (HTTPS) прокси.

Page 1 of 2 12 LastLast

Similar Threads

  1. Проброс USB через TCP/IP (USB/IP) - подключение принтера (МФУ)
    By ryzhov_al in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 184
    Last Post: 05-07-2015, 13:49
  2. Запись IPTV через udpxrec
    By bsl45 in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 134
    Last Post: 17-03-2012, 18:38
  3. Проблема: USB 1.1 устройства через USB 2.0 хаб
    By Rambalac in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 30
    Last Post: 15-09-2009, 13:00
  4. Srelay - Simple proxy server setup
    By dp79 in forum WL-500gP Q&A
    Replies: 6
    Last Post: 17-07-2009, 18:55
  5. Копирование через scp и wl500gp
    By Arceny in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 4
    Last Post: 03-04-2009, 01:19

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •