Гид по технологиям

Установка и использование Apache Guacamole на Rocky Linux 8

• 8 min read • DevOps • Обновлено 26 Nov 2025
Guacamole на Rocky Linux 8 — установка и настройка
Guacamole на Rocky Linux 8 — установка и настройка

Важное: все команды выполняйте от пользователя с sudo-привилегиями. Замените примеры доменов и IP-адресов на свои.

Что такое Apache Guacamole

Apache Guacamole — это серверное приложение и веб-клиент, позволяющие подключаться к удалённым рабочим столам через браузер без установки дополнительных плагинов. Ключевые компоненты:

  • guacamole-server — нативная серверная часть (включая демон guacd), который выступает прокси к удалённым сессиям.
  • guacamole-client — Java/JavaScript веб-приложение, разворачиваемое в контейнере сервлетов (Tomcat).

Краткое определение: Guacamole — веб-шлюз к удалённым рабочим столам по SSH, RDP и VNC.

План установки (микро-методология)

  1. Подготовка сервера, пакетов и брандмауэра.
  2. Установка зависимостей и сборка guacamole-server (guacd).
  3. Установка Tomcat и размещение guacamole.war.
  4. Настройка MySQL для хранения пользователей (JDBC аутентификация).
  5. Настройка SSL (Let’s Encrypt) и Nginx как обратного прокси.
  6. Тестирование, жесткая настройка безопасности, мониторинг и бэкапы.

Предпосылки

  • Сервер с Rocky Linux 8, минимум 2 ГБ ОЗУ и 2 CPU.
  • Домен, указывающий на сервер (в примере: uvdesk.example.com и guacamole.example.com).
  • Пользователь с правами sudo.
  • Обновлённая система:
$ sudo dnf update
  • Утилиты (часть пакетов может уже быть установлена):
$ sudo dnf install wget curl nano unzip yum-utils -y

Шаг 1 — Настройка брандмауэра

Rocky Linux использует firewalld. Проверьте статус:

$ sudo firewall-cmd --state
running

Разрешите HTTP/HTTPS (и другие нужные сервисы):

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --reload

Проверьте активные службы:

$ sudo firewall-cmd --permanent --list-services

Шаг 2 — Установка библиотек и репозиториев

Включите EPEL и PowerTools, затем установите обязательные и опциональные зависимости для сборки Guacamole.

$ sudo dnf install epel-release -y
$ sudo dnf config-manager --set-enabled powertools
$ sudo dnf install cairo-devel libjpeg-turbo-devel libjpeg-devel libpng-devel libtool libuuid-devel uuid-devel make cmake -y

Включите RPMFusion Free для ffmpeg-devel:

$ sudo dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm

Установите опциональные пакеты (для поддержки RDP, аудио, вебсокетов и др.):

$ sudo dnf install ffmpeg-devel freerdp-devel pango-devel libssh2-devel libtelnet-devel libvncserver-devel libwebsockets-devel pulseaudio-libs-devel openssl-devel compat-openssl10 libvorbis-devel libwebp-devel libgcrypt-devel -y

Примечание: если сборка выдаёт отсутствие опциональных библиотек, вы потеряете соответствующие функции (например звук или WebP). Критичные библиотеки обязательны.

Шаг 3 — Установка Apache Tomcat и Java

Установим OpenJDK 11 и Tomcat 9.

Установка Java

$ sudo dnf install java-11-openjdk-devel -y
$ java -version

Создание пользователя Tomcat и установка Tomcat

$ sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat
$ TVERSION=9.0.59
$ wget https://dlcdn.apache.org/tomcat/tomcat-9/v${TVERSION}/bin/apache-tomcat-${TVERSION}.tar.gz
$ sudo tar -xf apache-tomcat-${TVERSION}.tar.gz --strip-components=1 -C /opt/tomcat/
$ sudo chown -R tomcat:tomcat /opt/tomcat

Создайте systemd-юнит для Tomcat в /etc/systemd/system/tomcat.service (пример — ниже).

[Unit]
Description=Apache Tomcat 9 Servlet container
Wants=network.target
After=network.target

[Service]
Type=forking
User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="JAVA_OPTS=-Djava.awt.headless=true"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
Restart=always

[Install]
WantedBy=multi-user.target
$ sudo systemctl daemon-reload
$ sudo systemctl enable tomcat --now
$ sudo systemctl status tomcat

Если Tomcat не запускается — проверьте логи /opt/tomcat/logs/catalina.out и journalctl -u tomcat.

Шаг 4 — Скачивание и сборка guacamole-server (guacd)

Загрузите исходники Guacamole и соберите guacamole-server (включая guacd).

$ GVERSION=1.4.0
$ wget https://downloads.apache.org/guacamole/${GVERSION}/source/guacamole-server-${GVERSION}.tar.gz
$ tar -xzf guacamole-server-${GVERSION}.tar.gz
$ cd guacamole-server-${GVERSION}/
$ ./configure --with-systemd-dir=/etc/systemd/system/
$ make && sudo make install
$ sudo ldconfig
$ sudo systemctl daemon-reload
$ sudo systemctl enable guacd --now
$ sudo systemctl status guacd

В выводе ./configure будут перечислены обнаруженные библиотеки и поддерживаемые протоколы. Если важные компоненты отмечены «no», установите соответствующие dev-пакеты и повторите сборку.

Шаг 5 — Установка Guacamole Client (guacamole.war)

Создайте конфигурационную директорию и загрузите бинарный WAR:

$ sudo mkdir /etc/guacamole
$ sudo wget https://downloads.apache.org/guacamole/${GVERSION}/binary/guacamole-${GVERSION}.war -O /etc/guacamole/guacamole.war
$ sudo ln -s /etc/guacamole/guacamole.war /opt/tomcat/webapps/
$ sudo chown -R tomcat:tomcat /opt/tomcat/webapps

Создайте файл конфигурации guacd (/etc/guacamole/guacd.conf):

[daemon]
log_level = info

[server]
bind_host = your_server_IP
bind_port = 4822

Замените your_server_IP на публичный или локальный IP, где guacd должен слушать. Перезапустите сервисы:

$ sudo systemctl restart tomcat guacd

Шаг 6 — Установка и настройка MySQL (JDBC аутентификация)

Guacamole поддерживает JDBC-аутентификацию. Для этого создадим базу и пользователя.

$ sudo dnf install mysql-server -y
$ sudo systemctl enable mysqld --now
$ sudo mysql_secure_installation

В интерактивном мастере выберите нужные опции: включение Validate Password Component (по желанию) и установка root-пароля.

В MySQL создайте пользователя и базу:

$ mysql -u root -p
mysql> CREATE USER 'guacamole_user'@'localhost' IDENTIFIED BY 'Your_password2';
mysql> CREATE DATABASE guacamole_db;
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';
mysql> exit

Импорт схемы JDBC из архива плагина (далее).

Шаг 7 — Настройка Guacamole для работы с базой

Создайте нужные директории и укажите GUACAMOLE_HOME:

$ sudo mkdir /etc/guacamole/{extensions,lib}
$ echo "GUACAMOLE_HOME=/etc/guacamole" | sudo tee -a /etc/default/tomcat

Скачайте JDBC-плагин и MySQL-коннектор:

$ cd ~
$ wget https://downloads.apache.org/guacamole/${GVERSION}/binary/guacamole-auth-jdbc-${GVERSION}.tar.gz
$ tar -xf guacamole-auth-jdbc-${GVERSION}.tar.gz
$ sudo mv guacamole-auth-jdbc-${GVERSION}/mysql/guacamole-auth-jdbc-mysql-${GVERSION}.jar /etc/guacamole/extensions/
$ cd guacamole-auth-jdbc-${GVERSION}/mysql/schema
$ cat *.sql | mysql -u root -p guacamole_db
$ cd ~
$ wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.28.tar.gz
$ tar -xf mysql-connector-java-8.0.28.tar.gz
$ sudo mv mysql-connector-java-8.0.28/mysql-connector-java-8.0.28.jar /etc/guacamole/lib/

Создайте файл /etc/guacamole/guacamole.properties:

guacd-hostname: your_server_ip
guacd-port:     4822

# MySQL properties
mysql-hostname: localhost
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: Your_password2

Сделайте символическую ссылку в домашней директории Tomcat:

$ sudo ln -s /etc/guacamole /opt/tomcat/.guacamole
$ sudo systemctl restart tomcat

Примечание: guacd не зависит от guacamole.properties и потому не требует перезапуска после изменения файла свойств.

Шаг 8 — Установка SSL (Let’s Encrypt)

Установите Certbot и получите сертификат для домена.

$ sudo dnf install certbot -y
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m admin@guacamole.example.com -d guacamole.example.com

Сгенерируйте Diffie-Hellman параметр:

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Создайте вебруут для автообновления и cron-задачу для certbot:

$ sudo mkdir -p /var/lib/letsencrypt
$ sudo nano /etc/cron.daily/certbot-renew

Добавьте:

#!/bin/sh
certbot renew --cert-name guacamole.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Сделайте исполняемым:

$ sudo chmod +x /etc/cron.daily/certbot-renew

Шаг 9 — Nginx как обратный прокси

Подготовка Tomcat для передачи реального IP

Отредактируйте /opt/tomcat/conf/server.xml и добавьте RemoteIpValve внутри Host, чтобы Tomcat видел реальные IP-клиентов через X-Forwarded-* заголовки.

