Установка и использование Apache Guacamole на Rocky Linux 8
Важное: все команды выполняйте от пользователя с sudo-привилегиями. Замените примеры доменов и IP-адресов на свои.
Что такое Apache Guacamole
Apache Guacamole — это серверное приложение и веб-клиент, позволяющие подключаться к удалённым рабочим столам через браузер без установки дополнительных плагинов. Ключевые компоненты:
- guacamole-server — нативная серверная часть (включая демон guacd), который выступает прокси к удалённым сессиям.
- guacamole-client — Java/JavaScript веб-приложение, разворачиваемое в контейнере сервлетов (Tomcat).
Краткое определение: Guacamole — веб-шлюз к удалённым рабочим столам по SSH, RDP и VNC.
План установки (микро-методология)
- Подготовка сервера, пакетов и брандмауэра.
- Установка зависимостей и сборка guacamole-server (guacd).
- Установка Tomcat и размещение guacamole.war.
- Настройка MySQL для хранения пользователей (JDBC аутентификация).
- Настройка SSL (Let’s Encrypt) и Nginx как обратного прокси.
- Тестирование, жесткая настройка безопасности, мониторинг и бэкапы.
Предпосылки
- Сервер с 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.

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

Шаг 11 — Как пользоваться Guacamole (пример SSH-подключения)
- Settings → Connections → New Connection.
- Укажите имя и выберите протокол SSH.
- В Parameters задайте hostname (IP), порт (22 по умолчанию) и имя пользователя.
- Укажите пароль или приватный ключ и при необходимости passphrase. Сохраните.
- На главной панели нажмите на подключение — откроется терминал.
Критерии приёмки
- Веб-интерфейс доступен по HTTPS и корректно загружает guacamole (URL: https://ваш-домен).
- guacd запущен и слушает порт 4822 (systemctl status guacd → active).
- Tomcat обслуживает guacamole.war и приложение развернуто (папка webapps/guacamole).
- JDBC-аутентификация работает: пользователи созданы в guacamole_db и могут логиниться.
- SSL-сертификат корректно установлен и автоматическое обновление работает.
Проверка и тесты (Test cases)
- Проверка доступности GUI: curl -k -I https://guacamole.example.com → 200 OK.
- Вход пользователем из БД: логин/пароль созданного пользователя — вход успешен.
- SSH-сессия: открыть подключение — получить терминал.
- Проверка guacd: ss -ltnp | grep 4822 или sudo systemctl status guacd.
- Проверка автозапуска: 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)
- Если после обновления 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- Если база повреждена — восстановите из дампа:
$ mysqldump -u root -p guacamole_db > guacamole_db.bak.sql
$ mysql -u root -p guacamole_db < guacamole_db.bak.sql- Если сертификат потерян — временно включите 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ии пакетов, логи ошибок) и я помогу с диагностикой.




Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента