本页内容
- 先决条件
- 安装 MySQL 服务器
- 安装 Redis 服务器
- 设置 MySQL 数据库和用户
- 下载 Fleet Osquery Manager
- 配置 Fleet Osquery Manager
- 配置 Firewalld
- 配置 Fleet Osquery Manager
- 通过 Orbit Osquery Runtime 添加主机
- 设置 Fleetctl 以管理 Fleet
- 结论
Fleet 是一个开源的 osquery 管理器,可用于维护安全的工作站和服务器,并对你所有设备保持准确的资产清单。Fleet 支持可编程的实时查询、流式日志,以及对服务器、容器以及笔记本电脑和本地计算机等设备提供实时可见性。
借助 fleet,你可以识别设备上的漏洞。这意味着 fleet 会自动识别过时、存在漏洞或被入侵的软件、应用和软件包。此外,fleet 还能识别设备的错误配置以及 MDM 注册问题。Fleet 对 IT 行业、安全或任何合规监控设备都很有用。
Fleet 还能在单一应用中启用并自动化安全工作流。你可以使用 osquery/agent 从多台服务器和设备收集事件,然后将收集到的数据存储在统一的位置,既可以通过 Fleet 仪表板访问,也可以通过终端使用 fleetctl 访问。
在本教程中,你将把 Fleet Osquery Manager 部署到 Ubuntu 22.04 服务器。本指南包括安装 MySQL 服务器、Redis 服务器,以及安全地部署 MySQL 数据库服务器。最终,你将拥有一个安全的 Fleet Osquery Manager,可用于监控主机、识别主机上的漏洞、验证与其他系统所做的更改,并为你的主机监控设置自定义查询。
先决条件
要完成本教程,你必须满足以下要求:
- 一台运行 Rocky Linux 9 的 Linux 服务器。
- 一个具有 sudo/root 管理员权限的非 root 用户。
- SELinux 运行在 permissive(宽松)模式。
- 一个指向服务器 IP 地址的域名。
- 已生成并验证的 SSL/TLS 证书。
当所有要求就绪后,你就可以开始安装 Fleet Osquery Manager 了。
安装 MySQL 服务器
在本节中,你将安装 MySQL 服务器,启动并启用 MySQL 服务,设置 MySQL root 密码,并通过 'mysql_secure_installation' 配置 MySQL 服务的安全部署。
在本教程中,MySQL 服务器将用于存储 Fleet 管理器的数据和信息。你将通过 Rocky Linux 官方仓库安装 MySQL 服务器。运行以下 dnf 命令进行安装。
sudo dnf install mysql-server
在提示确认时输入 y,然后按 ENTER 继续。

现在你已经安装了 MySQL 服务器,它将用作 fleet 的数据库后端。在配置 MySQL 服务器之前,先通过以下 systemctl 命令工具启动并启用 MySQL 服务。
sudo systemctl start mysqld
sudo systemctl enable mysqld
之后,验证 MySQL 服务器以确保服务正在运行。
sudo systemctl status mysqld
你应该收到类似以下的输出——输出 'active (running)' 表示 MySQL 服务器正在运行。而输出 '...; enabled;...' 表示 MySQL 服务器将在系统启动时自动启动。

MySQL 服务器运行后,你可以设置 MySQL 服务器的 root 密码。使用下面的 'mysql' 命令登录 MySQL shell。
sudo mysql
运行以下查询为 MySQL root 用户设置密码,然后退出 MySQL shell。请务必修改以下查询中的密码。
ALTER USER "root"@"localhost" IDENTIFIED WITH mysql_native_password BY "toor?p4ssw0rd";
exit

