本页内容
- 先决条件
- 配置软件仓库
- 安装依赖项(编译 guacd 的依赖项、Java 和 Apache Tomcat、MariaDB 服务器、Nginx 和 Certbot)
- 配置 Firewalld
- 配置 MariaDB 数据库
- 安装 Apache Guacamole 服务器(编译并安装 guacd、安装 Apache Guacamole Web 应用)
- 使用 MariaDB 认证配置 Apache Guacamole
- 将 Nginx 配置为反向代理
- 访问 Apache Guacamole
- 结论
- 安装编译 guacd 所需的依赖项
- 安装 Java 和 Apache Tomcat
- 安装 MariaDB 服务器
- 安装 Nginx 和 Certbot
- 编译并安装 guacd
- 安装 Apache Guacamole Web 应用
Apache Guacamole 是一款免费且开源的远程桌面网关,允许你通过 SSH、RDP、VNC 等不同协议远程连接到你的计算机/服务器。Apache Guacamole 由 Apache Software Foundation 维护,并采用 Apache License 2.0 许可。
Apache Guacamole 是一款无客户端的远程桌面网关。你只需使用 Web 浏览器,即可在任何时间、任何地点访问 Apache Guacamole。如果你拥有多个使用不同协议的远程操作系统(例如使用 RDP 的 Windows、使用 VNC 和 SSH 的 Linux 系统),建议使用 Apache Guacamole。
在本指南中,我们将逐步引导你在 AlmaLinux 9 机器上安装 Apache Guacamole 作为远程桌面网关。你将安装 Apache Guacamole,配合 MariaDB 数据库服务器、作为反向代理的 Nginx,然后使用来自 Letsencrypt 的 SSL 来保护该安装。
先决条件
在开始之前,请确保你具备以下条件:
- 一台 AlmaLinux 9 服务器 —— 本演示使用主机名为 guacamole-alma9 的 AlmaLinux 机器。
- 一个具有执行 sudo 权限的非 root 用户。
- 一个指向服务器 IP 地址的域名。
配置软件仓库
你首先要做的是在 AlmaLinux 服务器上配置额外的软件仓库。你必须添加 EPEL 仓库,并启用 CRB(Code Ready Builder)仓库(它是 RHEL 8 上 PowerTools 的替代者),然后你还必须添加 RPMFusion 仓库。
运行以下 dnf 命令,在你的系统上安装一些基础依赖以及 EPEL 仓库。输入 y 确认安装,然后按 ENTER。
sudo dnf install wget nano epel-release dnf-utils

现在运行以下命令以启用 AlmaLinux 的 CRB(Code Ready Builder)仓库。在 RHEL 8 中,该仓库被称为 PowerTools,而从 RHEL 9 开始,其名称已更改为 CRB。
sudo dnf config-manager --set-enabled crb
接下来,运行以下命令将 RPMFusion 仓库添加到你的 AlmaLinux 系统。该仓库提供了 Apache Guacamole 所需的 ffmpeg-devel 软件包。
sudo dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm \
https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm
输入 y 确认安装,并按 ENTER 继续。

安装依赖项
仓库已添加到系统后,你现在可以开始安装 Apache Guacamole 所需的软件包依赖。你将安装以下软件包:
- 编译和安装 guacd 所需的基础依赖。
- 用于运行基于 Java 的 Apache Guacamole Web 应用的 Java 和 Apache Tomcat。
- 将用作 Apache Guacamole 用户认证的 MariaDB 数据库服务器。
- 用作 Apache Guacamole Web 应用反向代理的 Nginx Web 服务器。
- 用于保护 Apache Guacamole 访问的 Certbot。
安装编译 guacd 所需的依赖项
运行以下 dnf 命令,安装将用于编译 guacd 的软件包依赖。输入 y 确认安装,然后按 ENTER。
sudo dnf install cairo-devel libjpeg-turbo-devel libjpeg-devel libpng-devel libtool libuuid-devel uuid-devel make cmake ffmpeg-devel freerdp-devel pango-devel libssh2-devel libtelnet-devel libvncserver-devel libwebsockets-devel pulseaudio-libs-devel openssl-devel compat-openssl11 libvorbis-devel libwebp-devel libgcrypt-devel

此外,输入 y 以添加 RPMFusion 和 EPEL 仓库的 GPG 密钥。

安装 Java 和 Apache Tomcat
现在,运行以下命令在你的 AlmaLinux 服务器上安装 Java 11 和 Apache Tomcat 9。这两个软件包版本均受 Apache Guacamole 支持,因此你可以从 AlmaLinux 的 appstream 仓库安装这两个软件包。
sudo dnf install java-11-openjdk-devel tomcat
出现提示时输入 y,然后按 ENTER。

