如何在 AlmaLinux 9 上通过 Apache Guacamole 创建远程桌面网关
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作为远程桌面网关。您将使用 MariaDB 数据库服务器安装 Apache Guacamole,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 Tomcat,用于运行基于 Java 的 Apache Guacamole Web 应用程序。
- MariaDB 数据库服务器将用作 Apache Guacamole 的用户身份验证。
- Nginx Web 服务器作为 Apache Guacamole Web 应用程序的反向服务器。
- Certbot 用于保护对 Apache Guacamole 的访问。
安装编译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
现在,运行以下命令将Java 11和Apache Tomcat 9安装到您的AlmaLinux服务器。 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 服务器正在运行,则输出应为活动(正在运行)。
安装 MariaDB 服务器
Apache Guacamole 支持多种身份验证方法,包括数据库身份验证、LDAP 身份验证、Radius、SAML 和 OpenID。在此演示中,您将通过 Apache Guacamole 的 MariaDB 服务器使用数据库身份验证。
输入下面的 dnf 命令来安装 MariaDB 服务器。出现提示时,输入 y 进行确认,然后按 ENTER。
sudo dnf install mariadb-server
接下来,运行以下命令来启动并启用 mariadb 服务。
sudo systemctl start mariadb
sudo systemctl enable mariadb
然后验证mariadb服务以确保该服务正在运行。
sudo systemctl status mariadb
当 mariadb 状态为运行时,输出应为活动(正在运行)。
安装 Nginx 和 Certbot
现在,您将安装 Nginx,它将用作 Apache Guacamole 客户端应用程序的反向代理,以及用于生成 SSL 证书和保护 Apache Guacamole 的 Certbot。
运行下面的 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
在协议部分中,您应该看到 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。
- 删除默认数据库测试?再次输入 y。
- 删除默认匿名用户?输入 y 确认。
- 重新加载表权限以应用更改?输入 y。
接下来,以 root 用户身份使用下面的 mariadb 客户端命令登录 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 应用程序:Java servlet 容器,它是可在 Apache Tomcat 中运行的 Apache Guacamole 的前端。
完成以下步骤来安装 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
插入以下配置以在 localhost 中使用端口 4822 运行 guacd 服务。
[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 服务的输出,其状态为活动(正在运行)。
此外,您还可以通过确保系统上的端口 4822 来验证 guacd 服务。
ss -tulpn | grep 4822
输出应显示在端口 4822 的本地主机上运行的 guacd 服务。
安装 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 配置创建一个新的环境变量 GUACAMOLE_HOME /etc/sysconfig/tomcat。
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 连接器。
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 连接器移动到 /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.hwdomain.io;
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 success。
最后,运行下面的 certbot 命令以通过 Letsencrypt 保护您的 Apache Guacamole 安装。请务必更改此命令中的域名和电子邮件地址。
sudo certbot --nginx --agree-tos --no-eff-email --redirect --hsts --staple-ocsp --email [email -d guacamole.hwdomain.io
该过程完成后,您可以通过 HTTPS 连接访问 Apache Guacamole。此外,默认情况下通过 Letscrypt 启用从 HTTP 到 HTTPS 的自动重定向。
访问 Apache 鳄梨酱
启动 Web 浏览器并访问 Apache Guacamole 安装的域名(即:https://guacamole.hwdomain.io)。通过默认用户guacadmin和密码guacadmin登录。
当一切顺利时,您应该会看到 Apache Guacamole 用户仪表板。
现在单击管理菜单,然后单击设置。您将在 Apache Guacamole 上创建一个新连接。
选择连接选项卡,然后单击创建新连接按钮。
在编辑连接部分中,输入连接名称并选择要连接的协议。在此演示中,您将使用 SSH 协议创建一个新连接 testssh。
在参数部分,输入目标主机的IP地址和端口,然后输入目标主机的用户名和密码。
向下滚动并点击保存进行确认。
接下来,返回用户主页仪表板,您应该看到连接 testssh 已创建。点击连接testssh连接目标主机。
如果成功,您应该连接到目标主机,如下所示:
结论
做得好!您已在AlmaLinux 9机器上成功安装Apache Guacamole作为远程桌面网关。您已经安装了带有数据库 MariaDB 身份验证和 Nginx 反向代理的 Apache Guacamole。此外,您还通过 LetsEncrypt 的 SSL 保护了部署。您现在可以开始通过 Apache Guacamole Web 应用程序轻松访问您的服务器或桌面。