Заказ закрыт
RDP по SSH и двухэтапная аутентификация

Бюджет по договоренности
Дано: в вирутальной среде «где-то далеко» существуют виртуальные машины с которыми пользователи должны иметь возможность работать по rdp. 

Требуется: защита траффика, надежная двухэтапная аутентификация, простота использования

Как видится интерфейс юзера: юзер заходит (например в браузере) на страничку, генерирует ключ (например на айфоне или токене), вводит юзернейм и ключ, получает запрос пароля домена, вводит и работает в свое удовольствие.

Предполагаемое решение: «где-то далеко» на границе сети устанавливаем unix (любой), который идентифицирует пользователя по его юзернейму/сгенерированному ключу, строит ssh туннель от компа, с которого заходит пользователь до машины, которая ему назначена из находящихся «где-то далеко», внутри этого туннеля создает rdp-соединение, далее пользователь уже авторизуется в домене.

Требования: с продуктом должно быть удобно работать как пользователю, так и не слишком знакомому с unix администратору.

Пожалуйста, не предлагайте – vpn и все что с ним связано
Опубликован 14.11.2012 в 14:15

Конкурсные работы

  • Алексей Гаврилов  

    14.11.2012 | 16:48 обновлено: 14.11 2012 | 16:48
    Здраствуйте.
    В ходе работы потребуется:
    1. создание "клиента" который будет упрощать работу пользователя (чтоб он не заморачивался)
    2. на linux сервере потребуется настроить ssh сервер и клиент
    • леонид ионкис   

      14.11.2012 | 17:19  

      согласен

      • Михаил Соколов   

        15.11.2012 | 08:08  

        Можно сделать приблизительно так:

        На сервере: Веб страница + База данных (в оперативной памяти) + модуль который умеет авторизовывать ssh пользователя по этой базе

        Процесс подключения будет следующим:
        Клиент:
        1) Пользователь заходит на страницу в интернете под Логином/паролем (он не одноразовый)
        2) Нажимает "генерировать одноразовый пароль"
        3) Копирует пароль в ssh клиент, создает туннель
        4) Подключается по rdp через туннель

        Сервер:
        1) Проверяет логин/пароль (не одноразовый) по базе (sql, ldap, httpaswd)
        2) После генерации сохраняет "ключ" в базе данных (хранится в оперативной памяти)
        3) По таймауту (настраивается) удаляет ключ из базы (например 10 минут)

        Модуль авторизации ssh:
        1) Проверяет есть ли доступ у пользователя по базе данных в памяти, авторизует пользователя.

        Клиентское ПО: 
        Как возможный вариант обертка к plink.exe 
        Могу сделать на java (будет кросс-платформено Windows/Mac/Linux)

        Интерфейс будет предоставлять два поля: логин/пароль (те, что не одноразовые) + кнопка подключиться.
        При подключение будет сворачиваться в трей. Из трея можно будет отключится.
        + возможно дополнительное окно настройки для задания адреса сервера авторизации + сервера ssh (если разные ip/dns имя)
        Программа будет авторизовываться на сервер, получать одноразовый пароль и по нему, подключаться на ssh сервер.

        Итого в рамках проекта нужно реализовать:
        1) Веб сервис защищенный паролем для генерации одноразовых паролей 
        2) Модуль авторизации (работает с базой из пункта 1), удаляет использованные 
        3) Клиент для подключения (обертка над plink.exe, ssh) 
        4) Настройка ssh на использование модуля авторизации (2) 

        Могу на себя взять реализацию всего проекта или его частей.

        • леонид ионкис   

          15.11.2012 | 17:27  

          Update 
          функционал двухходовой аутентификации отпал. 
          оставшаяся задача – удобное туннелирование RDP внутри SSH

          • Михаил Соколов   

            15.11.2012 | 17:47  

            Имеется ввиду удобный способ подключения?
            Если верно, то можно разработать клиентский софт (интерфейс к plink) (как в сообщении выше.

            Кто и как будет управлять пользователями ssh вопрос решен?

            • леонид ионкис   

              19.11.2012 | 16:30  

              к сожалению управлять всем придется мне :( т.ч. нужен простой и понятный интерфейс управления

              • Михаил Соколов   

                20.11.2012 | 07:36  

                Тогда стоит посмотреть на что-то вроде:
                www.ldap-account-manager....

                Т.е. ssh пользователей держать в ldap и управлять через web ui

                Так же можно посмотреть в сторону zentyal (есть web ui для ldap)

                Ну и все же: почему не OpenVPN?
                Идеально подходит, гуи для windows есть, авторизация по ключам
                Управлять можно из web ui (zentyal)
                Гибко, безопасно, надежно... опять же можно проходить через "сурово" настроенные файрволы...

                • леонид ионкис   

                  20.11.2012 | 12:02  

                  vpn делает пользовательский комп частью удаленной сети. часть компов с которых заходят пользователи вызывает много вопросов в части безопасности. вот и не хочется их пускать в удаленную сеть – не нужны они мне там...

                  zentyal мне до настоящего времени был неизвестен – почитаю.

                  я понимаю что хочу получить то чего нет на рынке – именно по этому и обратился на фриланс – мне кажется задача довольно решаемая – поставить юникс "там" и сделать оболочку для rdp-клиента тут... как-то так мне видится...

      • Алексей Гаврилов   

        15.11.2012 | 16:51  

        Вопрос
        1. Пользователи постоянные?

        • леонид ионкис   

          15.11.2012 | 16:56  

          на данном этапе да, но текучку кадров никто не отменял. кто-то уходит. кто-то приходит...

          • Алексей Гаврилов   

            15.11.2012 | 17:20  

            1. порядок (количество)?
            2. os пользователей windows?
            3. думаю пользовтели слишком ленивы чтоб вводить каждый раз пароль к сесии ssh?
            4. У меня нет опыта в разработке веб данная часть задачи может сильно затянутся.

            • леонид ионкис   

              15.11.2012 | 17:27  

              Update 
              функционал двухходовой аутентификации отпал. 
              оставшаяся задача – удобное туннелирование RDP внутри SSH

            • леонид ионкис   

              15.11.2012 | 17:28  

              пользователей не больше 100
              windows 7 и server 2008 r2

              • Алексей Гаврилов   

                15.11.2012 | 18:06  

                как я вижу работу ssh в данной задаче.
                1. создаётся пользователь(в linux) без права на заход в linux
                2. создаётся набор ключей для каждого пользователя (группы) (осилю скрипт для генерации всего этого и отправке по почте )
                3. раздаётся пользователю удобным способом (с инструкциец для чего файл (скриптом))
                4. создается инсталятор для клиентов (без ключа) (с ярлыками для запуска(проброс портов) )
                5. ставится у пользователя софт и ложится ключ (скриптом или пользователем)
                6. они запускают ярлык (открывается порт и открывается клиент rdp на нужный сервер)
                7. ssh сесия сконфигурирована так что если потока данных(соединения rdp) нет(после запуска скрипта) через 60 с(можно задать любой промежуток). сесия закрывается.

                коректируйте если ваша точка зрения на работу другая..
                сразу из недостатков схемы ssh->rdp достаточно продвинутые пользователи (разбирающийся в ssh кленте) могут пробросить порт куда угодно(в пределах доступа linux сервера)

                смогу ответить заврто после 10:00 МКС

                • Михаил Соколов   

                  15.11.2012 | 19:21  

                  >сразу из недостатков схемы ssh->rdp достаточно продвинутые пользователи (разбирающийся в ssh >кленте) могут пробросить порт куда угодно(в пределах доступа linux сервера) 

                  Это ограничивается через настройки ssh

                • леонид ионкис   

                  19.11.2012 | 16:29  

                  примерно так я себе это и видел.
                  сроки/цены?