Отключение закругленных рамок через настройки браузера
Для того, чтобы убрать закругленные рамки вокруг просматриваемой веб-страницы в браузере Microsoft Edge, нужно выполнить (далее…)
Для того, чтобы убрать закругленные рамки вокруг просматриваемой веб-страницы в браузере Microsoft Edge, нужно выполнить (далее…)
В октябре 2023 года в приложении Telegram Desktop сменился значок (иконка) отображающийся в трее — из синего кружка он стал монохромным символом бумажного самолетика. Не всем это нововведение понравилось, (далее…)
В Mozilla Firefox 89 разработчики убрали пункт «Информация об изображении» из контекстного меню изображения, открытого в браузере. Однако, данный пункт можно вернуть, воспользовавшись редактором настроек (далее…)
Начиная с версии 118, в браузере Mozilla Firefox появилась возможность перевода содержимого страницы. Теперь, при заходе на страницы, язык которых отличается от используемого у вас в браузере, Firefox (далее…)
Начиная с версии Mozilla Firefox 142, в браузере появилась возможность предварительного просмотра ссылок. Чтобы её активировать, достаточно задержать левый клик мышкой на нужной ссылке. Выглядеть (далее…)
В современной версии Firefox в адресной строке не отображается протокол подключения к веб-сайту (http или https), в результате чего его можно определить только иконке, слева от адреса. В качестве примера, (далее…)
Сегодня я хотел бы поговорить о такой интересной теме, как анонимность в сети. Во-первых, примем как (далее…)
Среди различных возможностей использования SSH, есть возможность создания локального SOCKS5 прокси-сервера, трафик которого будет туннелироваться через удаленный сервер. В (далее…)
Цель данной статьи заключается в том, чтобы познакомится с основными принципами работы, чтобы понять как (далее…)
Apache Guacamole — это клиент для удаленного доступа по протоколам RDP, SSH, Telnet, VNC, который работает прямо в браузере, избавляя от необходимости установки дополнительного программного обеспечения на стороне клиента. Все что нужно сделать клиенту — запустить браузер, и перейти на страницу веб-интерфейса сервера Apache Guacamole, после чего начать работу по настроенному протоколу удалённого доступа.
В данном материале мы рассмотрим базовую настройку Guacamole для работы по RDP. Более подробную инструкцию по работе с данным программным обеспечением, включая настройку работы с другими протоколами, можно найти в официальной документации.
В данном разделе мы рассмотрим установку двух версий Apache Guacamole — последней (на момент написания статьи) за номером 1.5.3 и версии 1.1.0. Версия 1.1.0 примечательна тем, что она последняя в которой без проблем работает браузер Internet Explorer 11, что может быть важным фактором в некоторых случаях.
apt install build-essential libcairo2-dev libjpeg62-turbo-dev libpng-dev libtool-bin uuid-dev freerdp2-dev libwebp-dev --no-install-recommends
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
apt install tomcat9 --no-install-recommends
cd /tmp/ wget https://dlcdn.apache.org/guacamole/1.5.3/binary/guacamole-1.5.3.war
cp guacamole-1.5.3.war /var/lib/tomcat9/webapps/guacamole.war
/etc/guacamole/.
mkdir -p /etc/guacamole/{extensions,lib}
echo 'GUACAMOLE_HOME=/etc/guacamole' >> /etc/default/tomcat9
/etc/guacamole/guacd.conf.
nano /etc/guacamole/guacd.conf
И добавим туда следующие строки:
[server] bind_host = 127.0.0.1
ldconfig
systemctl enable guacd systemctl start guacd
Теперь, остается только настроить пользователей, которым будет доступен доступ к RDP серверу, и при необходимости, установить нужные расширения. Прочитать про это можно в соответствующем разделе данной статьи.
Данная версия является последней, которая работает с Internet Explorer 11. Именно по этому, процедура работы с данной версией описана здесь отдельно.
apt install build-essential libcairo2-dev libjpeg62-turbo-dev libpng-dev libtool-bin libossp-uuid-dev freerdp2-dev libwebp-dev --no-install-recommends
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
apt install tomcat9 --no-install-recommends
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
mkdir -p /etc/guacamole/{extensions,lib}
echo 'GUACAMOLE_HOME=/etc/guacamole' >> /etc/default/tomcat9
ldconfig
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://[АДРЕС ИЛИ ИМЯ СЕРВЕРА]:8080guacamole.
/var/log/tomcat9/catalina.out.Авторизация через 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: [ПАРОЛЬ ОТ ПОЛЬЗОВАТЕЛЯ]
Разберем данный файл конфигурации:
Для начала работы расширения, и применения изменений в настройках, следует перезапустить Tomcat.
systemctl restart tomcat9
Если ваш сервер с 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
Если 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; } }