| | @@ -0,0 +1,44 @@ |
| + | # Deployment notes |
| + | |
| + | Things worth knowing before you run this somewhere real. The stack was brought up |
| + | and validated end to end on a single host (Wazuh indexer/manager/dashboard + |
| + | TheHive + Cassandra + Elasticsearch + Cortex), with a Linux agent enrolled and SSH |
| + | brute-force alerts flowing through to the dashboard. |
| + | |
| + | ## Credentials |
| + | |
| + | The Wazuh indexer ships with the image's default users (`admin`, `kibanaserver`). |
| + | `.env` sets the passwords the manager and dashboard use to talk to it - keep |
| + | `INDEXER_PASSWORD` aligned with whatever the indexer actually has. For anything |
| + | beyond a lab, change the indexer passwords with the Wazuh password tool and update |
| + | `.env` to match. `config/wazuh/dashboard/wazuh.yml` holds the Wazuh API password the |
| + | dashboard uses for the manager (`wazuh-wui`); set it to your `WAZUH_API_PASSWORD`. |
| + | |
| + | ## Indexer compatibility |
| + | |
| + | Filebeat 7.10 refuses to publish to an indexer that reports an OpenSearch 2.x |
| + | version, so the indexer config sets `compatibility.override_main_response_version: |
| + | true`. Without it the manager produces alerts but nothing reaches the indexer and the |
| + | dashboard stays empty. |
| + | |
| + | ## Running inside an unprivileged LXC |
| + | |
| + | On bare metal or a normal VM the indexer and Elasticsearch lock memory |
| + | (`bootstrap.memory_lock=true`, `memlock: -1`), which is the right production setting |
| + | and what's committed here. Inside an unprivileged LXC container the kernel caps |
| + | locked memory (often 8 MB) and the containers fail to start with an rlimit error. If |
| + | that's your situation, set `bootstrap.memory_lock=false` and cap the `memlock` |
| + | ulimit at the container's limit via a `docker-compose.override.yml` rather than |
| + | editing the committed file. |
| + | |
| + | `vm.max_map_count` must be at least 262144 on the host for the indexer and |
| + | Elasticsearch. On a normal host: `sysctl -w vm.max_map_count=262144`. In an LXC it's |
| + | inherited from the node, so set it on the node. |
| + | |
| + | ## CTI watchlists |
| + | |
| + | The `cti-malicious-*` lists are seeded into the manager by `deploy.sh` after the |
| + | stack is up (CDB lists have to be writable so the manager can compile them, which |
| + | rules out bind-mounting them read-only). In the full setup these lists are owned by |
| + | the [CTI detection pipeline](../../cti-detection-automation), which regenerates and |
| + | promotes them on approval. |