Java 和 Apache Tomcat 安装完成后,执行以下 java 命令以验证 Java 版本。你应该会看到系统上已安装 Java OpenJDK 11。
java --version

现在运行以下 systemctl 命令以启动并启用 tomcat 服务。
sudo systemctl start tomcat
sudo systemctl enable tomcat
然后验证 tomcat 服务,确保该服务正在运行。
sudo systemctl status tomcat
如果 tomcat 服务器正在运行,输出应显示为 active (running)。

安装 MariaDB 服务器
Apache Guacamole 支持多种认证方式,包括数据库认证、LDAP 认证、Radius、SAML 以及 OpenID。在本演示中,你将通过 MariaDB 服务器使用数据库认证来为 Apache Guacamole 提供认证。
输入以下 dnf 命令以安装 MariaDB 服务器。出现提示时,输入 y 确认并按 ENTER。
sudo dnf install mariadb-server

接下来,运行以下命令以启动并启用 mariadb 服务。
sudo systemctl start mariadb
sudo systemctl enable mariadb
然后验证 mariadb 服务,确保该服务正在运行。
sudo systemctl status mariadb
当 mariadb 状态为 running 时,输出应显示为 active (running)。

安装 Nginx 和 Certbot
现在你将安装 Nginx,它将用作 Apache Guacamole 客户端应用的反向代理,并安装 Certbot 用于生成 SSL 证书并保护 Apache Guacamole。
运行以下 dnf 命令将 Nginx 和 Certbot 安装到你的系统。
sudo dnf install nginx certbot python3-certbot-nginx
输入 y 确认安装,然后按 ENTER。

安装完成后,运行以下 systemctl 命令以启动并启用 Nginx 服务。
sudo systemctl start nginx
sudo systemctl enable nginx
然后验证 Nginx 服务,确保该服务正在运行。
sudo systemctl status nginx
输出 active (running) 表示 Nginx 正在运行。

配置 Firewalld
软件包依赖安装完成后,下一步你将配置 firewalld 并开放 HTTP 和 HTTPS 协议。
运行以下命令在你的 AlmaLinux 服务器上开放 HTTP 和 HTTPS 协议。然后重新加载 firewalld 以应用更改。
sudo firewall-cmd --add-service={http,https} --permanent
sudo firewall-cmd --reload
现在,运行以下 firewall-cmd 命令以验证 firewalld 上已启用的规则列表。
sudo firewall-cmd --list-all
在 protocols 部分,你应该会看到 HTTP 和 HTTPS 协议均已启用。
配置 MariaDB 数据库
在接下来的部分中,你将通过 mariadb-secure-installation 工具来保护你的 MariaDB 服务器安装,然后为 Apache Guacamole 创建一个新的 MariaDB 数据库和用户。
首先,你将通过 mariadb-secure-installation 工具来保护 MariaDB 服务器。运行它以保护你的 MariaDB 服务器安装。
sudo mariadb-secure-installation
在此过程中,输入 y 以应用配置,或输入 n 表示不应用。以下是你将要设置的一些 MariaDB 配置:
- 将 MariaDB root 认证切换为 unix_socket?输入 n。
- 设置 MariaDB root 密码?输入 y,然后输入新密码并重复。
- 禁止 root 用户远程登录?输入 y。
- 移除默认数据库 test?再次输入 y。
- 移除默认匿名用户?输入 y 确认。
- 重新加载表权限以应用更改?输入 y。
接下来,使用以下 mariadb 客户端命令以 root 用户身份登录 MariaDB 服务器。系统提示输入密码时,输入 MariaDB 的 root 密码或按 ENTER。
sudo mariadb -u root -p
登录后,运行以下查询为 Apache Guacamole 创建一个新数据库和用户。在本演示中,你将创建一个新数据库 guacamoledb、用户 guacamole,密码为 GuacamolePassword。
CREATE DATABASE guacamoledb;
CREATE USER 'guacamole'@'localhost' IDENTIFIED BY 'GuacamolePassword';
GRANT SELECT,INSERT,UPDATE,DELETE ON guacamoledb.* TO 'guacamole'@'localhost';
FLUSH PRIVILEGES;

接下来,运行以下查询以验证用户 guacamole 的权限。
SHOW GRANTS FOR 'guacamole'@'localhost';
quit
确保用户 guacamole 对数据库 guacamoledb 具有 SELECT、INSERT、UPDATE 和 DELETE 权限。

