Установка и настройка Apache Guacamole
- Recluse
- 23.08.2023
- 7 903
- 4
- 9
- 9
- 0
Описание
Apache Guacamole - это клиент для удаленного доступа по протоколам RDP, SSH, Telnet, VNC, который работает прямо в браузере, избавляя от необходимости установки дополнительного программного обеспечения на стороне клиента. Все что нужно сделать клиенту - запустить браузер, и перейти на страницу веб-интерфейса сервера Apache Guacamole, после чего начать работу по настроенному протоколу удалённого доступа.
В данном материале мы рассмотрим базовую настройку Guacamole для работы по RDP. Более подробную инструкцию по работе с данным программным обеспечением, включая настройку работы с другими протоколами, можно найти в официальной документации.
Установка
В данном разделе мы рассмотрим установку двух версий Apache Guacamole - последней (на момент написания статьи) за номером 1.5.3 и версии 1.1.0. Версия 1.1.0 примечательна тем, что она последняя в которой без проблем работает браузер Internet Explorer 11, что может быть важным фактором в некоторых случаях.
Apache Guacamole 1.5.3
- Установим необходимые зависимости.
apt install build-essential libcairo2-dev libjpeg62-turbo-dev libpng-dev libtool-bin uuid-dev freerdp2-dev libwebp-dev --no-install-recommends
- Скачаем последний релиз Guacamole-Server, найдя ссылку в разделе загрузок на официальном сайте.
cd /tmp/ wget https://dlcdn.apache.org/guacamole/1.5.3/source/guacamole-server-1.5.3.tar.gz
- Распакуем скачанный архив в одноименную директорию, и перейдем в неё.
tar -xzf guacamole-server-1.5.3.tar.gz cd guacamole-server-1.5.3/
- Запустим скрипт конфигурации.
./configure --with-init-dir=/etc/init.d
Если все проверки были пройдены успешно, то в итоге появится примерно следующее:
------------------------------------------------ guacamole-server version 1.5.3 ------------------------------------------------ Library status: freerdp2 ............ yes pango ............... no libavcodec .......... no libavformat.......... no libavutil ........... no libssh2 ............. no libssl .............. yes libswscale .......... no libtelnet ........... no libVNCServer ........ no libvorbis ........... no libpulse ............ no libwebsockets ....... no libwebp ............. yes wsock32 ............. no Protocol support: Kubernetes .... no RDP ........... yes SSH ........... no Telnet ........ no VNC ........... no Services / tools: guacd ...... yes guacenc .... no guaclog .... yes FreeRDP plugins: /usr/lib/x86_64-linux-gnu/freerdp2 Init scripts: /etc/init.d Systemd units: no Type "make" to compile guacamole-server.
Обращаем внимание на раздел Protocol support - поскольку задачей стоит сделать работу по RDP, то напротив одноименного поля должно стоять значение "yes". Проверяем зависимости, и запускаем скрипт по новой. Если же все хорошо, то запускаем процедуру компиляции, выполнив соответствующую команду.
make
По её завершению, запустим установку.
make install
- Установим Apache Tomcat:
apt install tomcat9 --no-install-recommends
- Скачаем уже готовый образ клиента Apache Guacamole. Его можно найти в разделе загрузок на официальном сайте.
cd /tmp/ wget https://dlcdn.apache.org/guacamole/1.5.3/binary/guacamole-1.5.3.war
- Выполним его установку, просто скопировав его в директорию Tomcat, убрав из имени номер версии.
cp guacamole-1.5.3.war /var/lib/tomcat9/webapps/guacamole.war
- Создадим директории extensions и lib внутри директории
/etc/guacamole/
.mkdir -p /etc/guacamole/{extensions,lib}
- Зададим переменную GUACAMOLE_HOME в файле конфигурации Apache Tomcat.
echo 'GUACAMOLE_HOME=/etc/guacamole' >> /etc/default/tomcat9
- Если вы не отключили в системе IPv6, и при этом используете для работы в сети IPv4, то вам понадобиться вручную назначить прослушивание IPv4 интерфейса. Создаем текстовый файл
/etc/guacamole/guacd.conf
.nano /etc/guacamole/guacd.conf
И добавим туда следующие строки:
[server] bind_host = 127.0.0.1
- Запустим утилиту ldconfig, чтобы избежать ошибки при запуске сервиса Guacamole.
ldconfig
- Включим и запустим сервис серверной части Guacamole.
systemctl enable guacd systemctl start guacd
Теперь, остается только настроить пользователей, которым будет доступен доступ к RDP серверу, и при необходимости, установить нужные расширения. Прочитать про это можно в соответствующем разделе данной статьи.
Apache Guacamole 1.1.0
Данная версия является последней, которая работает с Internet Explorer 11. Именно по этому, процедура работы с данной версией описана здесь отдельно.
- Установим необходимые зависимости, где в отличии от более новых версий Guacamole, есть пакет OSSP UUID, и нет пакета uuid-dev.
apt install build-essential libcairo2-dev libjpeg62-turbo-dev libpng-dev libtool-bin libossp-uuid-dev freerdp2-dev libwebp-dev --no-install-recommends
- Скачаем исходные коды серверной части Apache Guacamole версии 1.1 в директорию /tmp/.
cd /tmp/ wget https://archive.apache.org/dist/guacamole/1.1.0/source/guacamole-server-1.1.0.tar.gz
- Распакуем архив с исходными кодами, и перейдем в полученную в результате распаковки директорию.
tar -xzf guacamole-server-1.1.0.tar.gz cd guacamole-server-1.1.0/
- Выполним скрипт конфигурации.
./configure --with-init-dir=/etc/init.d
По его завершению, внимательно смотрим на вывод скрипта.
------------------------------------------------ guacamole-server version 1.1.0 ------------------------------------------------ Library status: freerdp2 ............ yes pango ............... no libavcodec .......... no libavformat.......... no libavutil ........... no libssh2 ............. no libssl .............. yes libswscale .......... no libtelnet ........... no libVNCServer ........ no libvorbis ........... no libpulse ............ no libwebsockets ....... no libwebp ............. yes wsock32 ............. no Protocol support: Kubernetes .... no RDP ........... yes SSH ........... no Telnet ........ no VNC ........... no Services / tools: guacd ...... yes guacenc .... no guaclog .... yes FreeRDP plugins: /usr/lib/x86_64-linux-gnu/freerdp2 Init scripts: /etc/init.d Systemd units: no Type "make" to compile guacamole-server.
Если там нет ошибок, проверяем, что в разделе "Protocol support" напротив RDP стоит "yes". Если там стоит "no", изучаем лог configure, в котором должно быть указано, по какой причине данный протокол не поддерживается. Если же, в логе ошибок нет, скрипт конфигурации пишет о поддержке протокола RDP, то начнем сборку стандартной командой.
make
По завершению сборки, установим Apache Guacamole.
make install
- Установим контейнер сервлетов Apache Tomcat.
apt install tomcat9 --no-install-recommends
- Скачаем скомпилированный файл клиентской части Guacamole в директорию /tmp/, а затем скопируем его в директорию веб-приложений Tomcat:
cd /tmp/ wget https://archive.apache.org/dist/guacamole/1.1.0/binary/guacamole-1.1.0.war cp guacamole-1.1.0.war /var/lib/tomcat9/webapps/guacamole.war
- Создадим директории для Guacamole.
mkdir -p /etc/guacamole/{extensions,lib}
- Зададим переменную GUACAMOLE_HOME.
echo 'GUACAMOLE_HOME=/etc/guacamole' >> /etc/default/tomcat9
- Выполним утилиту ldconfig для формирования кэша о библиотеках, чтобы избежать ошибки при запуске серверной части Apache Guacamole
ldconfig
- Включим и запустим серверную часть Apache Guacamole.
systemctl enable guacd systemctl start guacd
Теперь осталось только создать пользователей, и при необходимости, установить нужные расширения. Данная часть одинакова для всех версий Apache Guacamole.
Создание пользователей
Для настройки доступных пользователей и соединений потребуется создать файл user-mapping.xml
, в котором будут описаны как пользователи, так и доступные им соединения. Синтаксис данного XML файла следующий:
<user-mapping>
<authorize username="[ИМЯ ПОЛЬЗОВАТЕЛЯ]" password="[ХЭШ MD5 ПАРОЛЯ]" encoding="md5">
<connection name="[ИМЯ СОЕДИНЕНИЯ]">
<protocol>[ПРОТОКОЛ]</protocol>
<param name="[ИМЯ ПАРАМЕТРА]">[ЗНАЧЕНИЕ ПАРАМЕТРА]</param>
</connection>
</authorize>
</user-mapping>
Создадим данный файл и приведем его к нужному виду.
nano /etc/guacamole/user-mapping.xml
Сперва укажем пользователя - для примера пусть будет логин "test" и пароль "test1234". В данном файле пароль хранится в виде md5 хэша, по этому, сперва потребуется его получить с помощью вызова утилиты openssl.
echo -n test1234 | openssl md5
В результате выполнения данной команды будет получен md5 хэш для введенной строки - для строки "test1234" это будет "16d7a4fca7442dda3ad93c9a726597e4". В итоге, файл с пользователем test и его паролем будет выглядеть вот так:
<user-mapping>
<authorize username="test" password="16d7a4fca7442dda3ad93c9a726597e4" encoding="md5">
</authorize>
</user-mapping>
Теперь добавим первый RDP сервер, который будет иметь адрес 192.168.1.5. В данном примере так же будет указан параметр ignore-cert - он отвечает за игнорирование ошибки сертификата RDP сервера, которые могут возникнуть в случае, если у вашего терминального сервера будет самоизданный сертификат.
<user-mapping>
<authorize username="test" password="16d7a4fca7442dda3ad93c9a726597e4" encoding="md5">
<connection name="Test RDP">
<protocol>rdp</protocol>
<param name="hostname">192.168.1.5</param>
<param name="port">3389</param>
<param name="ignore-cert">true</param>
</connection>
</authorize>
</user-mapping>
Можно так же добавить в конфиг работу с приложением RemoteApp - для этого, следует добавить параметр remote-app. При этом, в начале значения данного параметра, наличие двух вертикальных черт перед именем опубликованного приложения строго обязательно!
<user-mapping>
<authorize username="test" password="16d7a4fca7442dda3ad93c9a726597e4" encoding="md5">
<connection name="Test RDP">
<protocol>rdp</protocol>
<param name="hostname">192.168.1.5</param>
<param name="port">3389</param>
<param name="ignore-cert">true</param>
<param name="remote-app">||notepad</param>
</connection>
</authorize>
</user-mapping>
Можно так же добавить второе RDP подключение пользователю - для этого достаточно просто продублировать элемент connection, изменив его параметры на актуальные для второго сервера.
<user-mapping>
<authorize username="test" password="16d7a4fca7442dda3ad93c9a726597e4" encoding="md5">
<connection name="Test RDP">
<protocol>rdp</protocol>
<param name="hostname">192.168.1.5</param>
<param name="port">3389</param>
<param name="ignore-cert">true</param>
<param name="remote-app">||notepad</param>
</connection>
<connection name="Test RDP2">
<protocol>rdp</protocol>
<param name="hostname">192.168.1.6</param>
<param name="port">3389</param>
<param name="ignore-cert">true</param>
</connection>
</authorize>
</user-mapping>
Для применения изменений, необходимо перезапустить Tomcat.
systemctl restart tomcat9
Теперь можно запустить браузер, и попытаться зайти на веб-интерфейс Apache Guacamole. Адрес должен выглядеть следующим образом - http://[АДРЕС ИЛИ ИМЯ СЕРВЕРА]:8080\guacamole
.
/var/log/tomcat9/catalina.out
.Работа с расширениями
Настройка авторизации через Active Directory
Авторизация через Active Directory подключается в Guacamole через расширение, которое доступно на официальном сайте в разделе загрузок, под именем guacamole-auth-ldap. Его необходимо скачать, и распаковать.
cd /tmp/
wget https://dlcdn.apache.org/guacamole/1.5.3/binary/guacamole-auth-ldap-1.5.3.tar.gz
tar -xvzf guacamole-auth-ldap-1.5.3.tar.gz
Затем, нужно скопировать jar файл в директорию для расширений:
cp guacamole-auth-ldap-1.5.3/guacamole-auth-ldap-1.5.3.jar /etc/guacamole/extensions/
Теперь, открываем файл /etc/guacamole/guacamole.properties
и вносим в него нужные изменения:
nano /etc/guacamole/guacamole.properties
Добавляем строки с настройкой вашего LDAP сервера:
# Auth provider class
auth-provider: net.sourceforge.guacamole.net.auth.ldap.LDAPAuthenticationProvider
# LDAP properties
ldap-hostname: CONTROLLER.DOMAIN.LOCAL
ldap-user-base-dn: CN=Users,DC=DOMAIN,DC=local
ldap-username-attribute: sAMAccountName
ldap-search-bind-dn: CN=Guacamole,CN=Users,DC=DOMAIN,DC=local
ldap-search-bind-password: [ПАРОЛЬ ОТ ПОЛЬЗОВАТЕЛЯ]
Разберем данный файл конфигурации:
- ldap-hostname - имя или адрес сервера LDAP (контроллер домена).
- ldap-user-base-dn - путь навигации к объекту с пользователями.
- ldap-username-attribute - используемый атрибут пользователя, по которому следует делать проверку логина.
- ldap-search-bind-dn - в случае, если в используемом LDAP нет возможности проводить проверку анонимно, потребуется указать пользователя, под которым будет проводиться данная проверка. В данном случае, требуется указывать его Distinguished Name, он же путь к записи пользователя.
- ldap-search-bind-password - пароль от пользователя, указанного в параметре ldap-search-bind-dn.
Для начала работы расширения, и применения изменений в настройках, следует перезапустить Tomcat.
systemctl restart tomcat9
Отключение авторизации Guacamole
Если ваш сервер с Guacamole находится внутри вашей локальной сети, и вы не видите смысла усложнять пользователям жизнь в виде дополнительной авторизации при заходе на веб-интерфейс Guacamole, то данную авторизацию можно выключить. Для этого, потребуется использовать нужное расширение, которое можно взять на официальном сайте в разделе загрузок версии 0.9.14, под именем guacamole-auth-noauth-0.9.14.
Поскольку последняя версия расширения была сделана под версию Guacamole 0.9.14, потребуется провести некоторые манипуляции, чтобы она заработала в актуальной версии. Первым делом, нужно скачать данный архив, и открыть или распаковать. Среди файлов в данном архиве будет находиться файл guacamole-auth-noauth-0.9.14.jar, который по сути является zip архивом - его так же следует открыть, и отредактировать файл guac-manifest.json, лежащий в корне архива. В нем следует заменить строку "guacamoleVersion" : "0.9.14"
, на используемую вами, после чего сохранить. Затем, копируем данный jar файл в директорию /etc/guacamole/extensions/.
Открываем файл /etc/guacamole/guacamole.properties
и вносим в него следующие изменения:
# Auth provider class
auth-provider: net.sourceforge.guacamole.net.auth.noauth.NoAuthenticationProvider
# NoAuth properties
noauth-config: /etc/guacamole/noauth-config.xml
Создадим файл конфигурации /etc/guacamole/noauth-config.xml
, и добавим туда информацию о соединении.
<configs>
<config name="RDP" protocol="rdp">
<param name="hostname" value="192.168.1.5" />
<param name="port" value="3389" />
<param name="ignore-cert" value="true" />
</config>
</configs>
Для работы RemoteApp нужно добавить соответствующий параметр.
<configs>
<config name="RDP" protocol="rdp">
<param name="hostname" value="192.168.1.5" />
<param name="port" value="3389" />
<param name="ignore-cert" value="true" />
<param name="remote-app" value="||notepad" />
</config>
</configs>
Для начала работы расширения, или применения изменений в файлах конфигурации, необходимо перезапустить Tomcat.
systemctl restart tomcat9
Настройка обратного прокси в nginx
Если URL к веб-интерфейсу Guacamole покажется излишне сложным, и захочется его упростить, то здесь на помощь может придти веб-сервер nginx с его возможностями обратного проксирования. Поскольку в интернете и так достаточно инструкций по установке и настройке nginx, этот этап будет пропущен, и будет просто приведен готовый конфиг для nginx:
server
{
listen 80;
server_name guacamole.domain.local;
access_log /var/log/nginx/guacamole-access.log;
error_log /var/log/nginx/guacamole-error.log;
location /
{
access_log off;
proxy_pass http://localhost:8080/guacamole/;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
}
}
Добавить комментарий