Перезапустите Tomcat.

Установка Nginx

$ sudo dnf module install nginx:1.20 -y
$ sudo systemctl enable nginx

Создайте /etc/nginx/conf.d/guacamole.conf с конфигурацией SSL и прокси:

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  guacamole.example.com;

    access_log  /var/log/nginx/guacamole.access.log;
    error_log   /var/log/nginx/guacamole.error.log;
    
    ssl_certificate      /etc/letsencrypt/live/guacamole.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/guacamole.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/guacamole.example.com/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;

    location / {
      proxy_pass http://127.0.0.1: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;
      client_max_body_size 1g;
      access_log off;
  }
}
# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  guacamole.example.com;
    return 301   https://$host$request_uri;
}

Добавьте server_names_hash_bucket_size 64 в /etc/nginx/nginx.conf перед include и проверьте конфигурацию nignx -t.

Разрешите сетевые соединения для Nginx в SELinux:

$ sudo setsebool -P httpd_can_network_connect 1
$ sudo systemctl start nginx

Перезапустите Tomcat.

Шаг 10 — Доступ к Guacamole и начальная настройка

Откройте https://guacamole.example.com в браузере. По умолчанию логин/пароль: guacadmin/guacadmin.

Экран администратора Guacamole

Важно: сразу создайте нового пользователя администратора и удалите guacadmin для безопасности.

Создание нового администратора

  1. В веб-интерфейсе нажмите на guacadmin в правом верхнем углу → Settings.
  2. Перейдите на вкладку Users → New User.
  3. Заполните поля, отметьте необходимые привилегии и сохраните.
  4. Выйдите и войдите под новым пользователем.
  5. Удалите guacadmin.

Настройки Guacamole

Шаг 11 — Как пользоваться Guacamole (пример SSH-подключения)

  1. Settings → Connections → New Connection.
  2. Укажите имя и выберите протокол SSH.
  3. В Parameters задайте hostname (IP), порт (22 по умолчанию) и имя пользователя.
  4. Укажите пароль или приватный ключ и при необходимости passphrase. Сохраните.
  5. На главной панели нажмите на подключение — откроется терминал.