接下来,运行以下 'mysql_secure_installation' 命令来加固你的 MySQL 服务器部署。
sudo mysql_secure_installation
在提示时,输入你的 MySQL root 密码。然后,你还会被问及以下 MySQL 配置项:
- 在 MySQL 上设置 VALIDATE PASSWORD 组件?输入 Y 确认。
- 输入你想要使用的密码策略编号。为你的 MySQL 服务器选择你偏好的策略。
- 更改 MySQL root 密码?输入 n 表示否。
- 删除默认的 MySQL 匿名用户?输入 Y。
- 禁止 MySQL root 用户远程登录?输入 Y。
- 删除 MySQL 服务器中默认的 test 数据库?输入 Y。
- 重新加载权限表以应用更改?输入 Y 确认。
你现在已安装 MySQL 服务器,配置了 MySQL root 密码,并加固了 MySQL 部署。接下来,你将安装 Redis,它将用于分布式查询的队列处理以及 fleet osquery 管理器的数据缓存。
安装 Redis 服务器
在本节中,你将把 Redis 服务器安装到 Rocky Linux 9,启动并启用 Redis,然后验证 Redis 服务器的状态以确保其正在运行。Redis 将用于接收和排队分布式查询的结果、缓存数据等。
输入以下命令将 Redis 安装到你的 Rocky Linux 服务器。
sudo dnf install redis
输入 y 确认安装,并按 ENTER 继续。

Redis 安装完成后,运行以下 systemctl 命令以启动并启用 Redis 服务器。
sudo systemctl start redis
sudo systemctl enable redis
然后,输入以下命令验证 Redis 服务。这将确保 Redis 服务正在运行并已启用。
sudo systemctl status redis
你将得到类似以下的输出——输出 'active (running)' 表示 Redis 服务器正在运行。输出 '...; enabled;...' 表示 Redis 服务器已启用,并将在系统启动时自动运行。

设置 MySQL 数据库和用户
在本节中,你将创建一个供 fleet osquery 管理器使用的新 MySQL 数据库和用户。你将通过 MySQL shell 创建新数据库和用户,然后验证新 MySQL 用户的用户列表和权限。
通过下面的 mysql 命令登录 MySQL shell。在提示时务必输入你的 MySQL root 密码。
sudo mysql -u root -p
要创建新的 MySQL 数据库和用户,请执行以下 MySQL 查询。在本示例中,你将创建数据库 fleetdb 和用户 fleetadmin。同时,请务必修改以下查询中的密码。
CREATE DATABASE fleetdb;
CREATE USER fleetadmin@localhost IDENTIFIED BY 'S3curep4ssw0rd--=';
GRANT ALL PRIVILEGES ON fleetdb.* TO fleetadmin@localhost WITH GRANT OPTION;
FLUSH PRIVILEGES;
输出:

使用以下查询验证 MySQL 用户列表。你应该看到新的 MySQL 用户 fleetadmin 已添加,并且 MySQL 服务器可用。
SELECT USER,host FROM mysql.user;
输出:
现在验证 MySQL 用户 fleetadmin 的权限。你应该看到 fleetadmin 用户拥有访问 fleetdb 数据库的权限。

SHOW GRANTS FOR fleetadmin@localhost;
输出:

输入 'quit' 退出 MySQL shell。
MySQL 数据库和 Redis 服务器已安装,新数据库和用户也已创建,现在你可以开始安装 fleet osquery 管理器了。
下载 Fleet Osquery Manager
fleet osquery 管理器以单个二进制文件的形式提供,具有以下功能:
- Fleet TLS Web 服务器(无需外部 Web 服务器,但如需要可支持代理)
- Fleet Web 界面
- Fleet 应用管理 REST API
- Fleet osquery API 端点
至于 fleetctl,它是 fleet 的命令行界面,允许你通过命令行管理 fleet 的部署、配置、集成和报告。
在此步骤中,你将通过官方 GitHub 页面下载 fleet 和 fleetctl 二进制包。在撰写本文时,fleet 和 fleetctl 的最新版本为 v4.26。
首先,通过输入以下命令添加新系统用户 'fleet'。
sudo useradd -r -d /opt/fleet -s /usr/sbin/nologin fleet
通过以下 curl 命令下载 fleet 和 fleetctl 包。在撰写本文时,fleet 的最新版本为 v4.26。
curl -LO https://github.com/fleetdm/fleet/releases/download/fleet-v4.26.0/fleet_v4.26.0_linux.tar.gz
curl -LO https://github.com/fleetdm/fleet/releases/download/fleet-v4.26.0/fleetctl_v4.26.0_linux.tar.gz

