本页内容
- 环境要求
- 下载 Warpgate 二进制文件
- 将 Warpgate 配置为 Bastion 服务器
- 将 Warpgate 作为 Systemd 服务运行
- 配置 UFW
- 登录 Warpgate
- 添加 SSH 目标服务器
- 添加 MySQL/MariaDB 目标服务器
- 总结
Bastion 服务器是指专门设计并配置用于抵御计算机网络攻击的计算机/机器/服务器。Bastion 服务器的功能类似于应用程序的代理或负载均衡器。它允许你访问位于 DMZ 网络中的计算机或服务器。
Warpgate 是一个可当作 Bastion 服务器使用的现代解决方案。它使用 Rust 编写,并提供一个基于 Web 的管理仪表盘。你可以将它安装在特定的节点上,然后轻松添加位于你私有基础设施上的目标节点或服务器。Warpgate 目前可用作 SSH、MySQL/MariaDB 和 HTTP 的 Bastion 服务器。
在本教程中,你将使用 Warpgate 在 Debian 11 服务器上搭建一个用于 SSH 和 MySQL/MariaDB 连接的 Bastion 服务器。你将在 Debian 服务器上安装并配置 Warpgate,然后将 SSH 目标服务器和 MySQL 服务器添加到 Warpgate。最后,你将通过连接目标主机的 SSH 服务器和 MySQL 服务器来确认 Warpgate Bastion 服务器工作正常。
环境要求
完成本教程需要准备以下条件:
- 一台运行 Debian 11 的 Linux 服务器 —— 本示例使用主机名为 'warpgate-debian'、IP 地址为 '192.168.5.10' 的服务器。
- 一个具有 sudo/root 管理员权限的非 root 用户。
下载 Warpgate 二进制文件
在本节中,你将手动从 GitHub 下载 Warpgate 二进制文件,然后将其移动到系统的 'bin' 目录。安装 Warpgate 的另一种方式是从源代码编译,或者使用 Warpgate 的 Docker 版本。
首先,运行以下 wget 命令下载 Warpgate 二进制文件。请访问官方 GitHub 下载页面获取 Warpgate 的最新版本。
wget -q https://github.com/warp-tech/warpgate/releases/download/v0.7.0/warpgate-v0.7.0-x86_64-linux
下载完成后,将 Warpgate 二进制文件移动到 '/usr/local/bin/warpgate'。然后,使用 'chmod +x' 命令使其可执行。
mv warpgate-v0.7.0-x86_64-linux /usr/local/bin/warpgate
sudo chmod +x /usr/local/bin/warpgate

接下来,运行以下命令来定位你系统上的 'warpgate' 二进制文件。
which warpgate
现在验证 Warpgate 的版本并列出 'warpgate' 命令的可用参数。
warpgate version
warpgate --help
你应该会看到类似这样的输出。

将 Warpgate 配置为 Bastion 服务器
下载好 Warpgate 二进制文件后,你现在将搭建并配置你的 Warpgate 安装。这可以通过 'warpgate' 命令以交互方式完成。
执行以下命令,将 Warpgate 配置为 bastion 服务器。
warpgate setup
命令执行后,系统会询问你以下配置:
- 你希望将 Warpgate 数据存储在何处?保留默认值,即 '/var/lib/warpgate' 目录。
- Warpgate Web 管理仪表盘的端点?保留默认值,使 Warpgate 运行在你的内网/公网 IP 地址的 8888 端口。
- 是否接受 SSH 连接?输入 yes 以将 Warpgate 启用为 SSH bastion 服务器。
- SSH bastion 服务器的端点?保留默认值,使 SSH bastion 服务器运行在内网/公网 IP 地址的 2222 端口。
- 是否接受 MySQL 连接?输入 yes 以将 Warpgate 启用为 MySQL bastion 服务器。
- MySQL bastion 服务器的端点?保留默认值,端口为 33306。
- 是否记录用户会话?输入 yes 以启用该功能。
- 为默认用户 admin 设置密码。输入你的 Warpgate 安装的密码。

设置过程完成后,你应该会收到类似这样的输出。你还会看到在此过程中创建的 Warpgate 配置文件 '/etc/warpgate.yaml' 以及数据目录 '/var/lib/warpgate'。

现在运行以下命令,显示文件 '/etc/warpgate.yaml' 的内容,以及 '/var/lib/warpgate' 下可用文件和目录的列表。
cat /etc/warpgate.yaml
ls /var/lib/warpgate
以下是将输出到你终端的内容。

现在执行以下命令来运行 Warpgate。你会看到 'Warpgate is now running' 的输出,并为 SSH、MySQL 和 HTTP 连接打开 TCP 端口。
warpgate --config /etc/warpgate.yaml run