Критерии приёмки

  • Веб-интерфейс доступен по HTTPS и корректно загружает guacamole (URL: https://ваш-домен).
  • guacd запущен и слушает порт 4822 (systemctl status guacd → active).
  • Tomcat обслуживает guacamole.war и приложение развернуто (папка webapps/guacamole).
  • JDBC-аутентификация работает: пользователи созданы в guacamole_db и могут логиниться.
  • SSL-сертификат корректно установлен и автоматическое обновление работает.

Проверка и тесты (Test cases)

  1. Проверка доступности GUI: curl -k -I https://guacamole.example.com → 200 OK.
  2. Вход пользователем из БД: логин/пароль созданного пользователя — вход успешен.
  3. SSH-сессия: открыть подключение — получить терминал.
  4. Проверка guacd: ss -ltnp | grep 4822 или sudo systemctl status guacd.
  5. Проверка автозапуска: reboot сервера → все сервисы должны подняться.

Отладка и типичные ошибки

  • guacd не стартует: проверьте /var/log/messages, journalctl -u guacd, убедитесь, что порт 4822 свободен.
  • guacamole.war не разворачивается: посмотрите /opt/tomcat/logs/catalina.out и /opt/tomcat/logs/localhost..log.
  • Не работает JDBC-аутентификация: проверьте, что guacamole-auth-jdbc-mysql-<версия>.jar в /etc/guacamole/extensions и mysql-connector в /etc/guacamole/lib; проверьте права доступа;
  • Ошибки SELinux: используйте sudo ausearch -m avc -ts recent или временно отключите SELinux для диагностики.
  • Nginx: проверьте /var/log/nginx/guacamole.error.log и test конфигурации sudo nginx -t.

План отката (Incident runbook)

  1. Если после обновления Guacamole сервис не работает — откатите guacamole.war:
$ sudo mv /opt/tomcat/webapps/guacamole.war /opt/tomcat/webapps/guacamole.war.broken
$ sudo mv /etc/guacamole/backup/guacamole.war /etc/guacamole/guacamole.war
$ sudo systemctl restart tomcat
  1. Если база повреждена — восстановите из дампа:
$ mysqldump -u root -p guacamole_db > guacamole_db.bak.sql
$ mysql -u root -p guacamole_db < guacamole_db.bak.sql
  1. Если сертификат потерян — временно включите HTTP и используйте временный самоподписанный сертификат для восстановления доступа.

Бэкап и восстановление (шаблон)

Регулярно выполняйте бэкап базы и конфигураций:

# Дамп БД
$ mysqldump -u root -p guacamole_db > /backup/guacamole_db_$(date +%F).sql
# Конфигурации
$ tar -czf /backup/guacamole-etc-$(date +%F).tar.gz /etc/guacamole /opt/tomcat/conf /etc/nginx/conf.d/guacamole.conf

Роли и чеклисты

Администратор (перед установкой)

  • Проверить требования (RAM, CPU, диск).
  • Настроить DNS и убедиться в доступности домена.
  • Обновить систему и установить нужные репозитории.

DevOps / Системный инженер (установка)

  • Установить и настроить Tomcat; создать systemd-юнит.
  • Собрать guacd и убедиться, что он слушает 4822.
  • Развернуть guacamole.war и проверить логи Tomcat.
  • Настроить Nginx и SSL.

Специалист по безопасности

  • Удалить guacadmin после создания нового администратора.
  • Настроить брандмауэр и SELinux.
  • Прото́колировать доступ и настроить ротацию логов.
  • Настроить MFA/SSO (при поддержке) или LDAP/AD.

Служба техподдержки

  • Иметь инструкции восстановления пароля и восстановления сессии.
  • Иметь резервные ключи доступа и политики защиты приватных ключей.

Безопасность и hardening

  • Удалите учётную запись guacadmin и создайте отдельного администратора.
  • Минимизируйте права MySQL-пользователя (используйте отдельного пользователя с минимальным набором привилегий).
  • Храните конфигурационные файлы и дампы в каталоге с ограниченным доступом и шифруйте бэкапы.
  • Ограничьте доступ к интерфейсу Guacamole через IP-ACL, если возможно.
  • Включите журналирование и мониторинг (systemd, fail2ban для защиты от brute-force).
  • При возможности используйте централизованную аутентификацию (LDAP, SSO) вместо локальных паролей.

Конфиденциальность и соответствие (GDPR)

  • Если в Guacamole хранятся персональные данные, обеспечьте шифрование резервных копий и ограничьте доступ.
  • Логи доступа могут содержать персональные данные — настройте политике хранения и удаление по расписанию.
  • Документируйте, где и как используются идентификаторы пользователей, и назначьте владельца данных.

Мониторинг и SLA рекомендации

  • Мониторьте состояние системd-сервисов (tomcat, guacd, nginx) и доступность порта 443.
  • Установите проверку соединения с базой данных и тестовое подключение к одной тестовой сессии.
  • Уведомления: срабатывание на падение каждого сервиса.

Совместимость и миграция

  • При обновлении Guacamole проверяйте совместимость расширений (extensions) и JDBC-плагинов с версией Guacamole.
  • Перед обновлением делайте полный бэкап базы и guacamole.war.

Мерчандайзинг интерфейса (Social preview)

OG title suggestion: “Guacamole на Rocky Linux 8 — установка и настройка” OG description suggestion: “Пошаговый гайд: сборка Guacamole из исходников, настройка Tomcat/guacd/MySQL, SSL и Nginx. Контрольные списки и план отката.”

Частые проблемы и решения

  • “После перезагрузки Guacamole не доступен”: проверьте systemctl status tomcat guacd nginx и журналы.
  • “Пользователь не может войти”: убедитесь, что таблицы JDBC импортированы и расширение .jar присутствует в /etc/guacamole/extensions.
  • “SSL не обновляется”: проверьте cron-скрипт и права на /var/lib/letsencrypt; убедитесь, что certbot может слушать 80 порт при renew/standalone.

Пример Mermaid-диаграммы принятия решения

flowchart TD
  A[Нужен доступ к Guacamole из интернета?] -->|Да| B[Использовать Nginx + SSL]
  A -->|Нет| C[Оставить Tomcat за VPN]
  B --> D[Настроить Let's Encrypt]
  C --> E[Ограничить доступ через Firewall / VPN]
  D --> F[Включить автоматическое продление]
  E --> F

Итог и рекомендации

  • Сборка Guacamole из исходников даёт гибкость, но требует установки множества зависимостей и последующего обслуживания.
  • Для тестовой среды удобно собрать всё на одной машине, для продакшна разделяйте роли (DB, web, guacd) и используйте резервирование.
  • Обязательные шаги: отключить guacadmin, ограничить доступ по сети, автоматизировать бэкапы и мониторинг.

Summary:

  • Guacamole позволяет безопасно предоставлять удалённый доступ через браузер.
  • Основные части: guacd (прокси), guacamole.war (веб-клиент) и JDBC-аутентификация.
  • Обязательно настройте SSL, бэкапы и мониторинг.

Если остались вопросы — опишите вашу конфигурацию (versии пакетов, логи ошибок) и я помогу с диагностикой.

Экран создания нового пользователя Guacamole

Интерфейс добавления соединения Guacamole

Выбор SSH в Guacamole

Параметры SSH в Guacamole

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро