在Debian 10上安装Fleet Osquery Manager

在本教程中,您将学习如何安装 舰队 Debian 10上的osquery管理器。随着Kolide舰队的正式退役,到2020年11月4日,还有另外一个 舰队 提供与Kolide Fleet相同的功能。根据其 Github仓库,“ Fleet是使用最广泛的开源osquery管理器。 通过Fleet部署osquery可以进行可编程实时查询,流日志,并可以有效管理50,000多个服务器,容器和笔记本电脑中的osquery。 这对于同时与多个设备通话非常有用。”

如果您使用的是Ubuntu,则可以使用以下指南;

在Ubuntu 20.04上安装Fleet Osquery Manager

在Debian 10上安装Fleet Osquery Manager

先决条件

为了在Debian上安装Fleet osquery manager,有一些要求。在我们的设置中,我们将使用Debian 10作为基本操作系统。

安装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] http://sfo1.mirrors.digitalocean.com/mariadb/repo/10.5/debian $(lsb_release -sc) main" > /etc/apt/sources.list.d/mariadb-10.5.list

如果需要,可以选择 其他MariaDB镜像已关闭到您所在的区域

更新您的程序包缓存。

apt update

在Debian 10上运行命令install MariaDB server 10.5

apt install mariadb-server
systemctl status mariadb.service

MariaDB已启动,并已启用,可在安装后在系统启动时运行。

● 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 Mon 2021-03-22 13:19:24 EDT; 10min ago
     Docs: man:mariadbd(8)
           https://mariadb.com/kb/en/library/systemd/
 Main PID: 16307 (mariadbd)
   Status: "Taking your SQL requests now..."
    Tasks: 8 (limit: 1149)
   Memory: 69.7M
   CGroup: /system.slice/mariadb.service
           └─16307 /usr/sbin/mariadbd

Mar 22 13:20:34 debian /etc/mysql/debian-start[16330]: performance_schema
Mar 22 13:20:34 debian /etc/mysql/debian-start[16330]: Phase 6/7: Checking and upgrading tables
Mar 22 13:20:34 debian /etc/mysql/debian-start[16330]: Processing databases
Mar 22 13:20:34 debian /etc/mysql/debian-start[16330]: fleetdb
Mar 22 13:20:34 debian /etc/mysql/debian-start[16330]: information_schema
Mar 22 13:20:34 debian /etc/mysql/debian-start[16330]: performance_schema
Mar 22 13:20:34 debian /etc/mysql/debian-start[16330]: Phase 7/7: Running 'FLUSH PRIVILEGES'
Mar 22 13:20:34 debian /etc/mysql/debian-start[16330]: OK
Mar 22 13:20:34 debian /etc/mysql/debian-start[16481]: Checking for insecure root accounts.
Mar 22 13:20:34 debian /etc/mysql/debian-start[16485]: 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

在Debian 10上安装Redis

Fleet使用Redis提取并排队分布式查询,缓存数据等的结果。

通过运行以下命令在Debian 10上安装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; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-03-22 13:29:24 EDT; 1s ago
     Docs: http://redis.io/documentation,
           man:redis-server(1)
  Process: 17869 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
 Main PID: 17870 (redis-server)
    Tasks: 4 (limit: 1149)
   Memory: 2.2M
   CGroup: /system.slice/redis-server.service
           └─17870 /usr/bin/redis-server 127.0.0.1:6379

Mar 22 13:29:24 debian systemd[1]: Starting Advanced key-value store...

使它能够在系统启动时运行;

systemctl enable redis-server

在Debian 10上安装Fleet Osquery Manager

在Debian 10上安装Fleet二进制文件

Fleet应用程序作为单个静态二进制文件分发。此二进制文件具有以下功能:

  • Fleet Web界面
  • Fleet应用程序API端点
  • osquery TLS服务器API端点

要下载最新的Fleet二进制文件,只需执行以下命令即可;

curl -LO https://github.com/fleetdm/fleet/releases/latest/download/fleet.zip

解压缩Linux平台的二进制文件:

apt install zip -y
unzip fleet.zip 'linux/*' -d ~/fleet

将Fleet二进制文件复制到二进制文件目录;