下载完成后,通过以下 tar 命令解压 fleet 和 fleetctl 包。
tar xf fleet_v4.26.0_linux.tar.gz
tar xf fleetctl_v4.26.0_linux.tar.gz
接下来,将 fleet 和 fleetctl 的二进制文件复制到 '/usr/bin' 目录。这样,你就可以在终端中运行 fleet 和 fleetctl 命令了。
cp fleet_v4.26.0_linux/fleet /usr/bin/
cp fleetctl_v4.26.0_linux/fleetctl /usr/bin/

现在运行以下命令,确保 '/usr/bin' 目录已在 PATH 环境变量中可用。可用后,你就可以通过 sudo 运行 fleet 和 fleetctl 命令了。
echo $PATH
验证 fleet 和 fleetctl 命令的完整二进制路径。两个二进制文件都位于 '/usr/bin' 目录中。
which fleet
which fleetctl
使用以下命令验证 fleet 和 fleetctl 的版本。
fleet version
fleetctl --version
你应该收到类似以下的输出——fleet osquery 管理器和 fleetctl v4.26 已安装并添加到你的 Rocky Linux 系统中。

现在运行以下 fleet 命令,为你的 fleet 部署初始化数据库。请务必修改以下命令中 MySQL 数据库和用户的详细信息。
fleet prepare db \
--mysql_address=127.0.0.1:3306 --mysql_database=fleetdb --mysql_username=fleetadmin --mysql_password=S3curep4ssw0rd--=
以下是初始化期间的输出。

初始化完成后,你应该会看到类似 'Migrations completed' 的输出。

fleet 数据库已初始化并完成迁移,现在你可以设置 Fleet Osquery Manager 安装,并将 Fleet 作为 systemd 服务在后台运行。
配置 Fleet Osquery Manager
在此步骤中,你将为 fleet 创建一个新的配置目录,添加并修改位于 '/etc/fleet/fleet.yml' 的 fleet 配置文件,然后为 fleet osquery 管理器设置 systemd 服务文件 '/etc/systemd/system/fleet.service'。
在本步骤结束时,你将使 fleet 作为 systemd 服务运行,并在系统启动时启用并自动运行。
首先,创建新目录 '/etc/fleet/certs' 用于存储你的 fleet 配置和 TLS 证书文件。然后,创建新配置文件 '/etc/fleet/fleet.yml' 和 systemd 服务文件 '/etc/systemd/system/fleet.service'。
mkdir -p /etc/fleet/certs
touch /etc/fleet/fleet.yml /etc/systemd/system/fleet.service
接下来,将你生成的 TLS 证书复制到 '/etc/fleet/certs' 目录,并将 fleet 配置目录的所有权更改为用户和组 'fleet'。
cp /etc/letsencrypt/live/fleet.howtoforge.local/fullchain.pem /etc/fleet/certs/
cp /etc/letsencrypt/live/fleet.howtoforge.local/privkey.pem /etc/fleet/certs/
sudo chown -R fleet:fleet /etc/fleet
使用以下 nano 编辑器命令打开 fleet 配置文件 '/etc/fleet/fleet.yml'。
nano /etc/fleet/fleet.yml
向文件中添加以下内容,并务必修改 MySQL 数据库和用户的详细信息以及 SSL/TLS 证书文件的路径。
这样,你将使用 MySQL 数据库服务器和 Redis 运行 fleet,通过 TLS 证书进行安全部署,并启用 json 格式的日志。
mysql:
address: 127.0.0.1:3306
database: fleetdb
username: fleetadmin
password: S3curep4ssw0rd--=
redis:
address: 127.0.0.1:6379
server:
cert: /etc/fleet/certs/fullchain.pem
key: /etc/fleet/certs/privkey.pem
logging:
json: true
# auth:
# jwt_key: 0iXLJRKhB77puDm13G6ehgkClK0kff6N
完成后保存并退出文件 '/etc/fleet/fleet.yml'。
接下来,使用以下 nano 编辑器命令打开 fleet systemd 服务文件 '/etc/systemd/system/fleet.service'。
sudo nano /etc/systemd/system/fleet.service
向文件中添加以下内容。这样,你将把 fleet 作为 systemd 服务运行,使用配置文件 '/etc/fleet/fleet.yml',并且该服务将以用户和组 'fleet' 身份运行。
[Unit]
Description=Fleet Osquery Fleet Manager
After=network.target
[Service]
User=fleet
Group=fleet
LimitNOFILE=8192
ExecStart=/usr/bin/fleet serve -c /etc/fleet/fleet.yml
ExecStop=/bin/kill -15 $(ps aux | grep "fleet serve" | grep -v grep | awk '{print$2}')
[Install]
WantedBy=multi-user.target
完成后保存文件 '/etc/systemd/system/fleet.service' 并退出编辑器。
现在运行以下 systemctl 命令工具以重新加载 systemd 管理器并应用更改。
sudo systemctl daemon-reload
然后,使用以下 systemctl 命令工具启动并启用 fleet 服务。
sudo systemctl start fleet
sudo systemctl enable fleet

