diff --git a/website/integrations/services/wazuh/index.md b/website/integrations/services/wazuh/index.md
index 6d3b12187..fdfdf2ac4 100644
--- a/website/integrations/services/wazuh/index.md
+++ b/website/integrations/services/wazuh/index.md
@@ -1,12 +1,12 @@
---
-title: wazuh.
+title: wazuh.
---
Support level: Community
## What is wazuh
-> wazuh is an open source Security Information and Event Management System that also has (extended) Endpoint Detection & Response (XDR) capabilities, as well as components of a Network Intrusion & Detection System (NIDS).
+> wazuh is an open source Security Information and Event Management System that also has (extended) Endpoint Detection & Response (XDR) capabilities, as well as components of a Network Intrusion & Detection System (NIDS).
>
> -- https://wazuh.com
@@ -21,7 +21,7 @@ The following placeholders will be used:
- `wazuh.company` is the FQDN of the wazuh server instance.
- `authentik.company` is the FQDN of the authentik install.
-While wazuh allows both LDAP and SAML integration, in this post we will only walk through the SAML integration.
+While wazuh allows both LDAP and SAML integration, in this post we will only walk through the SAML integration.
### Step 1 - certificates
@@ -29,7 +29,6 @@ The first step would be to add a certificate for wazuh.
You can generate a new one under `System` -> `Certificates` -> `Generate`
-
Add a name, set the validity period to 365 days and click `Generate`
![](./certificate.png)
@@ -49,19 +48,19 @@ Add a descriptive name, select the appropriate Authentication/Authorization flow
`https:///_opendistro/_security/saml/acs`
-also make sure to give it an appropriate `EntityID` name (`issuer`), you will need that later and a valid option is e.g. `wazuh-saml`
+also make sure to give it an appropriate `EntityID` name (`issuer`), you will need that later and a valid option is e.g. `wazuh-saml`
Select `Post` as the `Service Provider Binding` and move on to the advanced protocol settings.
![](./provider2.png)
-The last step is to select the previously created `Signing Certificate` from the dropdown list and leave the rest of the configurations as default for now.
+The last step is to select the previously created `Signing Certificate` from the dropdown list and leave the rest of the configurations as default for now.
![](./provider3.png)
![](./provider4.png)
![](./provider5.png)
### Step 3 - property mapping
-Time to create a Property Mapping - this is a custom function that takes group/user data from authentik and provides it to wazuh in a structured way.
+Time to create a Property Mapping - this is a custom function that takes group/user data from authentik and provides it to wazuh in a structured way.
We will map a group membership - `wazuh-admins` - as a backend role for RBAC in wazuh using Property Mapping - `Customization` -> `Property Mappings`
@@ -89,13 +88,13 @@ Now create an application to use the newly created provider. `Applications` -> `
`Provider: SAML`
`Policy Engine: any`
-
![](./application.png)
-You can change the UI / upload a logo so that in the applications overview you have a nice layout and can easily identify the new wazuh app.
+You can change the UI / upload a logo so that in the applications overview you have a nice layout and can easily identify the new wazuh app.
![](./applications_overview.png)
### Step 5 - metadata + wazuh opensearch-security configuration
+
Now download the metadata file `saml_authentik_meta.xml` from the `Applications` -> `Provider` -> `Related Objects` -> `Download`
and copy/save it on the wazuh server - ideally under `/etc/wazuh-indexer/opensearch-security/idp-metadata.xml`
@@ -103,12 +102,12 @@ and copy/save it on the wazuh server - ideally under `/etc/wazuh-indexer/opensea
Next up change the `/etc/wazuh-indexer/opensearch-security/config.yml` and make sure it looks like the one below
-- you need to adjust the `metadata_file` if your name differs from the one shown above/below
-- `entity_id` needs to change twice, once in the `idp` section and once in the `sp` section - you can look it up in the metadata xml file - search for `entityID`
-![Alt text](entityid.png)
-- adapt the `kibana_url` to match your wazuh dashboard url - e.g. `https://wazuh.myhomelab.com/`
-- copy/paste the `exchange_key`, you can get it from the metadata file (find the key between the `` tags, it usually starts with MII...) - DO NOT FORGET TO PUT QUOTES AROUND THE CERTIFICATE
-- make sure to adjust the ownership and access rights via the following commands:
+- you need to adjust the `metadata_file` if your name differs from the one shown above/below
+- `entity_id` needs to change twice, once in the `idp` section and once in the `sp` section - you can look it up in the metadata xml file - search for `entityID`
+ ![Alt text](entityid.png)
+- adapt the `kibana_url` to match your wazuh dashboard url - e.g. `https://wazuh.myhomelab.com/`
+- copy/paste the `exchange_key`, you can get it from the metadata file (find the key between the `` tags, it usually starts with MII...) - DO NOT FORGET TO PUT QUOTES AROUND THE CERTIFICATE
+- make sure to adjust the ownership and access rights via the following commands:
```bash
sudo chown wazuh-indexer:wazuh-indexer /etc/wazuh-indexer/opensearch-security/idp-metadata.xml
@@ -124,21 +123,21 @@ authc:
transport_enabled: true b
order: 0
http_authenticator:
- type: basic
+ type: basic
challenge: false
authentication_backend:
- type: intern
+ type: intern
saml_auth_domain:
http_enabled: true
transport_enabled: false
order: 1
http_authenticator:
- type: saml
+ type: saml
challenge: true
- config:
+ config:
idp:
metadata_file: "/etc/wazuh-indexer/opensearch-security/idp-metadata.xml"
- entity_id: "wazuh-saml"
+ entity_id: "wazuh-saml"
sp:
entity_id: "wazuh-saml"
kibana_url: "https://"
@@ -169,51 +168,57 @@ under `backend_roles` add `wazuh-admin` and check that reserved is `false` + the
```yml
all_access:
- reserved: false
- hidden: false
- backend_roles:
- - "wazuh-admin"
- - "admin"
- hosts: []
- users: []
- and_backend_roles: []
- description: "Maps admin to all_access"
+ reserved: false
+ hidden: false
+ backend_roles:
+ - "wazuh-admin"
+ - "admin"
+ hosts: []
+ users: []
+ and_backend_roles: []
+ description: "Maps admin to all_access"
```
save the file and use the securityadmin.sh with the following command to load the adjusted `roles_mapping.yml`:
+
```bash
export JAVA_HOME=/usr/share/wazuh-indexer/jdk/ && bash /usr/share/wazuh-indexer/plugins/opensearch-security/tools/securityadmin.sh -f /etc/wazuh-indexer/opensearch-security/roles_mapping.yml -icl -key /etc/wazuh-indexer/certs/admin-key.pem -cert /etc/wazuh-indexer/certs/admin.pem -cacert /etc/wazuh-indexer/certs/root-ca.pem -h localhost -nhnv
```
If all goes well this shows `Done with success` in the end
-
### Step 8 - wazuh.yml
+
Check `/usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml` and make sure that `run_as` is set to `false`.
![](wazuhyml.png)
### Step 9 - security role mapping
+
open the wazuh dashboard - click on the downward pointing triangle next to the wazuh logo then on `Security` and `Roles mapping`.
![](roles_mapping1.png)
We will now add a new role mapping - add any name + the respective Roles -> in this case administrator and add a new custom rule at the bottom that matches (`FIND`) the `user_name` to `wazuh-admin`.
![](saml-admin.png)
-
### Step 10 - final step - opensearch_dashboards.yml
The last step is to adapt the `/etc/wazuh-dashboard/opensearch_dashboards.yml` and add three lines to the bottom of the file:
```yml
opensearch_security.auth.type: "saml"
-server.xsrf.allowlist: ["/_opendistro/_security/saml/acs", "/_opendistro/_security/saml/logout", "/_opendistro/_security/saml/acs/idpinitiated"]
+server.xsrf.allowlist:
+ [
+ "/_opendistro/_security/saml/acs",
+ "/_opendistro/_security/saml/logout",
+ "/_opendistro/_security/saml/acs/idpinitiated",
+ ]
opensearch_security.session.keepalive: false
```
![](dashboardsyml.png)
-If all went well you should now only have to restart the wazuh dashboard
+If all went well you should now only have to restart the wazuh dashboard
`systemctl restart wazuh-dashboard`
and then you should be greeted by the authentik login screen when you try to connect to the dashboard
-![](login.png)
\ No newline at end of file
+![](login.png)