安装 Apache Guacamole 服务器
Apache Guacamole 由两个组件组成:
- guacd:一个可连接 RDP、SSH、VNC 等多种远程桌面协议的守护进程。
- Guacamole Web Application:Apache Guacamole 的前端,是一个可在 Apache Tomcat 中运行的 Java servlet 容器。
完成以下步骤以安装 guacd 和 Guacamole Java servlet 应用。
编译并安装 guacd
将工作目录切换到 /usr/src,并使用 wget 下载 Apache Guacamole 服务器源代码。
cd /usr/src
wget https://dlcdn.apache.org/guacamole/1.5.2/source/guacamole-server-1.5.2.tar.gz
下载完成后,解压文件 guacamole-server-1.5.2.tar.gz,你将得到新目录 guacamole-server-1.5.2。使用 cd 进入该目录。
tar -xf guacamole-server-1.5.2.tar.gz
cd guacamole-server-*/
现在,运行以下命令来配置安装。在本演示中,你将使用一个额外的参数 --with-systemd-dir=,它将自动创建一个新的服务文件 guacd。
./configure --with-systemd-dir=/etc/systemd/system/

配置过程完成后,确保库状态、协议支持以及服务/工具的各项状态均为 yes。

接下来,运行以下命令编译并安装 Apache Guacamole 服务器 guacd。
sudo make && sudo make install

安装完成后,运行以下命令重新加载系统库的数据库缓存。
sudo ldconfig
然后,创建一个新的配置目录 /etc/guacamole,并使用 nano 编辑器创建 guacd 配置文件 /etc/guacamole/guacd.conf。
sudo mkdir -p /etc/guacamole/
sudo nano /etc/guacamole/guacd.conf
插入以下配置,使 guacd 服务在 localhost 上以端口 4822 运行。
[server] bind_host = 127.0.0.1 bind_port = 4822
完成后保存并退出文件。
接下来,运行以下 systemctl 命令以重新加载 systemd 管理器。
sudo systemctl daemon-reload
然后使用以下命令启动并启用 Apache Guacamole 的 guacd 服务。
sudo systemctl start guacd
sudo systemctl enable guacd

最后,运行以下命令检查 guacd 服务,确保该服务正在运行。
sudo systemctl status guacd
安装成功后,你应该会看到 guacd 服务的输出状态为 active (running)。

此外,你也可以通过确认系统中端口 4822 来验证 guacd 服务。
ss -tulpn | grep 4822
输出应显示 guacd 服务在 localhost 上以端口 4822 运行。