打开你的 Web 浏览器,访问带有 8888 端口的 Warpgate IP 地址(例如:https://192.168.5.10:8888/)。成功后,你应该会看到 Warpgate 的登录页面。

回到终端,按 Ctrl+c 终止 Warpgate 进程。
将 Warpgate 作为 Systemd 服务运行
在本节中,你将搭建并配置 Warpgate 以配合 Systemd 运行。这样你可以在后台运行 Warpgate,并且更易于通过 systemctl 命令工具进行管理。
使用以下 nano 编辑器命令创建一个新的 systemd 单元文件 '/etc/systemd/system/warpgate.service'。
sudo nano /etc/systemd/system/warpgate.service
将以下 systemd 单元配置添加到该文件中。
[Unit] Description=Warpgate After=network.target StartLimitIntervalSec=0 [Service] Type=notify Restart=always RestartSec=5 ExecStart=/usr/local/bin/warpgate --config /etc/warpgate.yaml run [Install] WantedBy=multi-user.target
完成后保存文件并退出编辑器。
运行以下命令以重新加载 systemd 管理器并应用更改。
sudo systemctl daemon-reload
然后使用以下 systemctl 命令工具启动并启用 Warpgate 服务。
sudo systemctl start warpgate
sudo systemctl enable warpgate

之后,验证 Warpgate 服务状态,确保服务正在运行。
sudo systemctl status warpgate
以下输出确认 Warpgate 服务正在运行。

如果你检查服务器上开放的端口列表,你会看到多个端口 2222、8888 和 33306 处于 LISTEN 状态。运行以下 ss 命令。
ss -tulpn
输出:

配置 UFW
在本节中,你将在 Debian 服务器上安装、运行并启用 UFW。你还会开放 Warpgate 使用的端口。
通过运行以下 apt 命令安装 UFW。
sudo apt install ufw
出现提示时,输入 y 确认并按 ENTER。

UFW 安装完成后,运行以下命令以开放 OpenSSH 服务以及 Warpgate 的端口 2222、8888 和 33306。
sudo ufw allow OpenSSH
sudo ufw allow 8888/tcp
sudo ufw allow 2222/tcp
sudo ufw allow 33306/tcp
然后使用以下命令启动并启用 UFW。出现提示时输入 y 并按 ENTER 继续。
sudo ufw enable
执行以下命令后,UFW 应该处于运行并启用状态,这意味着 UFW 会在系统启动时自动运行。

现在输入以下命令验证 UFW 状态。你应该会看到 UFW 显示 'Status: Active',并添加了 OpenSSH 服务、端口 2222、8888 和 33306。
sudo ufw status
输出:

登录 Warpgate
Warpgate 作为 systemd 服务运行且 UFW 也处于运行状态后,你现在可以访问 Warpgate 的安装。
打开你的 Web 浏览器,访问服务器 IP 地址加上 8888 端口(例如:https://192.168.5.20:8888/),你将看到 Warpgate 登录页面。
输入默认用户 'admin' 以及你配置的密码。然后点击 Login 继续。

以 'admin' 身份登录后,点击 'Manage Warpgate' 菜单。

你现在应该会看到 Warpgate 用户仪表盘。

至此,你已完成在 Debian 服务器上将 Warpgate 安装为 SSH 和 MySQL Bastion 服务器。你现在可以将你的服务器和 MySQL 服务器添加到 Warpgate 了。
添加 SSH 目标服务器
在本节中,你将把 IP 地址为 192.168.5.25、主机名为 'node1' 的 Linux 服务器添加到 Warpgate Bastion 服务器。为此,你必须将 Warpgate 的 SSH 公钥添加到你的目标服务器。
在 Warpgate 仪表盘上,点击 SSH 菜单,你将看到用于登录目标服务器的 Warpgate SSH 公钥和私钥。
将 SSH 公钥复制到你的记事本中。

现在登录目标服务器,使用以下 nano 编辑器命令创建一个新的目录 '~/.ssh',然后创建文件 'authorized_keys'。
mkdir -p ~/.ssh/
nano ~/.ssh/authorized_keys
将 Warpgate 的 SSH 公钥添加到其中。

接下来,回到 Warpgate 仪表盘,点击 Config 菜单,然后点击 'Add a target'。

输入目标服务器的主机名,将类型选择为 SSH,然后点击 Create target。

修改目标服务器的 IP 地址以及用于登录该服务器的用户。在认证方式上,选择 'Warpgate's private keys'。然后,你必须在 'Allow access for roles' 部分启用 'warpgate:admin' 角色。
完成后,点击 'Update configurations'。

至此,目标服务器 'node1' 已添加到 Warpgate。你现在可以通过 Warpgate bastion 服务器连接到 'node1'。
运行以下 ssh 命令,通过 Warpgate bastion 服务器连接到 'node1'。在此命令中,使用的格式为 'role: server-name',其中 bastion 服务器 IP 地址为 192.168.5.10,端口为 2222。
ssh 'admin:
[email protected]
' -p 2222
输入 yes 确认并添加目标的 SSH 指纹。当提示输入密码时,输入 bastion 'admin' 用户的密码。
连接成功时,你应该会看到类似 'Warpgate connected' 的输出。并且你将登录到目标服务器 'node1'。
输入以下命令,验证你当前登录的服务器。你将看到你是通过 Warpgate SSH bastion 服务器登录到 'node1' 服务器的。
id
hostname
输出:

如果你查看 Warpgate Web 管理仪表盘,应该会看到你的 SSH 目标服务器的指纹。

添加 MySQL/MariaDB 目标服务器
在本节中,你将把一个 MariaDB 服务器添加到 Warpgate bastion 服务器。在此之前,你将把 MariaDB 服务器配置为运行在私有/内网 IP 地址上,并创建一个用于远程连接的新 MariaDB 用户。
登录 MariaDB 服务器,使用以下 nano 编辑器命令打开配置文件 '/etc/mysql/mariadb.conf.d/50-server.cnf'。
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
取消注释 'bind-address' 参数,并将其值改为你的内网 IP 地址。在本示例中,MariaDB 服务器将运行在私有 IP 地址 '192.168.5.25'。
bind-address = 192.168.5.25
保存文件,然后编辑该编辑器。
输入以下命令以重启 MariaDB 服务并应用更改。重启后,MariaDB 应该运行在 IP 地址 '192.168.5.25' 上,而不是默认的 localhost。
sudo systemctl restart mariadb
接下来,以 root 用户身份登录 MariaDB shell,以创建并设置新用户。
sudo mariadb -u root -p
输入以下查询语句,创建一个新 MariaDB 用户 'appuser',并允许该用户访问 MariaDB 服务器上的所有数据库。同时,请务必修改以下查询中的密码。
CREATE USER 'appuser'@'%' IDENTIFIED BY 'p4@@w0rd';
GRANT ALL PRIVILEGES ON *.* TO 'appuser'@'%' IDENTIFIED BY 'p4@@w0rd';
FLUSH PRIVILEGES;
EXIT;
接下来,你将在用于连接 MariaDB 服务器的机器上安装 MariaDB 客户端软件包。

通过以下命令安装 'mariadb-client' 软件包。出现提示时输入 y 并按 ENTER 继续。
sudo apt install mariadb-client

现在回到 Warpgate 服务器,将工作目录切换到 '/var/lib/warpgate',然后将 Warpgate 的 TLS 证书复制到你的 MariaDB 客户端机器上。
cd /var/lib/warpgate/
sudo scp tls.certificate.pem tls.key.pem
[email protected]
:/etc/mysql/

现在回到客户端机器,使用以下 nano 编辑器命令打开 MariaDB 客户端配置 '/etc/mysql/mariadb.conf.d/50-client.cnf'。
sudo nano /etc/mysql/mariadb.conf.d/50-client.cnf
将以下配置添加到 '[client]' 部分,以启用安全的客户端连接。
[client] .... ssl-cert=/etc/mysql/tls.certificate.pem ssl-key=/etc/mysql/tls.key.pem
保存文件,完成后编辑该编辑器。
现在在 Warpgate 仪表盘上,点击 'Config' 菜单,然后点击 'Add a target'。

输入 MariaDB 服务器名称,将类型选择为 'MySQL',然后点击 Create target。

将主机、用户和密码信息修改为你的 MariaDB 用户详情。如果你使用的是默认 TLS 证书,请务必关闭 'Verify certificate' 选项,然后在 'Allow access for roles' 部分启用 'warpgate:admin' 角色。
完成后点击 'Update configuration'。

MariaDB 服务器添加到 Warpgate 后,你现在可以通过 Warpgate MySQL Bastion 服务器访问 MariaDB 服务器。
在 MariaDB 客户端机器上,输入以下命令连接到 MariaDB 服务器。出现提示时,输入 Warpgate admin 用户的密码。
mysql -u 'admin#mysql1' --host '192.168.5.10' --port 33306 --ssl -p
连接成功后,你应该会看到类似 'MySQL [(dbname)]>' 的 MariaDB shell 提示符。输入以下查询语句,确认你正在使用的用户在 MariaDB 服务器上可用。
SELECT host, user, plugin, authentication_string from mysql.user;
SHOW GRANTS FOR appuser@'%';
输出:

至此,你已通过 Warpgate MySQL/MariaDB Bastion 服务器连接到 MariaDB 服务器。
总结
在本教程中,你已在 Debian 11 上安装并配置了 Warpgate Bastion 服务器。你已将 Warpgate 配置为配合 systemd 和 UFW 防火墙运行。此外,你还将 Warpgate 配置为 SSH 和 MySQL/MariaDB Bastion 服务器,添加了 SSH 目标服务器,也添加了 MySQL/MariaDB 目标服务器。
考虑到这一点,你现在可以在 Warpgate Bastion 服务器上设置新用户、新角色并添加新的连接。你还可以通过单一集中的 Bastion 服务器来集中管理用户的连接和访问。要了解 Warpgate 的详细信息,请访问 Warpgate 官方文档。