В данной статье пошагово рассмотрим процесс настройки веб-шлюза Apache Guacamole. Установку будем осуществлять на ОС Ubuntu 20.04.3 LTS. Настройка полная, с СУБД, чтобы можно было полнофункционально использовать админку. В качестве СУБД будем использовать Mysql(MariaDB). Также настроим webproxy используя Nginx
Содержание
- Введение
- Описание тестового стенда
- План работ. Краткое описание действий
- 1. Обновление списка пакетов
- 2. Установка необходимых библиотек и компонентов для Apache Guacamole
- 3. Установка и настройка Tomcat
- 4. Установка и настройка Guacamole server
- 5. Создание системных каталогов guacamole
- 6. Установка и настройка guacamole client
- 7. Настройка Guacamole на подключение к MariaDB (Mysql)
- 8. Проверка работы Guacamole
- 9. Настрйока обратного прокси Nginx для Guacamole
Один из наиболее популярных бесплатных веб шлюзов, для организации удаленных подключений - это несомненно Apache Guacamole. С его помощью можно, относительно просто организовать различные виды удаленных подключений, таких как rdp, vnc, ssh и т.д.
Apache Guacamole можно использовать как кроссплатформенный веб аналог таких популярных утилит как mRemoteNC, mRemoteNC, Remina.
Большинстве статей доступных в интернете используется перепечатка старой статьи, которая не обращается к официальной документации Apache Guacamole. Также в этих статьях используют ссылку на неофициальное зеркало проекта. Мы исправим это.
В этой статье мы сразу рассмотрим настройку подключения к СУБД, чтобы можно было пользоваться веб-админкой для управления новыми подключениями. Поднимать Apache Guacamole и создавать подключения через консоль - глупо. Не будем уподобляться обычном "копипастерам".
Описание тестового стенда
- ОС Ubuntu Desktop 20.04
- СУБД MariaDB
- Веб сервер Nginx
- Guacamole 1.3
- openjdk-11-jdk
- Tomcat 9.0.55
- mysql-connector-java-8.0.26
План работ. Краткое описание действий
- Обновление списка пакетов
- Установка основных пакетов необходимых для Apache Guacamole
- Установка и настройка TomCat
- Установка и настройка Guacamole server
- Установка и настройка Guacamole client
- Установка и настройка Mysql(MariaDB)
- Подключение Guacamole к MariaDB
- Установка и настройка веб сервера Nginx как Web-прокис
1. Обновление списка пакетов
Это важный этап при настройке каждого нового сервиса
sudo apt update
2. Установка необходимых библиотек и компонентов для Apache Guacamole
Установка основных пакетов необходимых для Apache Guacamole. Установим основные пакеты, полный список пакетов можно найти на сайте Apache Guacamole и установить.
sudo apt install make gcc g++ libcairo2-dev libjpeg-turbo8-dev libpng-dev libtool-bin libossp-uuid-dev libavcodec-dev libavutil-dev libswscale-dev freerdp2-dev libpango1.0-dev libssh2-1-dev libvncserver-dev libtelnet-dev libssl-dev libvorbis-dev libwebp-dev
Отдельно обратите внимание на установку Java, в нашем случаи ставим openjdk-11-jdk
sudo apt install openjdk-11-jdk
После установки проверяем проверяем версию
java -version
3. Установка и настройка Tomcat.
Apache Guacamole для работы использует контейнер сервлетов Tomcat. Важно обратить внимание на его настройку и безопасность. Настройку будем делать с заделом на дальнейшее обновление.
3.1 Для запуска Tomcat нужно обязательно использовать отдельного пользователя. НЕЛЬЗЯ запускать Tomcat от пользователя root. Поэтому первым делом мы создадим отдельного пользователя (от которого будет запускаться Tomcat) и группу. Обратите внимание, что этот пользователь не сможет логиниться.
sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat
По рекомендации разработчиков Tomcat, домашним каталогом указываем /opt/tomcat и установку будем производить в этот каталог.
3.2 Теперь можно перейти в скачивание и установке Tomcat.
Проверяем актуальную версию на сайте https://tomcat.apache.org в нашем случаи она 9.0.55
Сразу добавим её как переменную VERSION и дальше будем использовать ее в командах.
Скачиваем и распаковываем в каталог /tmp и распаковываем в, созданный ранее, /opt/tomcat
Для удобства обновления, в будущем, создадим символические ссылки /opt/tomcat/latest и будем работать с ними.
VERSION=9.0.55
wget https://www-eu.apache.org/dist/tomcat/tomcat-9/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz -P /tmp
sudo tar -xf /tmp/apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat/
sudo ln -s /opt/tomcat/apache-tomcat-${VERSION} /opt/tomcat/latest
3.3 Для, созданного нами, пользователя tomcat добавим права на каталог /opt/tomcat и на /opt/tomcat/latest/bin/*.sh (сценарии должны быть исполняемыми)
sudo chown -R tomcat: /opt/tomcat
sudo sh -c 'chmod +x /opt/tomcat/latest/bin/*.sh'
3.4 Настраиваем запуск tomcat как службу
Для этого создадим файл /etc/systemd/system/tomcat.service и внесем в него следующие данные.
[Unit]
Description=Tomcat 9 servlet container
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true"
Environment="CATALINA_BASE=/opt/tomcat/latest"
Environment="CATALINA_HOME=/opt/tomcat/latest"
Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
Обратите внимание на переменную JAVA_HOME если вы используете другую версию, нужно изменить название на актуальную.
В Environment мы используем созданную нами символическую ссылку /opt/tomcat/latest это позволит не менять файл при обновлении версий tomcat
Перезапускаем демон и включаем автозапуск для службы tomcat
sudo systemctl daemon-reload
sudo systemctl enable --now tomcat
По хорошей привычки проверяем работу службы
sudo systemctl status tomcat
4. Установка и настройка Guacamole server
Для установки Guacamole server нужно скачать исходники и собрать из них пакет.
4.1 Скачиваем архив с исходниками Guacamole server c официального сайта и распаковываем его
wget https://downloads.apache.org/guacamole/1.3.0/source/guacamole-server-1.3.0.tar.gz -P /tmp
cd /tmp
tar -xzf guacamole-server-1.3.0.tar.gz
cd guacamole-server-1.3.0/
4.2 Собираем пакет из исходников
./configure --with-init-dir=/etc/init.d
sudo make
sudo make install
sudo ldconfig
4.3 Настраиваем guacamole server на запуск при загрузке системы и запускаем его.
sudo systemctl enable guacd
sudo systemctl start guacd
4.4 Проверяем статус службы Guacamole-server (guacd)
Всегда проверяйте работу службы перед дальнейшими действиями
systemctl status guacd
5. Создание системных каталогов guacamole
Для продолжения настройки guacamole создадим три важных каталога, а именно:
- /etc/guacamole - домашний каталог, в нём будем хранить файлы настроек, разные версии клиента и т.д.
- /etc/guacamole/extensions - каталог с расширениями
- /etc/guacamole/lib - каталог с библиотеками
sudo mkdir /etc/guacamole
sudo mkdir /etc/guacamole/{extensions,lib}
6. Установка и настройка guacamole client
Клиент представляет собой Java-приложение. именно для него мы и настраивали Tomcat.
Его также можно собрать из исходников, но зачем? Готовый guacamole-1.3.0.war можно скачать сразу с официального сайта.
Для его установки достаточно скачать его в папку /opt/tomcat/latest/webapps
Так как версии клиента могут меняться рекомендуем использовать символические ссылки
wget https://downloads.apache.org/guacamole/1.3.0/binary/guacamole-1.3.0.war -P /etc/guacamole
ln -s /etc/guacamole/guacamole-1.3.0.war /opt/tomcat/latest/webapps/guacamole.war
Командами выше мы скачали готовый файл war и сделали символическую ссылку /opt/tomcat/latest/webapps/guacamole.war теперь для обновления нужно будет просто скачать новую версию war файла и создать новую символическую ссылку.
7. Настройка Guacamole на подключение к MariaDB (Mysql)
На данном этапе мы установим СУБД (MariaDB) и настроим guacamole на подключение к ней. Для этого нужно:
- Внести изменения в конфигурационном файле /etc/guacamole/guacamole.properties
- Скачать и скопировать в папку /etc/guacamole/lib/ коннектор для СУБД (в нашем случае, MariaDB) mysql-connector-java
- Скачать и скопировать в папку /etc/guacamole/extensions/ расширение для подключения guacamole-auth-jdbc
- Создать БД из шаблона
Каталог для этого файла мы как раз создали на шаге "5. Создание системных каталогов guacamole"
7.1 Установка и настройка MariaDB
Устанавливаем MariaDB и запускаем стандартный скрипт для настройки
sudo apt install mariadb-server
sudo mysql_secure_installation
7.2 Создаём БД для Guacamole.
В этой БД будут хранится настройки создаваемых подключений и различные данные о правах пользователей. Также важно создать для этой БД отдельного пользователя.
sudo mariadb
CREATE DATABASE guacamole_db CHARACTER SET UTF8;
CREATE USER guacamole_user@localhost IDENTIFIED BY 'some_password';
GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';
FLUSH PRIVILEGES;
exit
Мы создали базу данных guacamole_db, пользователя guacamole_user с паролем some_password и длие ему права SELECT, INSERT, UPDATE, DELETE
7.3 Подключаем Guacamole к MariaDB
Настраиваем подключение к БД MariaDB. Для этого вносим изменения в файл /etc/guacamole/guacamole.properties
sudo nano /etc/guacamole/guacamole.properties
# MySQL properties
mysql-hostname: localhost
mysql-port: 3306
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: some_password
7.4 Подключаем библиотеку mysql-connector-java-8.0.26.jar
Для подключения к БД нужно скачать и поместить Java-коннектор в папку /etc/guacamole/lib/
wget https://dev.mysql.com/get/Downloads/Connector/mysql-connector-java-8.0.26.tar.gz -P /tmp
cd /tmp
tar -xzf mysql-connector-java-8.0.26.tar.gz
sudo cp /tmp/mysql-connector-java-8.0.26/mysql-connector-java-8.0.26.jar /etc/guacamole/lib/
7.5 Подключаем расширение guacamole-auth-jdbc-mysql-1.3.0.jar
Для настройки аутентификации нужно скачать и поместить расширение в папку /etc/guacamole/extensions/
wget https://downloads.apache.org/guacamole/1.3.0/binary/guacamole-auth-jdbc-1.3.0.tar.gz -P /tmp
cd /tmp
tar -xzf guacamole-auth-jdbc-1.3.0.tar.gz
sudo cp /tmp/guacamole-auth-jdbc-1.3.0/mysql/guacamole-auth-jdbc-mysql-1.3.0.jar /etc/guacamole/extensions/
7.6 Настройка БД
Заключительный этап настройки подключения guacamole к MariaDB это подготовка созданной ранее БД guacamole_db
Для этого это воспользуемся созданным шаблоном который находится в папке schema
cd /tmp/guacamole-auth-jdbc-1.3.0/mysql/
cat schema/*.sql | mysql -u root -p guacamole_db
Процесс настройки БД может занять несколько минут.
8. Проверка работы Guacamole
На этом основная настройка Guacamole завершена. Давайте проверим что все работает. Для этого нужно перейти в браузере по адресу: http://Ваш-ip:8080/guacamole. Если все работает вы попадёте на страницу входа в Guacamole. Для первого входа используйте предустановленный логин guacadmin и пароль guacadmin
9. Настройка обратного прокси Nginx для Guacamole
В заключении настроим обратный прокси на Nginx. Это нужно для того чтобы заходить на веб сервис Guacamole по ip адресу без указания порта 8080 или по доменному имени. Для этого установим веб-сервер Nginx и настроим его.
apt-get install nginx -y
Создаем файл конфигурации нашего хоста guacamole.conf
nano /etc/nginx/sites-available/guacamole.conf
Вносим в него следующие настройки
server {
listen 80;
server_name your-server-ip;
access_log /var/log/nginx/guac_access.log;
error_log /var/log/nginx/guac_error.log;
location / {
proxy_pass http://your-server-ip: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;
proxy_cookie_path /guacamole/ /;
}
}
Подключаем виртуальный хост
ln -s /etc/nginx/sites-available/guacamole.conf /etc/nginx/sites-enabled/
Перезапускаем Nginx
systemctl restart nginx
Теперь веб сервис Guacamole доступен по ip без указания портов.