安装 Apache Guacamole Web 应用
在 guacd 安装完成后,现在你将安装 Apache Guacamole Web 应用,它是一个 Java servlet 应用。
Apache Guacamole Web 应用可以通过从源代码编译或经由 .war 软件包安装来手动安装。在本演示中,你将通过 .war 文件安装 Apache Guacamole Web 应用。
切换到 /usr/src 目录,并通过 wget 命令下载 Apache Guacamole Web 应用。
cd /usr/src
wget https://dlcdn.apache.org/guacamole/1.5.2/binary/guacamole-1.5.2.war
下载完成后,运行以下命令将下载的文件 guacamole-1.5.2.war 复制到 Apache Tomcat 的 webapps 目录 /var/lib/tomcat/webapps。这样,你就可以通过路径 URL /guacamole 访问 Apache Guacamole Web 应用。
sudo cp guacamole-1.5.2.war /var/lib/tomcat/webapps/guacamole.war
现在使用以下命令重启 tomcat 服务以应用更改。
sudo systemctl restart tomcat
使用 MariaDB 认证配置 Apache Guacamole
首先,运行以下命令在 /etc/guacamole/ 目录下创建新的子目录 extensions 和 lib。然后,在 Apache Tomcat 配置文件 /etc/sysconfig/tomcat 中创建一个新的环境变量 GUACAMOLE_HOME。
sudo mkdir -p /etc/guacamole/{extensions,lib}
echo "GUACAMOLE_HOME=/etc/guacamole" | sudo tee -a /etc/sysconfig/tomcat
现在切换到 /usr/src 目录,并通过以下 wget 命令下载 Guacamole 数据库扩展。
cd /usr/src
wget https://downloads.apache.org/guacamole/1.5.2/binary/guacamole-auth-jdbc-1.5.2.tar.gz
下载完成后,通过 tar 命令解压文件 guacamole-auth-jdbc-1.5.2.tar.gz。然后,将 Guacamole 数据库扩展移动到 /etc/guacamole/extensions/ 目录。
tar -xf guacamole-auth-jdbc-1.5.2.tar.gz
sudo mv guacamole-auth-jdbc-1.5.2/mysql/guacamole-auth-jdbc-mysql-1.5.2.jar /etc/guacamole/extensions/
接下来,切换到 guacamole-auth-jdbc-1.5.2/mysql/schema 目录,并将 Apache Guacamole 数据库架构导入到数据库 guacamoledb。
cd guacamole-auth-jdbc-1.5.2/mysql/schema
cat *.sql | mariadb -u root -p guacamoledb
出现提示时输入你的 MariaDB root 用户密码,然后按 ENTER。
现在,再次切换到 /usr/src 目录,并通过 wget 下载用于 Java 应用的 MySQL connector。
cd /usr/src
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.0.33.tar.gz
下载完成后,解压文件 mysql-connector-j-8.0.33.tar.gz,并将 MySQL Java connector 移动到 /etc/guacamole/lib/ 目录。
tar -xf mysql-connector-j-8.0.33.tar.gz
sudo mv mysql-connector-j-8.0.33/mysql-connector-j-8.0.33.jar /etc/guacamole/lib/
现在使用 nano 编辑器创建一个新的 Apache Guacamole 配置文件 /etc/guacamole/guacamole.properties。
sudo nano /etc/guacamole/guacamole.properties
插入你的 Apache Guacamole 安装所使用的 MariaDB 数据库用户和密码信息。
# MySQL properties mysql-hostname: localhost mysql-database: guacamoledb mysql-username: guacamole mysql-password: GuacamolePassword
完成后保存并关闭文件。
最后,运行以下 systemctl 命令重启 tomcat 服务,并将更改应用到 Apache Guacamole Web 应用。
sudo systemctl restart tomcat
你已成功使 Apache Guacamole 在 MariaDB 认证下启动并运行。guacd 服务正在 localhost 上以端口 4822 运行,而 Apache Guacamole Web 应用正在 Apache Tomcat 中运行,并可经由 URL 路径 /guacamole 访问。
将 Nginx 配置为反向代理
在接下来的部分中,你将把 Nginx 配置为 Apache Guacamole 的反向代理。你还将通过采用 Letsencrypt 的 HTTPS 来保护你的安装。
使用以下 nano 编辑器命令打开 Apache Tomcat 配置文件 /etc/tomcat/server.xml。
sudo nano /etc/tomcat/server.xml
在 ` 保存文件并退出编辑器。 现在运行以下命令重启 tomcat 服务以应用更改。 接下来,使用 nano 编辑器创建一个新的 Nginx 服务器块配置文件 /etc/nginx/conf.d/guacamole.conf。 插入以下服务器块配置,并务必修改域名。 保存文件并退出编辑器。 现在运行以下命令,以确保你的 Nginx 配置正确,并重启 Nginx 以应用更改。 如果你的 Nginx 配置正确,你应该会得到输出 syntax is ok - test is successful。 最后,运行以下 certbot 命令,通过 Letsencrypt 保护你的 Apache Guacamole 安装。请务必修改此命令中的域名和电子邮件地址。 该过程完成后,你可以通过 HTTPS 连接访问 Apache Guacamole。此外,从 HTTP 到 HTTPS 的自动重定向默认由 Letsencrypt 启用。 启动你的 Web 浏览器并访问你的 Apache Guacamole 安装所在的域名(例如:https://guacamole.howtoforge.local)。使用默认用户 guacadmin 和密码 guacadmin 登录。 一切顺利的话,你应该会看到 Apache Guacamole 用户仪表盘。 现在点击 Admin 菜单,然后点击 Settings。你将在 Apache Guacamole 上创建一个新的连接。 选择 Connections 选项卡,然后点击 Create a new connection 按钮。 在 EDIT CONNECTION 部分,输入连接名称并选择你想要连接的协议。在本演示中,你将创建一个名为 testssh 的新连接,协议为 SSH。 在 PARAMTERS 部分,输入目标主机的 IP 地址和端口,然后输入目标主机的用户名和密码。 向下滚动并点击 Save 以确认。 接下来,返回用户主页仪表盘,你应该会看到已创建连接 testssh。点击连接 testssh 以连接到目标主机。 如果成功,你应该会像下面这样连接到目标主机: 干得漂亮!你已成功在 AlmaLinux 9 机器上将 Apache Guacamole 安装为远程桌面网关。你安装的 Apache Guacamole 使用了 MariaDB 数据库认证和 Nginx 反向代理。此外,你还通过来自 letsencrypt 的 SSL 保护了该部署。现在你可以轻松地通过 Apache Guacamole Web 应用开始访问你的服务器或桌面。<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.RemoteIpValve"
internalProxies="127.0.0.1"
remoteIpHeader="x-forwarded-for"
remoteIpProxiesHeader="x-forwarded-by"
protocolHeader="x-forwarded-proto" />
sudo systemctl restart tomcatsudo nano /etc/nginx/conf.d/guacamole.confserver {
listen 80;
server_name guacamole.howtoforge.local;
access_log /var/log/nginx/guacamole-access.log;
error_log /var/log/nginx/guacamole-error.log;
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;
access_log off;
}
}
sudo nginx -t
sudo systemctl restart nginx
sudo certbot --nginx --agree-tos --no-eff-email --redirect --hsts --staple-ocsp --email
[email protected]
-d guacamole.howtoforge.local访问 Apache Guacamole








结论