在本教程中,您将学习如何在 Ubuntu 20.04 上安装 Fleet osquery 管理器。 随着 Kolide 舰队于 2020 年 11 月 4 日正式退役,还有另一个舰队提供了与 Kolide 舰队相同的功能。 根据其 Github 存储库,“Fleet 是使用最广泛的开源 osquery 管理器。 使用 Fleet 部署 osquery 可以实现可编程的实时查询、流式日志以及跨 50,000 多台服务器、容器和笔记本电脑的 osquery 的有效管理。 这对于同时与多个设备通话特别有用。”
如果您使用的是 Debian 10,请按照以下指南在 Debian 10 上安装 Fleet Osquery;
在 Debian 10 上安装 Fleet Osquery Manager
在 Ubuntu 上安装 Fleet Osquery Manager
先决条件
为了在 Ubuntu 上安装 Fleet osquery 管理器,有一些要求。 在我们的设置中,我们将使用 Ubuntu 20.04 作为我们的基本操作系统。
安装 MySQL 数据库
Fleet 使用 MySQL 作为其主要数据库
在此设置中,我们将使用 MariaDB 数据库。 因此,创建最新的 MariaDB(当前 v10.5)APT 存储库
apt install software-properties-common
apt-key adv --fetch-keys https://mariadb.org/mariadb_release_signing_key.asc
echo "deb [arch=amd64,arm64,ppc64el] https://sfo1.mirrors.digitalocean.com/mariadb/repo/10.5/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/mariadb-10.5.list
如果您需要,您可以选择您所在地区关闭的其他 MariaDB 镜像。
更新您的包缓存。
apt update
在 Ubuntu 20.04 上运行命令 install MariaDB server 10.5
apt install mariadb-server
MariaDB 在安装时启动并启用以在系统引导时运行。
systemctl status mariadb.service
● mariadb.service - MariaDB 10.5.9 database server Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled) Drop-In: /etc/systemd/system/mariadb.service.d └─migrated-from-my.cnf-settings.conf Active: active (running) since Sat 2021-03-20 07:22:04 UTC; 6min ago Docs: man:mariadbd(8) https://mariadb.com/kb/en/library/systemd/ Main PID: 6859 (mariadbd) Status: "Taking your SQL requests now..." Tasks: 9 (limit: 4620) Memory: 69.9M CGroup: /system.slice/mariadb.service └─6859 /usr/sbin/mariadbd Mar 20 07:23:16 ubuntu20 /etc/mysql/debian-start[6880]: mysql Mar 20 07:23:16 ubuntu20 /etc/mysql/debian-start[6880]: performance_schema Mar 20 07:23:16 ubuntu20 /etc/mysql/debian-start[6880]: Phase 6/7: Checking and upgrading tables Mar 20 07:23:16 ubuntu20 /etc/mysql/debian-start[6880]: Processing databases Mar 20 07:23:16 ubuntu20 /etc/mysql/debian-start[6880]: information_schema Mar 20 07:23:16 ubuntu20 /etc/mysql/debian-start[6880]: performance_schema Mar 20 07:23:16 ubuntu20 /etc/mysql/debian-start[6880]: Phase 7/7: Running 'FLUSH PRIVILEGES' Mar 20 07:23:16 ubuntu20 /etc/mysql/debian-start[6880]: OK Mar 20 07:23:16 ubuntu20 /etc/mysql/debian-start[8111]: Checking for insecure root accounts. Mar 20 07:23:16 ubuntu20 /etc/mysql/debian-start[8115]: Triggering myisam-recover for all MyISAM tables and aria-recover for all Aria tables
创建舰队数据库和数据库用户
运行初始 MySQL 安全脚本, mysql_secure_installation,删除匿名数据库用户,测试表,禁用远程root登录。
mysql_secure_installation
默认情况下,MariaDB 10.5 默认使用 unix_socket 进行身份验证,因此,只需运行即可登录, mysql -u root
. 但是,如果启用了密码验证,只需运行;
mysql -u root -p
接下来,创建 Fleet 数据库。
笔记: 这里使用的数据库数据库名称不是标准的。 选择您喜欢的任何名称。
create database fleetdb;
使用上面创建的 Fleet DB 上的所有授权创建 Fleet 数据库用户。
grant all on fleetdb.* to [email protected] identified by '[email protected]';
重新加载权限表并退出数据库;
flush privileges; exit
在 Ubuntu 20.04 上安装 Redis
Fleet 使用 Redis 对分布式查询、缓存数据等的结果进行摄取和排队。
要安装最新的稳定版Redis,您需要安装 redislabs/redis
通过运行以下命令来打包存储库;
add-apt-repository ppa:redislabs/redis --yes
接下来,更新包缓存;
apt update
在 Ubuntu 20.04 上安装 Redis;
apt install redis
Redis服务器同样在安装时启动;
systemctl status redis-server.service
● redis-server.service - Advanced key-value store Loaded: loaded (/lib/systemd/system/redis-server.service; disabled; vendor preset: enabled) Active: active (running) since Sat 2021-03-20 07:34:27 UTC; 5min ago Docs: https://redis.io/documentation, man:redis-server(1) Main PID: 10391 (redis-server) Status: "Ready to accept connections" Tasks: 5 (limit: 4620) Memory: 2.4M CGroup: /system.slice/redis-server.service └─10391 /usr/bin/redis-server 127.0.0.1:6379 Mar 20 07:34:27 ubuntu20 systemd[1]: Starting Advanced key-value store... Mar 20 07:34:27 ubuntu20 systemd[1]: Started Advanced key-value store.
使其在系统启动时运行;
systemctl enable redis-server
在 Ubuntu 20.04 上安装 Fleet Osquery Manager
在 Ubuntu 20.04 上安装 Fleet 二进制文件
Fleet 应用程序作为单个静态二进制文件分发。 这个二进制文件服务于:
- 舰队网络界面
- Fleet 应用程序 API 端点
- osquery TLS 服务器 API 端点
要下载最新的 Fleet 二进制文件,只需执行以下命令;
curl -LO https://github.com/fleetdm/fleet/releases/latest/download/fleet.zip
解压 Linux 平台的二进制文件:
unzip fleet.zip 'linux/*' -d ~/fleet
将 Fleet 二进制文件复制到二进制文件目录;
cp ~/fleet/linux/* /usr/local/bin/
验证二进制文件是否到位;
which fleet fleetctl
/usr/local/bin/fleet /usr/local/bin/fleetctl
在 Ubuntu 20.04 上运行 Fleet Server
初始化车队数据库
要在安装和设置上述所有要求后初始化 Fleet 基础设施,请使用 fleet prepare db
如下;
fleet prepare db --mysql_address=127.0.0.1:3306 --mysql_database=fleetdb --mysql_username=fleetadmin [email protected]
如果初始化成功完成,你应该得到输出,
Migrations completed.
生成 SSL/TLS 证书
车队服务器用于运行主要的 HTTPS 服务器。 因此,运行以下命令以生成自签名证书。
笔记: 如果您在本演示中使用自签名证书,请勿使用通配符,以免主机注册不起作用。
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/fleet.key -out /etc/ssl/certs/fleet.cert -subj "/CN=osquery.kifarunix-demo.com/"
如果可以,请使用您首选的受信任 CA 提供的商业 TLS 证书。
生成 Json Web Token
随机生成 Json Web Token (JWT)
用于签名和验证会话令牌的密钥。 这将在运行时需要 车队服务 命令用于 –auth_jwt_key 选项。 如果没有此选项,车队服务器将无法启动.
为了帮助自动生成令牌,只需在没有此选项的情况下运行fleet server 命令。
fleet serve --mysql_address=127.0.0.1:3306 --mysql_database=fleetdb --mysql_username=fleetadmin [email protected] --server_cert=/etc/ssl/certs/fleet.cert --server_key=/etc/ssl/private/fleet.key --logging_json
该命令失败并为您自动生成一个随机密钥;
################################################################################ # ERROR: # A value must be supplied for --auth_jwt_key or --auth_jwt_key_path. This value is used to create # session tokens for users. # # Consider using the following randomly generated key: # cw1h9ww06XwWDOwDDBpi9pxwNqEVf6Ig ################################################################################
启动 Fleet Osquery Manager
一旦您初始化了数据库,获得了 TLS 证书并获得了一个 JWT 随机密钥,您就可以启动它以验证它是否可以使用 车队服务 命令如下图。
运行的语法 fleet serve
下面给出;
fleet serve [flags]
您可以通过多种方式指定 Fleet 标志;
- 在命令行上
- 使用环境变量
- 使用配置文件
在命令行上指定车队管理器标志
您可以在命令行上指定标志,如下所示;
fleet serve --mysql_address=127.0.0.1:3306 --mysql_database=fleetdb --mysql_username=fleetadmin [email protected] --server_cert=/etc/ssl/certs/fleet.cert --server_key=/etc/ssl/private/fleet.key --logging_json --auth_jwt_key=cw1h9ww06XwWDOwDDBpi9pxwNqEVf6Ig
如果一切顺利,您应该看到 Fleet 服务器现在正在运行 0.0.0.0:8080 因此可以访问 https://:8080.
{"component":"service","err":null,"level":"info","method":"ListUsers","took":"651.223µs","ts":"2021-03-20T08:12:04.045682218Z","user":"none"} {"address":"0.0.0.0:8080","msg":"listening","transport":"https","ts":"2021-03-20T08:12:04.046253256Z"}
按 Ctrl+c 停止 Fleet 服务器。
使用环境变量指定车队管理器标志
同样,您可以使用环境变量指定 Fleet 标志,如下所示(更新环境变量的值并将命令粘贴到终端上);
FLEET_MYSQL_ADDRESS=127.0.0.1:3306 FLEET_MYSQL_DATABASE=fleetdb FLEET_MYSQL_USERNAME=fleetadmin [email protected] FLEET_REDIS_ADDRESS=127.0.0.1:6379 FLEET_SERVER_CERT=/etc/ssl/certs/fleet.cert FLEET_SERVER_KEY=/etc/ssl/private/fleet.key FLEET_AUTH_JWT_KEY=cw1h9ww06XwWDOwDDBpi9pxwNqEVf6Ig FLEET_LOGGING_JSON=true $(which fleet) serve
同样,按 Ctrl+c 停止 Fleet 服务器。
在配置文件中设置车队管理器标志
您可以创建一个 YAML 配置文件,您可以在其中定义标志及其选项。 例如,让我们创建一个配置文件,例如 /etc/fleet/fleet.yml
.
mkdir /etc/fleet
在上面的目录下,创建一个YAML配置文件。
您可以简单地执行下面的命令,并确保适当地替换您的设置。
cat > /etc/fleet/fleet.yml << 'EOL' mysql: address: 127.0.0.1:3306 database: fleetdb username: fleetadmin password: [email protected] redis: address: 127.0.0.1:6379 server: cert: /etc/ssl/certs/fleet.cert key: /etc/ssl/private/fleet.key logging: json: true auth: jwt_key: cw1h9ww06XwWDOwDDBpi9pxwNqEVf6Ig EOL
接下来,通过运行以下命令启动 Fleet 管理器;
fleet serve -c /etc/fleet/fleet.yml
同样,按 Ctrl+c 停止 Fleet 服务器。
在 Ubuntu 20.04 上创建 Fleet Systemd 服务单元
确认 Fleet 运行良好后,创建一个 systemd 服务文件, /etc/systemd/system/fleet.service
. 您可以使用上面显示的任何方法来指定标志 ExecStart
创建 systemd 服务单元文件时的选项。
Fleet systemd 服务单元文件示例,带有以“cli”格式指定的标志。
cat > /etc/systemd/system/fleet.service << 'EOL' [Unit] Description=Fleet Osquery Fleet Manager After=network.target [Service] LimitNOFILE=8192 ExecStart=/usr/local/bin/fleet serve --mysql_address=127.0.0.1:3306 --mysql_database=fleetdb --mysql_username=fleetadmin [email protected] --redis_address=127.0.0.1:6379 --server_cert=/etc/ssl/certs/fleet.cert --server_key=/etc/ssl/private/fleet.key --auth_jwt_key=cw1h9ww06XwWDOwDDBpi9pxwNqEVf6Ig --logging_json ExecStop=/bin/kill -15 $(ps aux | grep "fleet serve" | grep -v grep | awk '{print$2}') [Install] WantedBy=multi-user.target EOL
我自己更喜欢的方法是使用配置文件。 下面的服务文件使用具有如上所示定义的 Fleet 标志的配置文件。
cat > /etc/systemd/system/fleet.service << 'EOL' [Unit] Description=Fleet Osquery Fleet Manager After=network.target [Service] LimitNOFILE=8192 ExecStart=/usr/local/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 EOL
重新加载 systemd 配置。
systemctl daemon-reload
启动并启用 Fleet 服务。
systemctl enable --now fleet
检查状态;
systemctl status fleet
● fleet.service - Fleet Osquery Fleet Manager Loaded: loaded (/etc/systemd/system/fleet.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2021-03-20 08:19:12 UTC; 4s ago Main PID: 11844 (fleet) Tasks: 8 (limit: 4620) Memory: 14.1M CGroup: /system.slice/fleet.service └─11844 /usr/local/bin/fleet serve -c /etc/fleet/fleet.yml Mar 20 08:19:12 ubuntu20 systemd[1]: Started Fleet Osquery Fleet Manager. Mar 20 08:19:12 ubuntu20 fleet[11844]: {"component":"service","err":null,"level":"info","method":"ListUsers","took":"378.122µs","ts":"2021-03-20T08:19:12.73338155Z","user"> Mar 20 08:19:12 ubuntu20 fleet[11844]: {"address":"0.0.0.0:8080","msg":"listening","transport":"https","ts":"2021-03-20T08:19:12.733806227Z"}
访问车队 Web 界面
可以使用 URL 在浏览器上访问 Fleet https://
如果防火墙正在运行,请打开此端口以允许外部访问;
ufw allow 8080/tcp
然后从浏览器访问 Fleet Web 界面。 并继续在 Ubuntu 20.04 上完成 Fleet Osquery 管理器的设置;
创建 admin 用户;
Enter 您的组织详细信息、名称和徽标 URL。
设置车队服务器 URL。
提交详细信息并进入 Fleet Web 界面。
这标志着我们关于如何在 Ubuntu 20.04 上安装 Fleet Osquery Manager 的教程结束。 在我们的下一个教程中,您将学习如何将 Osquery 代理注册到 Fleet manager。
如何在 Fleet Manager 上注册 Osquery 主机
参考
安装车队
其他相关教程
在 Ubuntu 20.04 上安装 Osquery
在 Debian 10 Buster 上安装 Osquery
如何在 Ubuntu 18.04 上安装 Osquery