Installation and Configuration

The supported method of installing the dstore software components is using the Ansible role provided by Open-Xchange. This chapter describes the packages, their contents and configuration files for completeness.

Repository

All packages required for dstore are provided in a software repository maintained by Open-Xchange. If you do not have access to this repository, please contact Open-Xchange support.

This repository contains the packages built for the deployment’s operating system version and architecture.

Directories and Files

dstore store its data in /var/lib/dstore by default. Furthermore, unless otherwise specified, all program configuration is in /etc/dstore.

In that configuration directory, there is one configuration file for each service and one global file. This global configuration is called dstore.conf and it contains several settings.

storage-dir:The path to the directory where the data is stored. This can be changed if /var/lib/dstore is not the preferred directory.
hash-split:The number of buckets the data is split into.

Todo

Write about disk-layout and mounting multiple disks under /var/lib/dstore for performance reasons.

tcpdistro

The tcpdistro service accepts a stream of protobuf-encoded messages and stores them to disk. On start-up, it reads dstore.conf and tcpdistro.conf. The latter file contains these settings:

listen-address:The IP and port the service listens on
answer-limit:The maximum number of answer-RRs to store per answer packet

When dstore-alert is used the following settings are relevant:

enable-alerts:Whether or not to enable sending alerts to dstore-alert
alert-address:The address where dstore-alert can receive messages.
alert-tags:Incoming packets with these tags will be sent to dstore-alert

dstore_alert

The dstore_alert service accepts a stream of protobuf-encoded messages and send them to an HTTP endpoint using the OX Protect Notification API. On startup it reads dstore_alert.conf, which contains the following settings:

listen_address:The IP and port the service listens on for PBDNSMessages
alert-listen-address:
 The IP and port the service listens on for PBAlertMessages.
webhook-url:The URL of the Protect Notification Center API Endpoint.
webhook-conns:The maximum number of HTTP connections per webhook thread.
webhook-threads:
 The number of threads to use for webhooks.
webhook-secret:The secret to use when generating the X-Wforce-Signature header
webhook-api-key:
 The value to place in the X-API-Key header.
worker-threads:The number of worker threads to create. Each received message will be passed to a pool of worker theads and processed.
platform-url:The URL of the PDNS Platform Admin API. This is used to download the list of category names and titles.
malware-tags:The tags that indicate that a PBDNSMessage is related to malware.
blacklist-tags:The tags that indicate that a PBDNSMessage is related to blacklisting.

ev_aggregator

See the separate documentation.

egateway

The egateway provides HTTP-based access to the data contained in dstore. It reads both dstore.conf and egateway.conf. The latter file has these options:

listen-address:Specifies the address/port to which egateway should bind to.

dstore-dist

See the separate documentation.

dstore-web

dstore-web is a Django application written in Python 3.6. As Python 3.6 is relatively new with regards to operating system release cycles, dstore-web depends on the rh-python-36 software collection on Red Hat Enterprise Linux based operating systems (including CentOS and Oracle Linux). If these collections are not available in the target environment, Open-Xchange can provide the required packages in the software repository as well.

When installing dstore-web, a system user and group called dstore-web are created, an sqlite3 database for users and audit-logs is created in /var/lib/dstore-web. The dstore-web service runs as this unprivileged user.

Two programs are installed as part of the dstore-web package:

dstore-web:This program is a tool to manage the installation, add and remove users and apply database migrations.
dstore-web-server:
 This program launches the webserver on the configured port. It is invoked by the init-system.

The configuration files are installed into /etc/dstore-web.

gunicorn_config.py

This file configures the dstore-web-server. The defaults included with the installation work well for most installations. However, some tuning or a different listen port might be in order.

The file itself has comments, but some options are described in more detail below.

bind:This option has a python list with all IP addresses and ports where the webserver should listen. It is recommended to listen on the local loopback interface and have a webserver like nginx or Apache in front of dstore-web-server.
workers:This option sets the number of workers that handle connections. By default this is set to twice the number of CPUs in the system.
threads:The number of threads per worker.

settings.py

A Django settings file. This configures the dstore-web application itself. This file contains ample comments that describe the options that can be set.

The most important setting is the EGATEWAY_URL, this should contain the URL to the egateway.

dstore-report-api

dstore-report-api is an application written in Python 3.6, which allows global and per-user information about filtering events to be retrieved using a REST API.

When installing dstore-report-api, a system user and group called dstore-report-api are created. The dstore-report-api service runs as this unprivileged user.

One program is installed as part of the dstore-report-api package:

dstore-report-api-webserver:
 This program launches the webserver on the configured port. It is invoked by the init-system.

The configuration files are installed into /etc/dstore-report-api.

Prometheus metrics are available on the /metrics endpoint; these metrics are stored/retrieved in the directory specified by the RUNTIME_DIRECTORY environment variable, which is set in the dstore-report-api.service file using the RuntimeDirectory directive. This directory is required to be set because dstore-report-api runs under gunicorn, and is multi-process, which means that prometheus stats must be gathered from all processes not just one; the runtime directory is used to store the stats from each process. If this directory is not set or doesn’t exist, the dstore-report-api process will fail to start.

dstore-report-api-web.conf

This file configures the dstore-report-api webserver. The defaults included with the installation work well for most installations. However, some tuning or a different listen port might be in order.

The file itself has comments, but some options are described in more detail below.

bind:This option has a python list with all IP addresses and ports where the webserver should listen. It is recommended to listen on the local loopback interface and have a webserver like nginx or Apache in front of dstore-report-api.
workers:This option sets the number of workers that handle connections. By default this is set to twice the number of CPUs in the system.
threads:The number of threads per worker.

dstore-report-api-instance.conf

A settings file for the dstore-report-api. This configures the dstore-report-api application itself.

By default the file contains the following settings:

ELASTICSEARCH_URL = ["http://127.0.0.1:9200"]
ELASTICSEARCH_TIMEOUT = 1
ELASTICSEARCH_INDEX = "logstash-*"
#ELASTICSEARCH_USER = "elastic"
#ELASTICSEARCH_PASSWORD = "changeme"
AUTH_TOKEN = "secret"
LOG_LEVEL = logging.INFO
LOG_FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'

These are explained as follows:

ELASTICSEARCH_URL:
 This option sets the address of the elasticsearch server where the filtering events are stored. In most cases this and AUTH_PASSWORD are the only two parameters that will need to be changed.
ELASTICSEARCH_TIMEOUT:
 This option controls the timeout between the webs application and the elasticsearch server.
ELASTICSEARCH_INDEX:
 This option controls which index pattern will be used for elasticsearch searches. If the filtering events are stored using a more specific index pattern than the default, then using that will increase the speed of searches and reduce the load on elasticsearch.
ELASTICSEARCH_USER:
 If this option and ELASTICSEARCH_PASSWORD are both set, then they will be used to perform basic authentication against the Elasticsearch server. Both must be set for basic authentication to be performed.
ELASTICSEARCH_PASSWORD:
 The password to use for basic authentication to elasticsearch. The ELASTICSEARCH_USER option must also be set for basic authentication to be performed.
AUTH_TOKEN:This option controls the token used for authorization to the web application REST API, and if set it must be present in the X-API-Key header for all requests.
LOG_LEVEL:This option controls the syslog log level.
LOG_FORMAT:This option controls the log format used for logging.