mirror of
https://github.com/h44z/wg-portal
synced 2025-06-03 19:36:38 +00:00
160 lines
7.9 KiB
Markdown
160 lines
7.9 KiB
Markdown
This section describes the security features available to administrators for hardening WireGuard Portal and protecting its data.
|
|
|
|
## Authentication
|
|
|
|
WireGuard Portal supports multiple authentication methods, including:
|
|
|
|
- Local user accounts
|
|
- LDAP authentication
|
|
- OAuth and OIDC authentication
|
|
- Passkey authentication (WebAuthn)
|
|
|
|
Users can have two roles which limit their permissions in WireGuard Portal:
|
|
|
|
- **User**: Can manage their own account and peers.
|
|
- **Admin**: Can manage all users and peers, including the ability to manage WireGuard interfaces.
|
|
|
|
### Password Security
|
|
|
|
WireGuard Portal supports username and password authentication for both local and LDAP-backed accounts.
|
|
Local users are stored in the database, while LDAP users are authenticated against an external LDAP server.
|
|
|
|
On initial startup, WireGuard Portal automatically creates a local admin account with the password `wgportal-default`.
|
|
> :warning: This password must be changed immediately after the first login.
|
|
|
|
The minimum password length for all local users can be configured in the [`auth`](../configuration/overview.md#auth)
|
|
section of the configuration file. The default value is **16** characters, see [`min_password_length`](../configuration/overview.md#min_password_length).
|
|
The minimum password length is also enforced for the default admin user.
|
|
|
|
|
|
### Passkey (WebAuthn) Authentication
|
|
|
|
Besides the standard authentication mechanisms, WireGuard Portal supports Passkey authentication.
|
|
This feature is enabled by default and can be configured in the [`webauthn`](../configuration/overview.md#webauthn-passkeys) section of the configuration file.
|
|
|
|
Users can register multiple Passkeys to their account. These Passkeys can be used to log in to the web UI as long as the user is not locked.
|
|
> :warning: Passkey authentication does not disable password authentication. The password can still be used to log in (e.g., as a fallback).
|
|
|
|
To register a Passkey, open the settings page *(1)* in the web UI and click on the "Register Passkey" *(2)* button.
|
|
|
|

|
|
|
|
|
|
### OAuth and OIDC Authentication
|
|
|
|
WireGuard Portal supports OAuth and OIDC authentication. You can use any OAuth or OIDC provider that supports the authorization code flow,
|
|
such as Google, GitHub, or Keycloak.
|
|
|
|
For OAuth or OIDC to work, you need to configure the [`external_url`](../configuration/overview.md#external_url) property in the [`web`](../configuration/overview.md#web) section of the configuration file.
|
|
If you are planning to expose the portal to the internet, make sure that the `external_url` is configured to use HTTPS.
|
|
|
|
To add OIDC or OAuth authentication to WireGuard Portal, create a Client-ID and Client-Secret in your OAuth provider and
|
|
configure a new authentication provider in the [`auth`](../configuration/overview.md#auth) section of the configuration file.
|
|
Make sure that each configured provider has a unique `provider_name` property set. Samples can be seen [here](../configuration/examples.md).
|
|
|
|
#### Limiting Login to Specific Domains
|
|
|
|
You can limit the login to specific domains by setting the `allowed_domains` property for OAuth or OIDC providers.
|
|
This property is a comma-separated list of domains that are allowed to log in. The user's email address is checked against this list.
|
|
For example, if you want to allow only users with an email address ending in `outlook.com` to log in, set the property as follows:
|
|
|
|
```yaml
|
|
auth:
|
|
oidc:
|
|
- provider_name: "oidc1"
|
|
# ... other settings
|
|
allowed_domains:
|
|
- "outlook.com"
|
|
```
|
|
|
|
#### Limit Login to Existing Users
|
|
|
|
You can limit the login to existing users only by setting the `registration_enabled` property to `false` for OAuth or OIDC providers.
|
|
If registration is enabled, new users will be created in the database when they log in for the first time.
|
|
|
|
#### Admin Mapping
|
|
|
|
You can map users to admin roles based on their attributes in the OAuth or OIDC provider. To do this, set the `admin_mapping` property for the provider.
|
|
Administrative access can either be mapped by a specific attribute or by group membership.
|
|
|
|
**Attribute specific mapping** can be achieved by setting the `admin_value_regex` and the `is_admin` property.
|
|
The `admin_value_regex` property is a regular expression that is matched against the value of the `is_admin` attribute.
|
|
The user is granted admin access if the regex matches the attribute value.
|
|
|
|
Example:
|
|
```yaml
|
|
auth:
|
|
oidc:
|
|
- provider_name: "oidc1"
|
|
# ... other settings
|
|
field_map:
|
|
is_admin: "wg_admin_prop"
|
|
admin_mapping:
|
|
admin_value_regex: "^true$"
|
|
```
|
|
The example above will grant admin access to users with the `wg_admin_prop` attribute set to `true`.
|
|
|
|
**Group membership mapping** can be achieved by setting the `admin_group_regex` and `user_groups` property.
|
|
The `admin_group_regex` property is a regular expression that is matched against the group names of the user.
|
|
The user is granted admin access if the regex matches any of the group names.
|
|
|
|
Example:
|
|
```yaml
|
|
auth:
|
|
oidc:
|
|
- provider_name: "oidc1"
|
|
# ... other settings
|
|
field_map:
|
|
user_groups: "groups"
|
|
admin_mapping:
|
|
admin_group_regex: "^the-admin-group$"
|
|
```
|
|
The example above will grant admin access to users who are members of the `the-admin-group` group.
|
|
|
|
|
|
### LDAP Authentication
|
|
|
|
WireGuard Portal supports LDAP authentication. You can use any LDAP server that supports the LDAP protocol, such as Active Directory or OpenLDAP.
|
|
Multiple LDAP servers can be configured in the [`auth`](../configuration/overview.md#auth) section of the configuration file.
|
|
WireGuard Portal remembers the authentication provider of the user and therefore avoids conflicts between multiple LDAP providers.
|
|
|
|
To configure LDAP authentication, create a new [`ldap`](../configuration/overview.md#ldap) authentication provider in the [`auth`](../configuration/overview.md#auth) section of the configuration file.
|
|
|
|
#### Limiting Login to Specific Users
|
|
|
|
You can limit the login to specific users by setting the `login_filter` property for LDAP provider. This filter uses the LDAP search filter syntax.
|
|
The username can be inserted into the query by placing the `{{login_identifier}}` placeholder in the filter. This placeholder will then be replaced with the username entered by the user during login.
|
|
|
|
For example, if you want to allow only users with the `objectClass` attribute set to `organizationalPerson` to log in, set the property as follows:
|
|
|
|
```yaml
|
|
auth:
|
|
ldap:
|
|
- provider_name: "ldap1"
|
|
# ... other settings
|
|
login_filter: "(&(objectClass=organizationalPerson)(uid={{login_identifier}}))"
|
|
```
|
|
|
|
The `login_filter` should always be designed to return at most one user.
|
|
|
|
#### Limit Login to Existing Users
|
|
|
|
You can limit the login to existing users only by setting the `registration_enabled` property to `false` for LDAP providers.
|
|
If registration is enabled, new users will be created in the database when they log in for the first time.
|
|
|
|
#### Admin Mapping
|
|
|
|
You can map users to admin roles based on their group membership in the LDAP server. To do this, set the `admin_group` and `memberof` property for the provider.
|
|
The `admin_group` property defines the distinguished name of the group that is allowed to log in as admin.
|
|
All groups that are listed in the `memberof` attribute of the user will be checked against this group. If one of the groups matches, the user is granted admin access.
|
|
|
|
|
|
## UI and API Access
|
|
|
|
WireGuard Portal provides a web UI and a REST API for user interaction. It is important to secure these interfaces to prevent unauthorized access and data breaches.
|
|
|
|
### HTTPS
|
|
It is recommended to use HTTPS for all communication with the portal to prevent eavesdropping.
|
|
|
|
Event though, WireGuard Portal supports HTTPS out of the box, it is recommended to use a reverse proxy like Nginx or Traefik to handle SSL termination and other security features.
|
|
A detailed explanation is available in the [Reverse Proxy](../getting-started/reverse-proxy.md) section. |