{"id":8365,"date":"2021-03-22T21:37:25","date_gmt":"2021-03-22T18:37:25","guid":{"rendered":"https:\/\/kifarunix.com\/?p=8365"},"modified":"2024-03-19T18:41:45","modified_gmt":"2024-03-19T15:41:45","slug":"install-fleet-osquery-manager-on-debian-10","status":"publish","type":"post","link":"https:\/\/kifarunix.com\/install-fleet-osquery-manager-on-debian-10\/","title":{"rendered":"Install Fleet Osquery Manager on Debian 10"},"content":{"rendered":"\n
In this tutorial, you will learn how to install Fleet<\/a> osquery manager on Debian 10. With the official retirement of the Kolide Fleet as on November 4th, 2020, there has been yet another Fleet<\/a> that offers the same functionality as Kolide Fleet. According to its Github repository<\/a>, “Fleet is the most widely used open source osquery manager. Deploying osquery with Fleet enables programmable live queries, streaming logs, and effective management of osquery across 50,000+ servers, containers, and laptops. It’s especially useful for talking to multiple devices at the same time.<\/em>“<\/p>\n\n\n\n If you are using Ubuntu, you can use the guide below;<\/p>\n\n\n\n Install Fleet Osquery Manager on Ubuntu 20.04\/Ubuntu 22.04<\/a><\/p>\n\n\n\n In order to install Fleet osquery manager on Debian, there are a few requirements. In our setup, we will be using Debian 10 as our base OS.<\/p>\n\n\n\n Fleet uses MySQL as its main database<\/p>\n\n\n\n In this setup, we will use MariaDB database. Hence, create latest MariaDB (currently v10.5) APT repository<\/p>\n\n\n\n If you need, you can choose other MariaDB mirrors closed to your region<\/a>.<\/p>\n\n\n\n Update your package cache.<\/p>\n\n\n\n Run the command install MariaDB server 10.5 on Debian 10<\/p>\n\n\n\n MariaDB is started and enabled to run on system boot upon installation.<\/p>\n\n\n\n Run the initial MySQL security script, mysql_secure_installation<\/strong>, to remove anonymous database users, test tables, disable remote root login.<\/p>\n\n\n\n By default, MariaDB 10.5 uses unix_socket for authentication by default and hence, can login by just running, Next, create the Fleet database.<\/p>\n\n\n\n Note:<\/strong> the database database names used here are not standard. Choose any name of your preference.<\/strong><\/p>\n\n\n\n Create Fleet database user with all grants on Fleet DB created above.<\/p>\n\n\n\n Reload privileges tables and exit the database;<\/p>\n\n\n\n Fleet uses Redis to ingest and queue the results of distributed queries, cache data, etc.<\/em><\/p>\n\n\n\n Install Redis on Debian 10 by running the command below;<\/p>\n\n\n\n Redis server is similarly started upon installation;<\/p>\n\n\n\n Enable it to run on system boot;<\/p>\n\n\n\n The Fleet application is distributed as a single static binary. This binary serves:<\/em><\/p>\n\n\n\n Download the latest Fleet binary from the releases page<\/a>;<\/p>\n\n\n\n Extract the binaries for Linux platform:<\/p>\n\n\n\n Copy Fleet binaries to binaries directories;<\/p>\n\n\n\n To verify the binaries are in place;<\/p>\n\n\n\n To initialize Fleet infrastructure after installing and setting up all the requirements above, use the If the initialization completes successfully, you should get the output,<\/p>\n\n\n\n Fleet server is used to run the main HTTPS server. Hence, run the command below to generate self-signed certificates.<\/p>\n\n\n\n NOTE: If you are using Self Signed Certificates as in this demo, DO NOT use wildcards lest enrollment of hosts won\u2019t work.<\/strong><\/p>\n\n\n\n If you can, use the commercial TLS certificates from your preferred trusted CA.<\/strong><\/p>\n\n\n\n Once you have initialized the database, obtained the TLS certs and get a JWT random key, you can then launch it to verify that it can run successfully using the fleet serve<\/strong> command as shown below.<\/p>\n\n\n\n The syntax for running There are different ways in which you can specify Fleet flags;<\/p>\n\n\n\n You can specify the flags on command line as shown below;<\/p>\n\n\n\n If all is well, you should see that Fleet server is now running on 0.0.0.0:8080<\/strong> and hence can be accessed on https:\/\/<server-IP>:8080<\/strong>.<\/p>\n\n\n\n Press Ctrl+c to stop Fleet server.<\/p>\n\n\n\n Similarly, you can specify the Fleet flags using environment variables as shown below (update the values for the environment variables and paste the command on the terminal);<\/p>\n\n\n\n Similarly, press Ctrl+c to stop Fleet server.<\/p>\n\n\n\n You can create a YAML configuration file where you can define the flags and their options. For example, let us create a configuration file, e.g The, create a YAML configuration file under the directory above.<\/p>\n\n\n\n You can simply execute the command below and be sure to replace your settings appropriately.<\/p>\n\n\n\n Next, launch the Fleet manager by running the command below;<\/p>\n\n\n\n Similarly, press Ctrl+c to stop Fleet server.<\/p>\n\n\n\n Once you have verified that Fleet is running fine, create a systemd service file, Example of Fleet systemd service unit file with Flags specified in ‘cli’ like format.<\/p>\n\n\n\n The method I preferred myself is to use the configuration file instead. The below service file uses the configuration file with Fleet flags defined as shown above<\/a>.<\/p>\n\n\n\n Reload systemd configurations.<\/p>\n\n\n\n Start and enable Fleet service.<\/p>\n\n\n\n Check the status;<\/p>\n\n\n\n Fleet can be accessed on the browser using the URL https:\/\/<server-IP_OR_hostname>:8080<\/strong>.<\/p>\n\n\n\n If firewall is running, open this port to allow external access;<\/p>\n\n\n\n Then access Fleet Web interface from browser. and proceed to finalize the setup of Fleet Osquery manager on Debian 10;<\/p>\n\n\n\n Create the admin user;<\/p>\n\n\n\n Enter your organization details, Name and url to logo.<\/p>\n\n\n\n Set the Fleet server URL.<\/p>\n\n\n Submit the details and proceed to Fleet web interface.<\/p>\n\n\n\n And that marks the end of our tutorial on how to install Fleet Osquery Manager. In our next tutorial, you will learn how to enroll Osquery agents to Fleet manager.<\/p>\n\n\n\n How to Enroll Osquery Hosts on Fleet Manager<\/a><\/p>\n\n\n\n Installing Fleet<\/a><\/p>\n\n\n\n Install Osquery on Ubuntu 20.04<\/a><\/p>\n\n\n\nInstalling Fleet Osquery Manager on Debian<\/h2>\n\n\n\n
Prerequisites<\/h3>\n\n\n\n
Install MySQL Database<\/h4>\n\n\n\n
apt install software-properties-common<\/code><\/pre>\n\n\n\n
apt-key adv --fetch-keys https:\/\/mariadb.org\/mariadb_release_signing_key.asc<\/code><\/pre>\n\n\n\n
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<\/code><\/pre>\n\n\n\n
apt update<\/code><\/pre>\n\n\n\n
apt install mariadb-server<\/code><\/pre>\n\n\n\n
systemctl status mariadb.service<\/code><\/pre>\n\n\n\n
\n\u25cf mariadb.service - MariaDB 10.5.9 database server\n Loaded: loaded (\/lib\/systemd\/system\/mariadb.service; enabled; vendor preset: enabled)\n Drop-In: \/etc\/systemd\/system\/mariadb.service.d\n \u2514\u2500migrated-from-my.cnf-settings.conf\n Active: active (running) since Mon 2021-03-22 13:19:24 EDT; 10min ago\n Docs: man:mariadbd(8)\n https:\/\/mariadb.com\/kb\/en\/library\/systemd\/\n Main PID: 16307 (mariadbd)\n Status: \"Taking your SQL requests now...\"\n Tasks: 8 (limit: 1149)\n Memory: 69.7M\n CGroup: \/system.slice\/mariadb.service\n \u2514\u250016307 \/usr\/sbin\/mariadbd\n\nMar 22 13:20:34 debian \/etc\/mysql\/debian-start[16330]: performance_schema\nMar 22 13:20:34 debian \/etc\/mysql\/debian-start[16330]: Phase 6\/7: Checking and upgrading tables\nMar 22 13:20:34 debian \/etc\/mysql\/debian-start[16330]: Processing databases\nMar 22 13:20:34 debian \/etc\/mysql\/debian-start[16330]: fleetdb\nMar 22 13:20:34 debian \/etc\/mysql\/debian-start[16330]: information_schema\nMar 22 13:20:34 debian \/etc\/mysql\/debian-start[16330]: performance_schema\nMar 22 13:20:34 debian \/etc\/mysql\/debian-start[16330]: Phase 7\/7: Running 'FLUSH PRIVILEGES'\nMar 22 13:20:34 debian \/etc\/mysql\/debian-start[16330]: OK\nMar 22 13:20:34 debian \/etc\/mysql\/debian-start[16481]: Checking for insecure root accounts.\nMar 22 13:20:34 debian \/etc\/mysql\/debian-start[16485]: Triggering myisam-recover for all MyISAM tables and aria-recover for all Aria tables\n<\/code><\/pre>\n\n\n\n
Create Fleet Database and Database User<\/h4>\n\n\n\n
mysql_secure_installation<\/code><\/pre>\n\n\n\n
mysql -u root<\/strong><\/code>. If have however enabled password authentication, simply run;<\/p>\n\n\n\n
mysql -u root -p<\/code><\/pre>\n\n\n\n
create database fleetdb;<\/code><\/pre>\n\n\n\n
grant all on fleetdb.* to fleetadmin@localhost identified by 'StrongP@SS';<\/code><\/pre>\n\n\n\n
flush privileges;\nexit<\/code><\/pre>\n\n\n\n
Install Redis on Debian 10<\/h4>\n\n\n\n
apt install redis<\/code><\/pre>\n\n\n\n
systemctl status redis-server.service<\/code><\/pre>\n\n\n\n
\n\u25cf redis-server.service - Advanced key-value store\n Loaded: loaded (\/lib\/systemd\/system\/redis-server.service; enabled; vendor preset: enabled)\n Active: active (running) since Mon 2021-03-22 13:29:24 EDT; 1s ago\n Docs: http:\/\/redis.io\/documentation,\n man:redis-server(1)\n Process: 17869 ExecStart=\/usr\/bin\/redis-server \/etc\/redis\/redis.conf (code=exited, status=0\/SUCCESS)\n Main PID: 17870 (redis-server)\n Tasks: 4 (limit: 1149)\n Memory: 2.2M\n CGroup: \/system.slice\/redis-server.service\n \u2514\u250017870 \/usr\/bin\/redis-server 127.0.0.1:6379\n\nMar 22 13:29:24 debian systemd[1]: Starting Advanced key-value store...\n<\/code><\/pre>\n\n\n\n
systemctl enable redis-server<\/code><\/pre>\n\n\n\n
Install Fleet Osquery Manager<\/h3>\n\n\n\n
Install the Fleet binary on Debian 10<\/h4>\n\n\n\n
\n
curl -LO https:\/\/github.com\/fleetdm\/fleet\/releases\/download\/fleet-v4.20.1\/fleet_v4.20.1_linux.tar.gz<\/code><\/pre>\n\n\n\n
curl -LO https:\/\/github.com\/fleetdm\/fleet\/releases\/download\/fleet-v4.20.1\/fleetctl_v4.20.1_linux.tar.gz<\/code><\/pre>\n\n\n\n
tar xzf fleet_v4.20.1_linux.tar.gz<\/code><\/pre>\n\n\n\n
tar xzf fleetctl_v4.20.1_linux.tar.gz<\/code><\/pre>\n\n\n\n
cp fleet_v4.20.1_linux\/fleet \/usr\/local\/bin\/<\/code><\/pre>\n\n\n\n
cp fleetctl_v4.20.1_linux\/fleetctl \/usr\/local\/bin\/<\/code><\/pre>\n\n\n\n
which fleet fleetctl<\/code><\/pre>\n\n\n\n
\/usr\/local\/bin\/fleet\n\/usr\/local\/bin\/fleetctl<\/code><\/pre>\n\n\n\n
Running Fleet Server on Debian 10<\/h4>\n\n\n\n
Initialize Fleet Database<\/h5>\n\n\n\n
fleet prepare db<\/code> as follows;<\/p>\n\n\n\n
fleet prepare db --mysql_address=127.0.0.1:3306 --mysql_database=fleetdb --mysql_username=fleetadmin --mysql_password=StrongP@SS<\/code><\/pre>\n\n\n\n
Migrations completed.<\/code><\/pre>\n\n\n\n
Generate SSL\/TLS Certificates<\/h5>\n\n\n\n
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\/\"<\/code><\/pre>\n\n\n\n
Launching Fleet Osquery Manager<\/h4>\n\n\n\n
fleet serve<\/strong><\/code> is given below;<\/p>\n\n\n\n
fleet serve [flags]<\/code><\/pre>\n\n\n\n
\n
Specifying Fleet Manager Flags on Command line<\/h5>\n\n\n\n
fleet serve --mysql_address=127.0.0.1:3306 \\\n--mysql_database=fleetdb --mysql_username=fleetadmin --mysql_password=StrongP@SS \\\n--server_cert=\/etc\/ssl\/certs\/fleet.cert --server_key=\/etc\/ssl\/private\/fleet.key \\\n--logging_json<\/code><\/pre>\n\n\n\n
{\"component\":\"service\",\"err\":null,\"level\":\"info\",\"method\":\"ListUsers\",\"took\":\"1.943838ms\",\"ts\":\"2021-03-22T17:42:25.40539689Z\",\"user\":\"none\"}\n{\"address\":\"0.0.0.0:8080\",\"msg\":\"listening\",\"transport\":\"https\",\"ts\":\"2021-03-22T17:42:25.406425857Z\"}<\/code><\/pre>\n\n\n\n
Specifying Fleet Manager Flags Using Environment Variables<\/h5>\n\n\n\n
\nFLEET_MYSQL_ADDRESS=127.0.0.1:3306 \\\nFLEET_MYSQL_DATABASE=fleetdb \\\nFLEET_MYSQL_USERNAME=fleetadmin \\\nFLEET_MYSQL_PASSWORD=StrongP@SS \\\nFLEET_REDIS_ADDRESS=127.0.0.1:6379 \\\nFLEET_SERVER_CERT=\/etc\/ssl\/certs\/fleet.cert \\\nFLEET_SERVER_KEY=\/etc\/ssl\/private\/fleet.key \\\nFLEET_LOGGING_JSON=true \\\n$(which fleet) serve\n<\/code><\/pre>\n\n\n\n
Setting the Fleet Manager Flags in a Configuration file<\/h5>\n\n\n\n
\/etc\/fleet\/fleet.yml<\/code><\/strong>.<\/p>\n\n\n\n
mkdir \/etc\/fleet<\/code><\/pre>\n\n\n\n
\ncat > \/etc\/fleet\/fleet.yml << 'EOL'\nmysql:\n address: 127.0.0.1:3306\n database: fleetdb\n username: fleetadmin\n password: StrongP@SS\nredis:\n address: 127.0.0.1:6379\nserver:\n cert: \/etc\/ssl\/certs\/fleet.cert\n key: \/etc\/ssl\/private\/fleet.key\nlogging:\n json: true\n# auth:\n# jwt_key: 0iXLJRKhB77puDm13G6ehgkClK0kff6N\nEOL\n<\/code><\/pre>\n\n\n\n
fleet serve -c \/etc\/fleet\/fleet.yml<\/code><\/pre>\n\n\n\n
Create Fleet Systemd Service Unit on Debian 10<\/h4>\n\n\n\n
\/etc\/systemd\/system\/fleet.service<\/code><\/strong>. You can use any method shown above to specify the flags for
ExecStart <\/strong><\/code>option while creating the systemd service unit file.<\/p>\n\n\n\n
\ncat > \/etc\/systemd\/system\/fleet.service << 'EOL'\n[Unit]\nDescription=Fleet Osquery Fleet Manager\nAfter=network.target\n\n[Service]\nLimitNOFILE=8192\nExecStart=\/usr\/local\/bin\/fleet serve \\\n --mysql_address=127.0.0.1:3306 \\\n --mysql_database=fleetdb \\\n --mysql_username=fleetadmin \\\n --mysql_password=StrongP@SS \\\n --redis_address=127.0.0.1:6379 \\\n --server_cert=\/etc\/ssl\/certs\/fleet.cert \\\n --server_key=\/etc\/ssl\/private\/fleet.key \\\n --logging_json\nExecStop=\/bin\/kill -15 $(ps aux | grep \"fleet serve\" | grep -v grep | awk '{print$2}')\n\n[Install]\nWantedBy=multi-user.target\nEOL\n<\/code><\/pre>\n\n\n\n
\ncat > \/etc\/systemd\/system\/fleet.service << 'EOL'\n[Unit]\nDescription=Fleet Osquery Fleet Manager\nAfter=network.target\n\n[Service]\nLimitNOFILE=8192\nExecStart=\/usr\/local\/bin\/fleet serve -c \/etc\/fleet\/fleet.yml\nExecStop=\/bin\/kill -15 $(ps aux | grep \"fleet serve\" | grep -v grep | awk '{print$2}')\n\n[Install]\nWantedBy=multi-user.target\nEOL\n<\/code><\/pre>\n\n\n\n
systemctl daemon-reload<\/code><\/pre>\n\n\n\n
systemctl enable --now fleet<\/code><\/pre>\n\n\n\n
systemctl status fleet<\/code><\/pre>\n\n\n\n
\n\u25cf fleet.service - Fleet Osquery Fleet Manager\n Loaded: loaded (\/etc\/systemd\/system\/fleet.service; disabled; vendor preset: enabled)\n Active: active (running) since Mon 2021-03-22 13:44:47 EDT; 2s ago\n Main PID: 19114 (fleet)\n Tasks: 5 (limit: 1149)\n Memory: 14.9M\n CGroup: \/system.slice\/fleet.service\n \u2514\u250019114 \/usr\/local\/bin\/fleet serve -c \/etc\/fleet\/fleet.yml\n\nMar 22 13:44:47 debian systemd[1]: fleet.service: Control process exited, code=exited, status=1\/FAILURE\nMar 22 13:44:47 debian fleet[19056]: {\"terminated\":\"http: Server closed\",\"ts\":\"2021-03-22T17:44:47.059951181Z\"}\nMar 22 13:44:47 debian systemd[1]: fleet.service: Failed with result 'exit-code'.\nMar 22 13:44:47 debian systemd[1]: Stopped Fleet Osquery Fleet Manager.\nMar 22 13:44:47 debian systemd[1]: Started Fleet Osquery Fleet Manager.\nMar 22 13:44:47 debian fleet[19114]: Using config file: \/etc\/fleet\/fleet.yml\nMar 22 13:44:47 debian fleet[19114]: {\"component\":\"service\",\"err\":null,\"level\":\"info\",\"method\":\"ListUsers\",\"took\":\"349.023\u00b5s\",\"ts\":\"2021-03-22T17:44:47.121370591Z\",\"user\":\"\nMar 22 13:44:47 debian fleet[19114]: {\"address\":\"0.0.0.0:8080\",\"msg\":\"listening\",\"transport\":\"https\",\"ts\":\"2021-03-22T17:44:47.122012677Z\"}\n<\/code><\/pre>\n\n\n\n
Access Fleet Web Interface<\/h3>\n\n\n\n
ufw allow 8080\/tcp<\/code><\/pre>\n\n\n\n
<\/figure>\n\n\n\n
<\/figure><\/div>\n\n\n
<\/figure>\n\n\n\n
Reference<\/h3>\n\n\n\n
Other Related Tutorials<\/h3>\n\n\n\n