cp ~/fleet/linux/* /usr/local/bin/

验证二进制文件是否到位;

which fleet fleetctl
/usr/local/bin/fleet
/usr/local/bin/fleetctl

在Debian 10上运行Fleet Server初始化Fleet数据库

要在安装和设置以上所有要求后初始化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证书

Fleet服务器用于运行主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令牌

产生随机 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:
#   0iXLJRKhB77puDm13G6ehgkClK0kff6N
################################################################################

启动Fleet Osquery Manager

初始化数据库,获取TLS证书并获取JWT随机密钥后,您可以启动数据库以验证其是否可以成功运行。 机队服务 命令如下所示。

运行的语法 fleet serve 如下:

fleet serve [flags]

您可以通过多种方式指定Fleet标志。

  • 在命令行上
  • 使用环境变量
  • 使用配置文件

在命令行上指定Fleet Manager标志

您可以在命令行上指定标志,如下所示;

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=0iXLJRKhB77puDm13G6ehgkClK0kff6N

如果一切顺利,您应该看到Fleet服务器现在正在运行 0.0.0.0:8080 因此可以在 https:// <服務器IP>:8080

{"component":"service","err":null,"level":"info","method":"ListUsers","took":"1.943838ms","ts":"2021-03-22T17:42:25.40539689Z","user":"none"}
{"address":"0.0.0.0:8080","msg":"listening","transport":"https","ts":"2021-03-22T17:42:25.406425857Z"}

按Ctrl + c停止Fleet服务器。

使用环境变量指定Fleet Manager标志

同样,您可以使用环境变量来指定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=0iXLJRKhB77puDm13G6ehgkClK0kff6N 
FLEET_LOGGING_JSON=true 
$(which fleet) serve

同样,按Ctrl + c停止Fleet服务器。

在配置文件中设置Fleet Manager标志

您可以创建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: 0iXLJRKhB77puDm13G6ehgkClK0kff6N
EOL

接下来,通过运行以下命令启动Fleet Manager。

fleet serve -c /etc/fleet/fleet.yml

同样,按Ctrl + c停止Fleet服务器。

在Debian 10上创建Fleet Systemd服务单位

确认Fleet运行正常后,创建一个systemd服务文件, /etc/systemd/system/fleet.service。您可以使用上面显示的任何方法来指定标志 ExecStart 创建systemd服务单元文件时选择“选项”。

Fleet系统服务单元文件示例,其标志以“ 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=0iXLJRKhB77puDm13G6ehgkClK0kff6N 
  --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; disabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-03-22 13:44:47 EDT; 2s ago
 Main PID: 19114 (fleet)
    Tasks: 5 (limit: 1149)
   Memory: 14.9M
   CGroup: /system.slice/fleet.service
           └─19114 /usr/local/bin/fleet serve -c /etc/fleet/fleet.yml

Mar 22 13:44:47 debian systemd[1]: fleet.service: Control process exited, code=exited, status=1/FAILURE
Mar 22 13:44:47 debian fleet[19056]: {"terminated":"http: Server closed","ts":"2021-03-22T17:44:47.059951181Z"}
Mar 22 13:44:47 debian systemd[1]: fleet.service: Failed with result 'exit-code'.
Mar 22 13:44:47 debian systemd[1]: Stopped Fleet Osquery Fleet Manager.
Mar 22 13:44:47 debian systemd[1]: Started Fleet Osquery Fleet Manager.
Mar 22 13:44:47 debian fleet[19114]: Using config file:  /etc/fleet/fleet.yml
Mar 22 13:44:47 debian fleet[19114]: {"component":"service","err":null,"level":"info","method":"ListUsers","took":"349.023µs","ts":"2021-03-22T17:44:47.121370591Z","user":"
Mar 22 13:44:47 debian fleet[19114]: {"address":"0.0.0.0:8080","msg":"listening","transport":"https","ts":"2021-03-22T17:44:47.122012677Z"}

访问Fleet Web界面

可以使用URL在浏览器上访问车队 https:// <服務器IP_OR_主機名>:8080

如果防火墙正在运行,请打开此端口以允许外部访问。

ufw allow 8080/tcp

然后从浏览器访问Fleet Web界面。然后在Debian 10上完成Fleet Osquery manager的设置;

创建管理员用户;

输入您的组织详细信息,名称和徽标网址。

设置Fleet服务器URL。

在Debian 10上安装Fleet osquery管理器

提交详细信息,然后转到Fleet Web界面。

在Debian 10上安装Fleet osquery管理器

这标志着本教程有关如何在Debian 10上安装Fleet Osquery Manager的教程的结尾。在我们的下一个教程中,您将学习如何将Osquery代理注册到Fleet Manager。

如何在Fleet Manager上注册Osquery主机

参考

安装车队

Sidebar