本页内容

  • 先决条件
  • 配置软件仓库
  • 安装依赖项(编译 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 9 上通过 Apache Guacamole 搭建远程桌面网关

现在运行以下命令以启用 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 继续。

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

安装依赖项

仓库已添加到系统后,你现在可以开始安装 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

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

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

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

安装 Java 和 Apache Tomcat

现在,运行以下命令在你的 AlmaLinux 服务器上安装 Java 11 和 Apache Tomcat 9。这两个软件包版本均受 Apache Guacamole 支持,因此你可以从 AlmaLinux 的 appstream 仓库安装这两个软件包。

sudo dnf install java-11-openjdk-devel tomcat

出现提示时输入 y,然后按 ENTER。

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

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

java --version

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

现在运行以下 systemctl 命令以启动并启用 tomcat 服务。

sudo systemctl start tomcat
sudo systemctl enable tomcat

然后验证 tomcat 服务,确保该服务正在运行。

sudo systemctl status tomcat

如果 tomcat 服务器正在运行,输出应显示为 active (running)。

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

安装 MariaDB 服务器

Apache Guacamole 支持多种认证方式,包括数据库认证、LDAP 认证、Radius、SAML 以及 OpenID。在本演示中,你将通过 MariaDB 服务器使用数据库认证来为 Apache Guacamole 提供认证。

输入以下 dnf 命令以安装 MariaDB 服务器。出现提示时,输入 y 确认并按 ENTER。

sudo dnf install mariadb-server

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

接下来,运行以下命令以启动并启用 mariadb 服务。

sudo systemctl start mariadb
sudo systemctl enable mariadb

然后验证 mariadb 服务,确保该服务正在运行。

sudo systemctl status mariadb

当 mariadb 状态为 running 时,输出应显示为 active (running)。

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

安装 Nginx 和 Certbot

现在你将安装 Nginx,它将用作 Apache Guacamole 客户端应用的反向代理,并安装 Certbot 用于生成 SSL 证书并保护 Apache Guacamole。

运行以下 dnf 命令将 Nginx 和 Certbot 安装到你的系统。

sudo dnf install nginx certbot python3-certbot-nginx

输入 y 确认安装,然后按 ENTER。

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

安装完成后,运行以下 systemctl 命令以启动并启用 Nginx 服务。

sudo systemctl start nginx
sudo systemctl enable nginx

然后验证 Nginx 服务,确保该服务正在运行。

sudo systemctl status nginx

输出 active (running) 表示 Nginx 正在运行。

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

配置 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;

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

接下来,运行以下查询以验证用户 guacamole 的权限。

SHOW GRANTS FOR 'guacamole'@'localhost';
quit

确保用户 guacamole 对数据库 guacamoledb 具有 SELECT、INSERT、UPDATE 和 DELETE 权限。

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

安装 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/

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

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

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

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

sudo make && sudo make install

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

安装完成后,运行以下命令重新加载系统库的数据库缓存。

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

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

最后,运行以下命令检查 guacd 服务,确保该服务正在运行。

sudo systemctl status guacd

安装成功后,你应该会看到 guacd 服务的输出状态为 active (running)。

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

此外,你也可以通过确认系统中端口 4822 来验证 guacd 服务。

ss -tulpn | grep 4822

输出应显示 guacd 服务在 localhost 上以端口 4822 运行。

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

安装 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

在 `

<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" />

保存文件并退出编辑器。

现在运行以下命令重启 tomcat 服务以应用更改。

sudo systemctl restart tomcat

接下来,使用 nano 编辑器创建一个新的 Nginx 服务器块配置文件 /etc/nginx/conf.d/guacamole.conf。

sudo nano /etc/nginx/conf.d/guacamole.conf

插入以下服务器块配置,并务必修改域名。

server {
    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;
    }
}

保存文件并退出编辑器。

现在运行以下命令,以确保你的 Nginx 配置正确,并重启 Nginx 以应用更改。

sudo nginx -t
sudo systemctl restart nginx

如果你的 Nginx 配置正确,你应该会得到输出 syntax is ok - test is successful。

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

最后,运行以下 certbot 命令,通过 Letsencrypt 保护你的 Apache Guacamole 安装。请务必修改此命令中的域名和电子邮件地址。

sudo certbot --nginx --agree-tos --no-eff-email  --redirect --hsts --staple-ocsp --email 
[email protected]
 -d guacamole.howtoforge.local

该过程完成后,你可以通过 HTTPS 连接访问 Apache Guacamole。此外,从 HTTP 到 HTTPS 的自动重定向默认由 Letsencrypt 启用。

访问 Apache Guacamole

启动你的 Web 浏览器并访问你的 Apache Guacamole 安装所在的域名(例如:https://guacamole.howtoforge.local)。使用默认用户 guacadmin 和密码 guacadmin 登录。

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

一切顺利的话,你应该会看到 Apache Guacamole 用户仪表盘。

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

现在点击 Admin 菜单,然后点击 Settings。你将在 Apache Guacamole 上创建一个新的连接。

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

选择 Connections 选项卡,然后点击 Create a new connection 按钮。

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

在 EDIT CONNECTION 部分,输入连接名称并选择你想要连接的协议。在本演示中,你将创建一个名为 testssh 的新连接,协议为 SSH。

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

在 PARAMTERS 部分,输入目标主机的 IP 地址和端口,然后输入目标主机的用户名和密码。

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

向下滚动并点击 Save 以确认。

接下来,返回用户主页仪表盘,你应该会看到已创建连接 testssh。点击连接 testssh 以连接到目标主机。

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

如果成功,你应该会像下面这样连接到目标主机:

在 AlmaLinux 9 上通过 Apache Guacamole 搭建远程桌面网关

结论

干得漂亮!你已成功在 AlmaLinux 9 机器上将 Apache Guacamole 安装为远程桌面网关。你安装的 Apache Guacamole 使用了 MariaDB 数据库认证和 Nginx 反向代理。此外,你还通过来自 letsencrypt 的 SSL 保护了该部署。现在你可以轻松地通过 Apache Guacamole Web 应用开始访问你的服务器或桌面。