суббота, 20 апреля 2013 г.

Web-based SSL VPN

Давненько не брал я в руки шашек, точнее не писал сюда. С конца января произошло главное событие - смена работы. Почему? Много причин. Что приобрел? Возможность получения нового профессионального опыта (да и жалованье поболее), хоть и ценой стресса. Ладно, если хотите лирики - обсудим в комментариях. А теперь по делу...

В связи с предстоящей поездкой за рубежи нашей родины, встала у меня задача организовать универсальный способ попадания на мои подшефные Linux-серверы по защищенному каналу. Дело в том, что в публичных местах провайдер не всегда разрешает что-либо ещё кроме http/https. И с этим надо как-то жить.
Поискав по просторам Сети, наткнулся я на инструмент под названием OpenVPN-ALS, он же Adito. Написано это изделие на Java. Устанавливается на ваш отдалённый как серверная часть, слушает 443 порт. Поэтому, не забудьте освободить этот порт в вашем web-сервере.
Всё, описанное ниже, было опробовано в среде RHEL 5.4 64-bit. Нам потребуются: устновленная Java, openssl, svn и утилита-муравей ant со всеми её зависимостями. Всё ставится стандартным yum из штатного репозитория.
Ещё нужно будет в /etc/hosts  прописать доменное имя вашего сервера и внешний IP-адрес.
Выкачиваем Adito и распаковываем куда-нить в /opt/adito. Далее заходим туда и выполняем команду ant install. Если всё нормально, то мы увидим что-то вроде:
[java] Starting installation wizard........................Point your browser to http://your.domain.dom:28080.
[java]
[java] Press CTRL+C or use the 'Shutdown' option from the web interface to leave the installation wizard.
Значение your.domain.dom будет взято из вашего /etc/hosts. На локальной машине в броузере открываете предложенную ссылку и попадаете в инсталлятор.
Ant может отвалиться с ошибкой нехватки памяти. Для лечения болезни поиграйтесь с переменной  ANT_OPTS и укажите размер памяти для java-машины, например,
export ANT_OPTS="-Xmx512m".
Инсталлятор, запущенный в браузере, проведёт вас по 5 шагам.
Шаг 1: сертификат. Можно создать новый, а можно импортировать. Скажу сразу, у меня создать не получилось, так как на этом этапе инсталлятор вываливался с ошибкой нехватки памяти. Как я это победил - позднее. В процессе генерации сертификата будет запрошен пароль от хранилища ключей, ещё кое-какие анкетные данные.
Шаг 2: выбирает тип хранилища пользователей (по-умолчанию встроенное).
Шаг 3: задать логин и пароль администратора нашего VPN, он потом будет управлять всем оркестром.
Шаг 4: указываем порт, протокол и адрес интерфейса на котором будет висеть наш VPN сервис.
Шаг 5 я пропустил. Всё.
В конце исталлятор выдаст краткий отчет и все позиции должны быть зелёные.
Далее возвращаемся на сервер  в консоль и выполняем команду ant install-service. После чего самая приятная часть: service /etc/init.d/adito start и  chkconfig adito on.
В браузере заходим на https://your.domain.dom и получаем запрос на логин для входа.

Теперь неочевидное. При входе в админку нашего VPN-сервера у нас нет никаких приложений пользовательского уровня. А они есть. Чтобы установить, нужно на сервере сделать следующее:
svn co https://openvpn-als.svn.sourceforge.net/svnroot/openvpn-als/adito-applications/
cd adito-aplications
Придётся несколько минут подождать пока всё скачается и ляжет в каталог ~/adito-aplications
далее переходите в каталог приложения (например, портативная версия putty для windows-клиента) и...
cd adito-application-putty-portable-ssh
ant
На выходе получается архив adito-application-putty-portable-ssh.zip, который нужно скопировать на локальную машину. А вот в web-админке нужно пройти в “Extension Manаger” (меню в столбце слева), там выбрать "Upload Extension" и указать ранее полученный архив с приложением. Спросив пару вопросов, приложение будет установлено в VPN-сервисе.
Теперь, если из-под Windows броузером зайти на наш VPN-сервер, запустить приложение putty, то на локальную машину скачается программа-агент, установится туннель и запустится putty, и вы получаете доступ к shell на отдалённом сервере. Finita.

Борьба с сертификатом. Как я уже упоминал, у меня сертификат инсталлятором не сгенерился по причине возникновения ошибки распределения памяти. Походив по Сети и почитав умное, я сделал следующее: сгенерировал сертификат отдельной утилитой из комплекта Java
keytool -genkey -alias tomcat -keyalg RSA
потом полученный файл ~/.keystore скопировал  на локальную машину и в процессе инсталляции сказал, что я не генерирую новый сертификат, а импортирую из файла формата JKS (Java KeyStore). Подсунув этот самый .keystore я получил желаемое.

Upd.:
1. yum install shellinabox
2. в /etc/sysconfig/shellinaboxd переменную PORT=443
3. service shellinaboxd start
4. в броузере https://your.domain.dom
...
5. profit

Комментариев нет:

Отправить комментарий