现在使用以下命令验证 fleet 服务,确保服务正在运行。
sudo systemctl status fleet
现在你已使 fleet 作为 systemd 服务运行。此外,它已启用,并将在系统启动时自动启动。

至此,fleet osquery 管理器现已作为 systemd 服务运行,使用默认配置文件 '/etc/fleet/fleet.yml',监听 TCP 端口 8080。在访问你的 fleet 安装之前,你必须在 firewalld 上开放端口 8080。
配置 Firewalld
在本节中,你将通过 firewalld 在系统上开放端口 8080(fleet 使用的端口)。在默认的 Rocky Linux 上,firewalld 已安装并正在运行。
运行以下 firewall-cmd 命令将端口 8080 添加到 firewalld。然后,重新加载 firewalld 规则以应用更改。
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
现在验证 firewalld 规则列表,确保端口 8080 已添加并在 firewalld 上可用。
sudo firewall-cmd --list-all
在 'ports' 部分,你应该看到端口 '8080/tcp'。这确认 fleet 的端口 8080 已添加到 firewalld。

配置 Fleet Osquery Manager
如果你一直按照本教程操作,fleet osquery 管理器正在运行,并且端口 8080 已添加到 firewalld。在本节中,你将设置 fleet osquery 管理器部署。你将为首个用户进行设置,并通过 Web 浏览器完成部署。
打开你的 Web 浏览器,访问你的 fleet osquery 管理器安装的域名及 TCP 端口 8080(例如:https://fleet-rock.howtoforge.local:8080/)。
第一步,系统会要求你为 fleet 部署设置第一个用户。输入你的全名、电子邮件地址和密码,然后点击 Next(下一步)。

输入组织详细信息,然后再次点击 Next(下一步)。

对于 fleet URL,你可以保持默认不变,并点击 Next(下一步)。

重新检查你的 fleet 配置,然后点击 Confirm(确认)以完成部署。

成功后,你应该会看到 fleet 管理仪表板。

现在 fleet osquery 管理器安装已完成。这样,你可以通过多种方式向 fleet 添加新主机,例如使用 Orbit(osquery 运行时)、用于带有桌面环境的主机(包括 Windows 和 macOS)的 fleet Desktop,或通过生成 fleet 密钥和 TLS 证书手动添加。
通过 Orbit Osquery Runtime 添加主机
Orbit 是一个 osquery 运行时和自动更新程序,可让你轻松部署 osquery 并管理配置。Orbit 是 fleet 的一个 agent,它可以在有或没有 Fleet 的情况下使用,而 Fleet 也可以在有或没有 Orbit 的情况下使用。
在此步骤中,你将学习如何为基于 RHEL 的发行版生成 Orbit 安装包。然后,你将学习如何通过 Orbit 向 fleet 添加新主机。
首先,返回 fleet 仪表板并点击 'Add Hosts'(添加主机)。

选择 'Advanced'(高级)选项卡,下载 fleet 证书 'fleet.pem',然后复制用于为特定发行版创建 orbit 包的命令。你可以为 RPM、DEB 和 pkg(用于 macOS)生成 orbit 安装程序。

接下来,将你下载的 fleet 证书上传到 fleet 服务器。在本示例中,你将使用 'scp' 将 'fleet.pem' 文件上传到 fleet 服务器。
scp fleet.pem
[email protected]
:/opt/
上传 fleet.pem 证书后,运行用于生成 orbit 安装包的命令。请务必将参数 '--type' 修改为你偏好的包类型。
在本示例中,你将生成用于基于 RHEL 发行版的 orbit 包。对于基于 Debian 的发行版,你可以将参数 '--type' 改为 'deb',而对于 macOS,你可以使用 'pkg' 包来生成 orbit 安装程序。
fleetctl package --type=rpm --fleet-url=https://fleet-rock.howtoforge.local:8080 \
--enroll-secret=ewQBXuvBJ70ZiFFkjOLFLp3V4POe+KTu \
--fleet-certificate=/opt/fleet.pem
输出:

进程完成后,你可以在当前工作目录中看到文件 'fleet-osquery_version.rpm'。
接下来,通过以下 rpm 命令安装生成的 orbit 包。安装完成后,orbit 包将创建一个新的服务文件 'orbit.service',允许你通过 systemctl 管理 orbit。
sudo rpm -Uvh fleet-osquery_version.rpm
输出:

orbit 安装完成后,运行以下 systemctl 命令以启动 orbit 服务。然后,验证状态以确保 orbit 服务正在运行。
sudo systemctl start orbit
sudo systemctl status orbit
你应该收到类似以下的输出——orbit 服务为 'active (running)',并且已启用,将在系统启动时自动运行。

现在返回 fleet 仪表板,你应该会看到新主机 'fleet-rock.howtoforge.local' 已添加到 fleet osquery 管理器。

点击主机名 'fleet-rock.howtoforge.local' 以查看该主机的详细信息。

至此,你已通过 Orbit osquery 运行时向 fleet osquery 管理器添加了一台主机。你还为基于 RHEL 的发行版生成了 orbit 安装程序。
在下一步中,你将学习如何设置 fleetctl 以连接到 fleet 服务器,并通过终端管理你的 fleet 部署。
设置 Fleetctl 以管理 Fleet
Fleetctl 或称 Fleet control,是用于从终端管理 fleet 部署的命令行工具。Fleetctl 允许你管理配置和查询、生成 osquery 安装程序,并与 fleet 启用 GitOps 工作流。
在此步骤中,你将设置 fleetctl 并连接到你已安装的 fleet osquery 管理器。
首先,运行以下命令设置默认的 fleet URL。请务必修改域名,并确保使用 HTTPS 安全连接。这样,你将在 'default'(默认)上下文/配置文件中设置 fleet 连接。
fleetctl config set --address https://fleet-rock.howtoforge.local:8080
使用以下命令登录你的 fleet osquery 管理器。请务必修改以下命令中的电子邮件地址。
fleetctl login --email
[email protected]
现在输入你用于登录 fleet 仪表板的密码。成功后,你应该会收到类似 'Fleet login successful and context configured!' 的输出。

登录 fleet 后,运行以下 fleetctl 命令验证你的配置。
检查 fleet 上可用主机的列表。
fleetctl get hosts
输出——你应该看到主机 'fleet-rock.howtoforge.local' 在 fleet 上可用,且 osquery 版本为 v5.7.0。

检查 fleet 上可用用户的列表。
fleetctl get ur
输出——你应该看到你创建的 fleet 用户。

至此,你已配置 fleetctl 并连接到你的 fleet 部署。现在你可以从终端服务器设置主机和查询、管理更新、运行实时查询。
结论
在本教程中,你已在 Rocky Linux 9 服务器上安装了 Fleet Osquery Manager。你已将 Fleet 与 MySQL 作为数据库后端、Redis 作为接收队列和缓存数据进行安装。此外,你已使用 SSL/TLS 证书加固了 Fleet,并将 Fleet 作为 systemd 服务运行,使你可以使用 systemctl 命令工具轻松管理 Fleet。
最后,你还通过 Orbit(osquery 运行时)向 Fleet 添加了一台主机,并为基于 RHEL 的发行版生成了安装包。此外,你已配置 fleetctl 并登录 Fleet,以便从终端服务器管理和配置主机。
考虑到这一点,你现在可以通过 orbit 或直接使用 plain osqueryd 服务手动向 Fleet osquery 管理器添加新主机。此外,你可以定义用于监控主机的新查询、设置漏洞处理以通过 Fleet 检测 CVE,等等。从 Fleet 的官方文档了解更多关于 Fleet 的信息。