This page provides an overview of all available configuration options for WireGuard Portal.
You can supply these configurations in a YAML file when starting the Portal. The path of the configuration file defaults to config/config.yaml (or config/config.yml) in the working directory of the executable. It is possible to override the configuration filepath using the environment variable WG_PORTAL_CONFIG. For example: WG_PORTAL_CONFIG=/etc/wg-portal/config.yaml ./wg-portal. Also, environment variable substitution in the config file is supported. Refer to the syntax.
Configuration examples are available on the Examples page.
This page provides an overview of all available configuration options for WireGuard Portal.
You can supply these configurations in a YAML file when starting the Portal. The path of the configuration file defaults to config/config.yaml (or config/config.yml) in the working directory of the executable. It is possible to override the configuration filepath using the environment variable WG_PORTAL_CONFIG. For example: WG_PORTAL_CONFIG=/etc/wg-portal/config.yaml ./wg-portal. Also, environment variable substitution in the config file is supported. Refer to the syntax.
Configuration examples are available on the Examples page.
Description: Passphrase for encrypting sensitive values such as private keys in the database. Encryption is only applied if this passphrase is set. Important: Once you enable encryption by setting this passphrase, you cannot disable it or change it afterward. New or updated records will be encrypted; existing data remains in plaintext until it’s next modified.
Statistics
Controls how WireGuard Portal collects and reports usage statistics, including ping checks and Prometheus metrics.
use_ping_checks
Default:true
Description: Enable periodic ping checks to verify that peers remain responsive.
ping_check_workers
Default:10
Description: Number of parallel worker processes for ping checks.
ping_unprivileged
Default:false
Description: If false, ping checks run without root privileges. This is currently considered BETA.
ping_check_interval
Default:1m
Description: Interval between consecutive ping checks for all peers. Format uses s, m, h, d for seconds, minutes, hours, days, see time.ParseDuration.
data_collection_interval
Default:1m
Description: Interval between data collection cycles (bytes sent/received, handshake times, etc.). Format uses s, m, h, d for seconds, minutes, hours, days, see time.ParseDuration.
collect_interface_data
Default:true
Description: If true, collects interface-level data (bytes in/out) for monitoring and statistics.
collect_peer_data
Default:true
Description: If true, collects peer-level data (bytes, last handshake, endpoint, etc.).
collect_audit_data
Default:true
Description: If true, logs certain portal events (such as user logins) to the database.
listening_address
Default::8787
Description: Address and port for the integrated Prometheus metric server (e.g., :8787 or 127.0.0.1:8787).
Mail
Options for configuring email notifications or sending peer configurations via email.
Description: The default "From" address when sending emails.
link_only
Default:false
Description: If true, emails only contain a link to WireGuard Portal, rather than attaching the full configuration.
Auth
WireGuard Portal supports multiple authentication strategies, including OpenID Connect (oidc), OAuth (oauth), Passkeys (webauthn) and LDAP (ldap). Each can have multiple providers configured. Below are the relevant keys.
Some core authentication options are shared across all providers, while others are specific to each provider type.
min_password_length
Default:16
Description: Minimum password length for local authentication. This is not enforced for LDAP authentication. The default admin password strength is also enforced by this setting.
Important: The password should be strong and secure. It is recommended to use a password with at least 16 characters, including uppercase and lowercase letters, numbers, and special characters.
hide_login_form
Default:false
Description: If true, the login form is hidden and only the OIDC, OAuth, LDAP, or WebAuthn providers are shown. This is useful if you want to enforce a specific authentication method. If no social login providers are configured, the login form is always shown, regardless of this setting.
Important: You can still access the login form by adding the ?all query parameter to the login URL (e.g. https://wg.portal/#/login?all).
OIDC
The oidc array contains a list of OpenID Connect providers. Below are the properties for each OIDC provider entry inside auth.oidc:
provider_name
Default:(empty)
Description: A unique name for this provider. Must not conflict with other providers.
display_name
Default:(empty)
Description: A user-friendly name shown on the login page (e.g., "Login with Google").
base_url
Default:(empty)
Description: The OIDC provider’s base URL (e.g., https://accounts.google.com).
client_id
Default:(empty)
Description: The OAuth client ID from the OIDC provider.
client_secret
Default:(empty)
Description: The OAuth client secret from the OIDC provider.
extra_scopes
Default:(empty)
Description: A list of additional OIDC scopes (e.g., profile, email).
allowed_domains
Default:(empty)
Description: A list of allowlisted domains. Only users with email addresses in these domains can log in or register. This is useful for restricting access to specific organizations or groups.
field_map
Default:(empty)
Description: Maps OIDC claims to WireGuard Portal user fields.
Available fields: user_identifier, email, firstname, lastname, phone, department, is_admin, user_groups.
Field
Typical OIDC Claim
Explanation
user_identifier
sub or preferred_username
A unique identifier for the user. Often the OIDC sub claim is used because it’s guaranteed to be unique for the user within the IdP. Some providers also support preferred_username if it’s unique.
email
email
The user’s email address as provided by the IdP. Not always verified, depending on IdP settings.
firstname
given_name
The user’s first name, typically provided by the IdP in the given_name claim.
lastname
family_name
The user’s last (family) name, typically provided by the IdP in the family_name claim.
phone
phone_number
The user’s phone number. This may require additional scopes/permissions from the IdP to access.
department
Custom claim (e.g., department)
If the IdP can provide organizational data, it may store it in a custom claim. Adjust accordingly (e.g., department, org, or another attribute).
is_admin
Custom claim or derived role
If the IdP returns a role or admin flag, you can map that to is_admin. Often this is managed through custom claims or group membership.
user_groups
groups or another custom claim
A list of group memberships for the user. Some IdPs provide groups out of the box; others require custom claims or directory lookups.
admin_mapping
Default:(empty)
Description: WgPortal can grant a user admin rights by matching the value of the is_admin claim against a regular expression. Alternatively, a regular expression can be used to check if a user is member of a specific group listed in the user_group claim. The regular expressions are defined in admin_value_regex and admin_group_regex.
admin_value_regex: A regular expression to match the is_admin claim. By default, this expression matches the string "true" (^true$).
admin_group_regex: A regular expression to match the user_groups claim. Each entry in the user_groups claim is checked against this regex.
registration_enabled
Default:(empty)
Description: If true, a new user will be created in WireGuard Portal if not already present.
log_user_info
Default:(empty)
Description: If true, OIDC user data is logged at the trace level upon login (for debugging).
OAuth
The oauth array contains a list of plain OAuth2 providers. Below are the properties for each OAuth provider entry inside auth.oauth:
provider_name
Default:(empty)
Description: A unique name for this provider. Must not conflict with other providers.
display_name
Default:(empty)
Description: A user-friendly name shown on the login page.
client_id
Default:(empty)
Description: The OAuth client ID for the provider.
client_secret
Default:(empty)
Description: The OAuth client secret for the provider.
auth_url
Default:(empty)
Description: URL of the authentication endpoint.
token_url
Default:(empty)
Description: URL of the token endpoint.
user_info_url
Default:(empty)
Description: URL of the user information endpoint.
scopes
Default:(empty)
Description: A list of OAuth scopes.
allowed_domains
Default:(empty)
Description: A list of allowlisted domains. Only users with email addresses in these domains can log in or register. This is useful for restricting access to specific organizations or groups.
field_map
Default:(empty)
Description: Maps OAuth attributes to WireGuard Portal fields.
Available fields: user_identifier, email, firstname, lastname, phone, department, is_admin, user_groups.
Field
Typical Claim
Explanation
user_identifier
sub or preferred_username
A unique identifier for the user. Often the OIDC sub claim is used because it’s guaranteed to be unique for the user within the IdP. Some providers also support preferred_username if it’s unique.
email
email
The user’s email address as provided by the IdP. Not always verified, depending on IdP settings.
firstname
given_name
The user’s first name, typically provided by the IdP in the given_name claim.
lastname
family_name
The user’s last (family) name, typically provided by the IdP in the family_name claim.
phone
phone_number
The user’s phone number. This may require additional scopes/permissions from the IdP to access.
department
Custom claim (e.g., department)
If the IdP can provide organizational data, it may store it in a custom claim. Adjust accordingly (e.g., department, org, or another attribute).
is_admin
Custom claim or derived role
If the IdP returns a role or admin flag, you can map that to is_admin. Often this is managed through custom claims or group membership.
user_groups
groups or another custom claim
A list of group memberships for the user. Some IdPs provide groups out of the box; others require custom claims or directory lookups.
admin_mapping
Default:(empty)
Description: WgPortal can grant a user admin rights by matching the value of the is_admin claim against a regular expression. Alternatively, a regular expression can be used to check if a user is member of a specific group listed in the user_group claim. The regular expressions are defined in admin_value_regex and admin_group_regex.
admin_value_regex: A regular expression to match the is_admin claim. By default, this expression matches the string "true" (^true$).
admin_group_regex: A regular expression to match the user_groups claim. Each entry in the user_groups claim is checked against this regex.
registration_enabled
Default:(empty)
Description: If true, new users are created automatically on successful login.
log_user_info
Default:(empty)
Description: If true, logs user info at the trace level upon login.
LDAP
The ldap array contains a list of LDAP authentication providers. Below are the properties for each LDAP provider entry inside auth.ldap:
provider_name
Default:(empty)
Description: A unique name for this provider. Must not conflict with other providers.
url
Default:(empty)
Description: The LDAP server URL (e.g., ldap://srv-ad01.company.local:389).
start_tls
Default:(empty)
Description: If true, use STARTTLS to secure the LDAP connection.
cert_validation
Default:(empty)
Description: If true, validate the LDAP server’s TLS certificate.
tls_certificate_path
Default:(empty)
Description: Path to a TLS certificate if needed for LDAP connections.
tls_key_path
Default:(empty)
Description: Path to the corresponding TLS certificate key.
base_dn
Default:(empty)
Description: The base DN for user searches (e.g., DC=COMPANY,DC=LOCAL).
bind_user
Default:(empty)
Description: The bind user for LDAP (e.g., company\\ldap_wireguard or ldap_wireguard@company.local).
bind_pass
Default:(empty)
Description: The bind password for LDAP authentication.
field_map
Default:(empty)
Description: Maps LDAP attributes to WireGuard Portal fields.
Available fields: user_identifier, email, firstname, lastname, phone, department, memberof.
WireGuard Portal Field
Typical LDAP Attribute
Short Description
user_identifier
sAMAccountName / uid
Uniquely identifies the user within the LDAP directory.
email
mail / userPrincipalName
Stores the user's primary email address.
firstname
givenName
Contains the user's first (given) name.
lastname
sn
Contains the user's last (surname) name.
phone
telephoneNumber / mobile
Holds the user's phone or mobile number.
department
departmentNumber / ou
Specifies the department or organizational unit of the user.
memberof
memberOf
Lists the groups and roles to which the user belongs.
login_filter
Default:(empty)
Description: An LDAP filter to restrict which users can log in. Use {{login_identifier}} to insert the username. For example:
Important: The login_filter must always be a valid LDAP filter. It should at most return one user. If the filter returns multiple or no users, the login will fail.
admin_group
Default:(empty)
Description: A specific LDAP group whose members are considered administrators in WireGuard Portal. For example:
Description: How frequently (in duration, e.g. 30m) to synchronize users from LDAP. Empty or 0 disables sync. Format uses s, m, h, d for seconds, minutes, hours, days, see time.ParseDuration. Only users that match the sync_filter are synchronized, if disable_missing is true, users not found in LDAP are disabled.
sync_filter
Default:(empty)
Description: An LDAP filter to select which users get synchronized into WireGuard Portal. For example:
Description: If true, any user not found in LDAP (during sync) is disabled in WireGuard Portal.
auto_re_enable
Default:(empty)
Description: If true, users that where disabled because they were missing (see disable_missing) will be re-enabled once they are found again.
registration_enabled
Default:(empty)
Description: If true, new user accounts are created in WireGuard Portal upon first login.
log_user_info
Default:(empty)
Description: If true, logs LDAP user data at the trace level upon login.
WebAuthn (Passkeys)
The webauthn section contains configuration options for WebAuthn authentication (passkeys).
enabled
Default:true
Description: If true, Passkey authentication is enabled. If false, WebAuthn is disabled. Users are encouraged to use Passkeys for secure authentication instead of passwords. If a passkey is registered, the password login is still available as a fallback. Ensure that the password is strong and secure.
Web
The web section contains configuration options for the web server, including the listening address, session management, and CSRF protection. It is important to specify a valid external_url for the web server, especially if you are using a reverse proxy. Without a valid external_url, the login process may fail due to CSRF protection.
listening_address
Default::8888
Description: The listening address and port for the web server (e.g., :8888 to bind on all interfaces or 127.0.0.1:8888 to bind only on the loopback interface). Ensure that access to WireGuard Portal is protected against unauthorized access, especially if binding to all interfaces.
external_url
Default:http://localhost:8888
Description: The URL where a client can access WireGuard Portal. This URL is used for generating links in emails and for performing OAUTH redirects. Important: If you are using a reverse proxy, set this to the external URL of the reverse proxy, otherwise login will fail. If you access the portal via IP address, set this to the IP address of the server.
site_company_name
Default:WireGuard Portal
Description: The company name that is shown at the bottom of the web frontend.
site_title
Default:WireGuard Portal
Description: The title that is shown in the web frontend.
session_identifier
Default:wgPortalSession
Description: The session identifier for the web frontend.
session_secret
Default:very_secret
Description: The session secret for the web frontend.
csrf_secret
Default:extremely_secret
Description: The CSRF secret.
request_logging
Default:false
Description: Log all HTTP requests.
expose_host_info
Default:false
Description: Expose the hostname and version of the WireGuard Portal server in an HTTP header. This is useful for debugging but may expose sensitive information.
cert_file
Default:(empty)
Description: (Optional) Path to the TLS certificate file.
key_file
Default:(empty)
Description: (Optional) Path to the TLS certificate key file.
Webhook
The webhook section allows you to configure a webhook that is called on certain events in WireGuard Portal. Further details can be found in the usage documentation.
url
Default:(empty)
Description: The POST endpoint to which the webhook is sent. The URL must be reachable from the WireGuard Portal server. If the URL is empty, the webhook is disabled.
authentication
Default:(empty)
Description: The Authorization header for the webhook endpoint. The value is send as-is in the header. For example: Bearer <token>.
timeout
Default:10s
Description: The timeout for the webhook request. If the request takes longer than this, it is aborted.
\ No newline at end of file
+
disable_missing
Default:(empty)
Description: If true, any user not found in LDAP (during sync) is disabled in WireGuard Portal.
auto_re_enable
Default:(empty)
Description: If true, users that where disabled because they were missing (see disable_missing) will be re-enabled once they are found again.
registration_enabled
Default:(empty)
Description: If true, new user accounts are created in WireGuard Portal upon first login.
log_user_info
Default:(empty)
Description: If true, logs LDAP user data at the trace level upon login.
WebAuthn (Passkeys)
The webauthn section contains configuration options for WebAuthn authentication (passkeys).
enabled
Default:true
Description: If true, Passkey authentication is enabled. If false, WebAuthn is disabled. Users are encouraged to use Passkeys for secure authentication instead of passwords. If a passkey is registered, the password login is still available as a fallback. Ensure that the password is strong and secure.
Web
The web section contains configuration options for the web server, including the listening address, session management, and CSRF protection. It is important to specify a valid external_url for the web server, especially if you are using a reverse proxy. Without a valid external_url, the login process may fail due to CSRF protection.
listening_address
Default::8888
Description: The listening address and port for the web server (e.g., :8888 to bind on all interfaces or 127.0.0.1:8888 to bind only on the loopback interface). Ensure that access to WireGuard Portal is protected against unauthorized access, especially if binding to all interfaces.
external_url
Default:http://localhost:8888
Description: The URL where a client can access WireGuard Portal. This URL is used for generating links in emails and for performing OAUTH redirects. Important: If you are using a reverse proxy, set this to the external URL of the reverse proxy, otherwise login will fail. If you access the portal via IP address, set this to the IP address of the server.
site_company_name
Default:WireGuard Portal
Description: The company name that is shown at the bottom of the web frontend.
site_title
Default:WireGuard Portal
Description: The title that is shown in the web frontend.
session_identifier
Default:wgPortalSession
Description: The session identifier for the web frontend.
session_secret
Default:very_secret
Description: The session secret for the web frontend.
csrf_secret
Default:extremely_secret
Description: The CSRF secret.
request_logging
Default:false
Description: Log all HTTP requests.
expose_host_info
Default:false
Description: Expose the hostname and version of the WireGuard Portal server in an HTTP header. This is useful for debugging but may expose sensitive information.
cert_file
Default:(empty)
Description: (Optional) Path to the TLS certificate file.
key_file
Default:(empty)
Description: (Optional) Path to the TLS certificate key file.
Webhook
The webhook section allows you to configure a webhook that is called on certain events in WireGuard Portal. Further details can be found in the usage documentation.
url
Default:(empty)
Description: The POST endpoint to which the webhook is sent. The URL must be reachable from the WireGuard Portal server. If the URL is empty, the webhook is disabled.
authentication
Default:(empty)
Description: The Authorization header for the webhook endpoint. The value is send as-is in the header. For example: Bearer <token>.
timeout
Default:10s
Description: The timeout for the webhook request. If the request takes longer than this, it is aborted.
\ No newline at end of file
diff --git a/master/documentation/getting-started/binaries/index.html b/master/documentation/getting-started/binaries/index.html
index af8250e..b1729ff 100644
--- a/master/documentation/getting-started/binaries/index.html
+++ b/master/documentation/getting-started/binaries/index.html
@@ -1,6 +1,6 @@
- Binaries - WireGuard Portal
The WireGuard Portal Docker image is available on both Docker Hub and GitHub Container Registry. It is built on the official Alpine Linux base image and comes pre-packaged with all necessary WireGuard dependencies.
This container allows you to establish WireGuard VPN connections without relying on a host system that supports WireGuard or using the linuxserver/wireguard Docker image.
The recommended method for deploying WireGuard Portal is via Docker Compose for ease of configuration and management.
A sample docker-compose.yml (managing WireGuard interfaces directly on the host) is provided below:
The WireGuard Portal Docker image is available on both Docker Hub and GitHub Container Registry. It is built on the official Alpine Linux base image and comes pre-packaged with all necessary WireGuard dependencies.
This container allows you to establish WireGuard VPN connections without relying on a host system that supports WireGuard or using the linuxserver/wireguard Docker image.
The recommended method for deploying WireGuard Portal is via Docker Compose for ease of configuration and management.
A sample docker-compose.yml (managing WireGuard interfaces directly on the host) is provided below:
Version 2 is the current stable release. Version 1 has moved to legacy status and is no longer recommended.
There are three types of tags in the repository:
Semantic versioned tags
For example, 2.0.0-rc.1 or v2.0.0-rc.1.
These are official releases of WireGuard Portal. For production deployments of WireGuard Portal, we strongly recommend using one of these versioned tags instead of the latest or canary tags.
There are different types of these tags:
Major version tags: v2 or 2. These tags always refer to the latest image for WireGuard Portal version 2.
Minor version tags: v2.x or 2.0. These tags always refer to the latest image for WireGuard Portal version 2.x.
Specific version tags (patch version): v2.0.0 or 2.0.0. These tags denote a very specific release. They correspond to the GitHub tags that we make, and you can see the release notes for them here: https://github.com/h44z/wg-portal/releases. Once these tags for a specific version show up in the Docker repository, they will never change.
The latest tag
The lastest tag is the latest stable release of WireGuard Portal. For version 2, this is the same as the v2 tag.
The master tag
This is the most recent build to the main branch! It changes a lot and is very unstable.
We recommend that you don't use it except for development purposes or to test the latest features.
Configuration
You can configure WireGuard Portal using a YAML configuration file. The filepath of the YAML configuration file defaults to /app/config/config.yaml. It is possible to override the configuration filepath using the environment variable WG_PORTAL_CONFIG.
By default, WireGuard Portal uses an SQLite database. The database is stored in /app/data/sqlite.db.
You should mount those directories as a volume:
/app/data
/app/config
A detailed description of the configuration options can be found here.
If you want to access configuration files in wg-quick format, you can mount the /etc/wireguard directory inside the container to a location of your choice. Also enable the config_storage_path option in the configuration file:
advanced:config_storage_path:/etc/wireguard
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/master/documentation/getting-started/helm/index.html b/master/documentation/getting-started/helm/index.html
index 8952e72..d247fa7 100644
--- a/master/documentation/getting-started/helm/index.html
+++ b/master/documentation/getting-started/helm/index.html
@@ -1,2 +1,2 @@
- Helm - WireGuard Portal
This command deploy wg-portal on the Kubernetes cluster in the default configuration. The Values section lists the parameters that can be configured during installation.
Core configuration options. If external admins in auth are defined and there are no admin_user and admin_password defined here, the default admin account will be disabled.
Web configuration options. listening_address will be set automatically from service.web.port. external_url is required to enable ingress and certificate resources.
revisionHistoryLimit
string
10
The number of old ReplicaSets to retain to allow rollback.
workloadType
string
"Deployment"
Workload type - Deployment or StatefulSet
strategy
object
{"type":"RollingUpdate"}
Update strategy for the workload Valid values are: RollingUpdate or Recreate for Deployment, RollingUpdate or OnDelete for StatefulSet
image.repository
string
"ghcr.io/h44z/wg-portal"
Image repository
image.pullPolicy
string
"IfNotPresent"
Image pull policy
image.tag
string
""
Overrides the image tag whose default is the chart appVersion
imagePullSecrets
list
[]
Image pull secrets
podAnnotations
tpl/object
{}
Extra annotations to add to the pod
podLabels
object
{}
Extra labels to add to the pod
podSecurityContext
object
{}
Pod Security Context
securityContext.capabilities.add
list
["NET_ADMIN"]
Add capabilities to the container
initContainers
tpl/list
[]
Pod init containers
sidecarContainers
tpl/list
[]
Pod sidecar containers
dnsPolicy
string
"ClusterFirst"
Set DNS policy for the pod. Valid values are ClusterFirstWithHostNet, ClusterFirst, Default or None.
restartPolicy
string
"Always"
Restart policy for all containers within the pod. Valid values are Always, OnFailure or Never.
hostNetwork
string
false.
Use the host's network namespace.
resources
object
{}
Resources requests and limits
command
list
[]
Overwrite pod command
args
list
[]
Additional pod arguments
env
tpl/list
[]
Additional environment variables
envFrom
tpl/list
[]
Additional environment variables from a secret or configMap
livenessProbe
object
{}
Liveness probe configuration
readinessProbe
object
{}
Readiness probe configuration
startupProbe
object
{}
Startup probe configuration
volumes
tpl/list
[]
Additional volumes
volumeMounts
tpl/list
[]
Additional volumeMounts
nodeSelector
object
{"kubernetes.io/os":"linux"}
Node Selector configuration
tolerations
list
[]
Tolerations configuration
affinity
object
{}
Affinity configuration
service.mixed.enabled
bool
false
Whether to create a single service for the web and wireguard interfaces
service.mixed.type
string
"LoadBalancer"
Service type
service.web.annotations
object
{}
Annotations for the web service
service.web.type
string
"ClusterIP"
Web service type
service.web.port
int
8888
Web service port Used for the web interface listener
service.web.appProtocol
string
"http"
Web service appProtocol. Will be auto set to https if certificate is enabled.
service.wireguard.annotations
object
{}
Annotations for the WireGuard service
service.wireguard.type
string
"LoadBalancer"
Wireguard service type
service.wireguard.ports
list
[51820]
Wireguard service ports. Exposes the WireGuard ports for created interfaces. Lowerest port is selected as start port for the first interface. Increment next port by 1 for each additional interface.
service.metrics.port
int
8787
ingress.enabled
bool
false
Specifies whether an ingress resource should be created
ingress.className
string
""
Ingress class name
ingress.annotations
object
{}
Ingress annotations
ingress.tls
bool
false
Ingress TLS configuration. Enable certificate resource or add ingress annotation to create required secret
certificate.enabled
bool
false
Specifies whether a certificate resource should be created. If enabled, certificate will be used for the web.
This command deploy wg-portal on the Kubernetes cluster in the default configuration. The Values section lists the parameters that can be configured during installation.
Core configuration options. If external admins in auth are defined and there are no admin_user and admin_password defined here, the default admin account will be disabled.
Web configuration options. listening_address will be set automatically from service.web.port. external_url is required to enable ingress and certificate resources.
revisionHistoryLimit
string
10
The number of old ReplicaSets to retain to allow rollback.
workloadType
string
"Deployment"
Workload type - Deployment or StatefulSet
strategy
object
{"type":"RollingUpdate"}
Update strategy for the workload Valid values are: RollingUpdate or Recreate for Deployment, RollingUpdate or OnDelete for StatefulSet
image.repository
string
"ghcr.io/h44z/wg-portal"
Image repository
image.pullPolicy
string
"IfNotPresent"
Image pull policy
image.tag
string
""
Overrides the image tag whose default is the chart appVersion
imagePullSecrets
list
[]
Image pull secrets
podAnnotations
tpl/object
{}
Extra annotations to add to the pod
podLabels
object
{}
Extra labels to add to the pod
podSecurityContext
object
{}
Pod Security Context
securityContext.capabilities.add
list
["NET_ADMIN"]
Add capabilities to the container
initContainers
tpl/list
[]
Pod init containers
sidecarContainers
tpl/list
[]
Pod sidecar containers
dnsPolicy
string
"ClusterFirst"
Set DNS policy for the pod. Valid values are ClusterFirstWithHostNet, ClusterFirst, Default or None.
restartPolicy
string
"Always"
Restart policy for all containers within the pod. Valid values are Always, OnFailure or Never.
hostNetwork
string
false.
Use the host's network namespace.
resources
object
{}
Resources requests and limits
command
list
[]
Overwrite pod command
args
list
[]
Additional pod arguments
env
tpl/list
[]
Additional environment variables
envFrom
tpl/list
[]
Additional environment variables from a secret or configMap
livenessProbe
object
{}
Liveness probe configuration
readinessProbe
object
{}
Readiness probe configuration
startupProbe
object
{}
Startup probe configuration
volumes
tpl/list
[]
Additional volumes
volumeMounts
tpl/list
[]
Additional volumeMounts
nodeSelector
object
{"kubernetes.io/os":"linux"}
Node Selector configuration
tolerations
list
[]
Tolerations configuration
affinity
object
{}
Affinity configuration
service.mixed.enabled
bool
false
Whether to create a single service for the web and wireguard interfaces
service.mixed.type
string
"LoadBalancer"
Service type
service.web.annotations
object
{}
Annotations for the web service
service.web.type
string
"ClusterIP"
Web service type
service.web.port
int
8888
Web service port Used for the web interface listener
service.web.appProtocol
string
"http"
Web service appProtocol. Will be auto set to https if certificate is enabled.
service.wireguard.annotations
object
{}
Annotations for the WireGuard service
service.wireguard.type
string
"LoadBalancer"
Wireguard service type
service.wireguard.ports
list
[51820]
Wireguard service ports. Exposes the WireGuard ports for created interfaces. Lowerest port is selected as start port for the first interface. Increment next port by 1 for each additional interface.
service.metrics.port
int
8787
ingress.enabled
bool
false
Specifies whether an ingress resource should be created
ingress.className
string
""
Ingress class name
ingress.annotations
object
{}
Ingress annotations
ingress.tls
bool
false
Ingress TLS configuration. Enable certificate resource or add ingress annotation to create required secret
certificate.enabled
bool
false
Specifies whether a certificate resource should be created. If enabled, certificate will be used for the web.
For production deployments, always serve the WireGuard Portal over HTTPS. You have two options to secure your connection:
Reverse Proxy
Let a front‐end proxy handle HTTPS for you. This also frees you from managing certificates manually and is therefore the preferred option. You can use Nginx, Traefik, Caddy or any other proxy.
Below is an example using a Docker Compose stack with Traefik. It exposes the WireGuard Portal on https://wg.domain.com and redirects initial HTTP traffic to HTTPS.
For production deployments, always serve the WireGuard Portal over HTTPS. You have two options to secure your connection:
Reverse Proxy
Let a front‐end proxy handle HTTPS for you. This also frees you from managing certificates manually and is therefore the preferred option. You can use Nginx, Traefik, Caddy or any other proxy.
Below is an example using a Docker Compose stack with Traefik. It exposes the WireGuard Portal on https://wg.domain.com and redirects initial HTTP traffic to HTTPS.
If you prefer to let WireGuard Portal handle TLS itself, you can use the built-in TLS support. In your config.yaml, under the web section, point to your certificate and key files:
By default, WG-Portal exposes Prometheus metrics on port 8787 if interface/peer statistic data collection is enabled.
Exposed Metrics
Metric
Type
Description
wireguard_interface_received_bytes_total
gauge
Bytes received through the interface.
wireguard_interface_sent_bytes_total
gauge
Bytes sent through the interface.
wireguard_peer_last_handshake_seconds
gauge
Seconds from the last handshake with the peer.
wireguard_peer_received_bytes_total
gauge
Bytes received from the peer.
wireguard_peer_sent_bytes_total
gauge
Bytes sent to the peer.
wireguard_peer_up
gauge
Peer connection state (boolean: 1/0).
Prometheus Config
Add the following scrape job to your Prometheus config file:
# prometheus.yamlscrape_configs:-job_name:wg-portalscrape_interval:60sstatic_configs:-targets:-localhost:8787# Change localhost to IP Address or hostname with WG-Portal
-
Grafana Dashboard
You may import dashboard.json into your Grafana instance.
\ No newline at end of file
+
Grafana Dashboard
You may import dashboard.json into your Grafana instance.
\ No newline at end of file
diff --git a/master/documentation/overview/index.html b/master/documentation/overview/index.html
index 59cfa34..b22f14c 100644
--- a/master/documentation/overview/index.html
+++ b/master/documentation/overview/index.html
@@ -1 +1 @@
- Overview - WireGuard Portal
WireGuard Portal is a simple, web-based configuration portal for WireGuard server management. The portal uses the WireGuard wgctrl library to manage existing VPN interfaces. This allows for the seamless activation or deactivation of new users without disturbing existing VPN connections.
The configuration portal supports using a database (SQLite, MySQL, MsSQL, or Postgres), OAuth or LDAP (Active Directory or OpenLDAP) as a user source for authentication and profile data.
Features
Self-hosted - the whole application is a single binary
Responsive multi-language web UI written in Vue.js
Automatically selects IP from the network pool assigned to the client
QR-Code for convenient mobile client configuration
Sends email to the client with QR-code and client config
Enable / Disable clients seamlessly
Generation of wg-quick configuration file (wgX.conf) if required
User authentication (database, OAuth, or LDAP), Passkey support
IPv6 ready
Docker ready
Can be used with existing WireGuard setups
Support for multiple WireGuard interfaces
Supports multiple WireGuard backends (wgctrl or MikroTik [BETA])
Peer Expiry Feature
Handles route and DNS settings like wg-quick does
Exposes Prometheus metrics for monitoring and alerting
REST API for management and client deployment
Webhook for custom actions on peer, interface, or user updates
\ No newline at end of file
+ Overview - WireGuard Portal
WireGuard Portal is a simple, web-based configuration portal for WireGuard server management. The portal uses the WireGuard wgctrl library to manage existing VPN interfaces. This allows for the seamless activation or deactivation of new users without disturbing existing VPN connections.
The configuration portal supports using a database (SQLite, MySQL, MsSQL, or Postgres), OAuth or LDAP (Active Directory or OpenLDAP) as a user source for authentication and profile data.
Features
Self-hosted - the whole application is a single binary
Responsive multi-language web UI with dark-mode written in Vue.js
Automatically selects IP from the network pool assigned to the client
QR-Code for convenient mobile client configuration
Sends email to the client with QR-code and client config
Enable / Disable clients seamlessly
Generation of wg-quick configuration file (wgX.conf) if required
User authentication (database, OAuth, or LDAP), Passkey support
IPv6 ready
Docker ready
Can be used with existing WireGuard setups
Support for multiple WireGuard interfaces
Supports multiple WireGuard backends (wgctrl or MikroTik)
Peer Expiry Feature
Handles route and DNS settings like wg-quick does
Exposes Prometheus metrics for monitoring and alerting
REST API for management and client deployment
Webhook for custom actions on peer, interface, or user updates
\ No newline at end of file
diff --git a/master/documentation/rest-api/api-doc/index.html b/master/documentation/rest-api/api-doc/index.html
index d29a3cc..773a6e2 100644
--- a/master/documentation/rest-api/api-doc/index.html
+++ b/master/documentation/rest-api/api-doc/index.html
@@ -1,5 +1,5 @@
- REST API - WireGuard Portal
Major upgrades between different versions may require special procedures, which are described in the following sections.
Upgrade from v1 to v2
Before upgrading from V1, make sure that you have a backup of your currently working configuration files and database!
To start the upgrade process, start the wg-portal binary with the -migrateFrom parameter. The configuration (config.yaml) for WireGuard Portal must be updated and valid before starting the upgrade.
To upgrade from a previous SQLite database, start wg-portal like:
Major upgrades between different versions may require special procedures, which are described in the following sections.
Upgrade from v1 to v2
Before upgrading from V1, make sure that you have a backup of your currently working configuration files and database!
To start the upgrade process, start the wg-portal binary with the -migrateFrom parameter. The configuration (config.yaml) for WireGuard Portal must be updated and valid before starting the upgrade.
To upgrade from a previous SQLite database, start wg-portal like:
./wg-portal-amd64-migrateFrom=old_wg_portal.db
You can also specify the database type using the parameter -migrateFromType. Supported database types: mysql, mssql, postgres or sqlite.
The upgrade will transform the old, existing database and store the values in the new database specified in the config.yaml configuration file. Ensure that the new database does not contain any data!
If you are using Docker, you can adapt the docker-compose.yml file to start the upgrade process:
services:wg-portal:
@@ -6,4 +6,4 @@
# ... other settingsrestart:nocommand:["-migrateFrom=/app/data/old_wg_portal.db"]
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/master/documentation/usage/backends/index.html b/master/documentation/usage/backends/index.html
index 6e99394..bc6baca 100644
--- a/master/documentation/usage/backends/index.html
+++ b/master/documentation/usage/backends/index.html
@@ -1,4 +1,4 @@
- Backends - WireGuard Portal
WireGuard Portal can manage WireGuard interfaces and peers on different backends. Each backend represents a system where interfaces actually live. You can register multiple backends and choose which one to use per interface. A global default backend determines where newly created interfaces go (unless you explicitly choose another in the UI).
Supported backends: - Local (default): Manages interfaces on the host running WireGuard Portal (Linux WireGuard via wgctrl). Use this when the portal should directly configure wg devices on the same server. - MikroTik RouterOS (beta): Manages interfaces and peers on MikroTik devices via the RouterOS REST API. Use this to control WG interfaces on RouterOS v7+.
How backend selection works: - The default backend is configured at backend.default (local or the id of a defined MikroTik backend). New interfaces created in the UI will use this backend by default. - Each interface stores its backend. You can select a different backend when creating a new interface.
Configuring MikroTik backends (RouterOS v7+)
The MikroTik backend is currently marked beta. While basic functionality is implemented, some advanced features are not yet implemented or contain bugs. Please test carefully before using in production.
The MikroTik backend uses the REST API under a base URL ending with /rest. You can register one or more MikroTik devices as backends for a single WireGuard Portal instance.
Prerequisites on MikroTik:
RouterOS v7 with WireGuard support.
REST API enabled and reachable over HTTP(S). A typical base URL is https://:8729/rest or https:///rest depending on your service setup.
A dedicated RouterOS user with the following group permissions:
api (for logging in via REST API)
rest-api (for logging in via REST API)
read (to read interface and peer data)
write (to create/update interfaces and peers)
test (to perform ping checks)
sensitive (to read private keys)
TLS certificate on the device is recommended. If you use a self-signed certificate during testing, set api_verify_tls: false in wg-portal (not recommended for production).
Example WireGuard Portal configuration (config/config.yaml):
WireGuard Portal can manage WireGuard interfaces and peers on different backends. Each backend represents a system where interfaces actually live. You can register multiple backends and choose which one to use per interface. A global default backend determines where newly created interfaces go (unless you explicitly choose another in the UI).
Supported backends: - Local (default): Manages interfaces on the host running WireGuard Portal (Linux WireGuard via wgctrl). Use this when the portal should directly configure wg devices on the same server. - MikroTik RouterOS (beta): Manages interfaces and peers on MikroTik devices via the RouterOS REST API. Use this to control WG interfaces on RouterOS v7+.
How backend selection works: - The default backend is configured at backend.default (local or the id of a defined MikroTik backend). New interfaces created in the UI will use this backend by default. - Each interface stores its backend. You can select a different backend when creating a new interface.
Configuring MikroTik backends (RouterOS v7+)
The MikroTik backend is currently marked beta. While basic functionality is implemented, some advanced features are not yet implemented or contain bugs. Please test carefully before using in production.
The MikroTik backend uses the REST API under a base URL ending with /rest. You can register one or more MikroTik devices as backends for a single WireGuard Portal instance.
Prerequisites on MikroTik:
RouterOS v7 with WireGuard support.
REST API enabled and reachable over HTTP(S). A typical base URL is https://:8729/rest or https:///rest depending on your service setup.
A dedicated RouterOS user with the following group permissions:
api (for logging in via REST API)
rest-api (for logging in via REST API)
read (to read interface and peer data)
write (to create/update interfaces and peers)
test (to perform ping checks)
sensitive (to read private keys)
TLS certificate on the device is recommended. If you use a self-signed certificate during testing, set api_verify_tls: false in wg-portal (not recommended for production).
Example WireGuard Portal configuration (config/config.yaml):
backend:# default backend decides where new interfaces are createddefault:mikrotik-prod
@@ -12,4 +12,4 @@
api_timeout:30s# maximum request durationconcurrency:5# limit parallel REST calls to devicedebug:false# verbose logging for this backend
-
Known limitations:
The MikroTik backend is still in beta. Some features may not work as expected.
Not all WireGuard Portal features are supported yet (e.g., no support for interface hooks)
\ No newline at end of file
+
Known limitations:
The MikroTik backend is still in beta. Some features may not work as expected.
Not all WireGuard Portal features are supported yet (e.g., no support for interface hooks)
\ No newline at end of file
diff --git a/master/documentation/usage/general/index.html b/master/documentation/usage/general/index.html
index bb9825e..f8834e6 100644
--- a/master/documentation/usage/general/index.html
+++ b/master/documentation/usage/general/index.html
@@ -1,2 +1,2 @@
- General - WireGuard Portal
This documentation section describes the general usage of WireGuard Portal. If you are looking for specific setup instructions, please refer to the Getting Started and Configuration sections, for example, using a Docker deployment.
Basic Concepts
WireGuard Portal is a web-based configuration portal for WireGuard server management. It allows managing multiple WireGuard interfaces and users from a single web UI. WireGuard Interfaces can be categorized into three types:
Server: A WireGuard server interface that to which multiple peers can connect. In this mode, it is possible to specify default settings for all peers, such as the IP address range, DNS servers, and MTU size.
Client: A WireGuard client interface that can be used to connect to a WireGuard server. Usually, such an interface has exactly one peer.
Unknown: This is the default type for imported interfaces. It is encouraged to change the type to either Server or Client after importing the interface.
Accessing the Web UI
The web UI should be accessed via the URL specified in the external_url property of the configuration file. By default, WireGuard Portal listens on port 8888 for HTTP connections. Check the Security section for more information on securing the web UI.
So the default URL to access the web UI is:
http://localhost:8888
-
A freshly set-up WireGuard Portal instance will have a default admin user with the username admin@wgportal.local and the password wgportal-default. You can and should override the default credentials in the configuration file. Make sure to change the default password immediately after the first login!
Basic UI Description
As seen in the screenshot above, the web UI is divided into several sections which are accessible via the navigation bar on the top of the screen.
Home: The landing page of WireGuard Portal. It provides a staring point for the user to access the different sections of the web UI. It also provides quick links to WireGuard Client downloads or official documentation.
Interfaces: This section allows you to manage the WireGuard interfaces. You can add, edit, or delete interfaces, as well as view their status and statistics. Peers for each interface can be managed here as well.
Users: This section allows you to manage the users of WireGuard Portal. You can add, edit, or delete users, as well as view their status and statistics.
Key Generator: This section allows you to generate WireGuard keys locally on your browser. The generated keys are never sent to the server. This is useful if you want to generate keys for a new peer without having to store the private keys in the database.
Profile / Settings: This section allows you to access your own profile page, settings, and audit logs.
Interface View
The interface view provides an overview of the WireGuard interfaces and peers configured in WireGuard Portal.
The most important elements are:
Interface Selector: This dropdown allows you to select the WireGuard interface you want to manage. All further actions will be performed on the selected interface.
Create new Interface: This button allows you to create a new WireGuard interface.
Interface Overview: This section provides an overview of the selected WireGuard interface. It shows the interface type, number of peers, and other important information.
List of Peers: This section provides a list of all peers associated with the selected WireGuard interface. You can view, add, edit, or delete peers from this list.
Add new Peer: This button allows you to add a new peer to the selected WireGuard interface.
Add multiple Peers: This button allows you to add multiple peers to the selected WireGuard interface. This is useful if you want to add a large number of peers at once.
\ No newline at end of file
+ General - WireGuard Portal
This documentation section describes the general usage of WireGuard Portal. If you are looking for specific setup instructions, please refer to the Getting Started and Configuration sections, for example, using a Docker deployment.
Basic Concepts
WireGuard Portal is a web-based configuration portal for WireGuard server management. It allows managing multiple WireGuard interfaces and users from a single web UI. WireGuard Interfaces can be categorized into three types:
Server: A WireGuard server interface that to which multiple peers can connect. In this mode, it is possible to specify default settings for all peers, such as the IP address range, DNS servers, and MTU size.
Client: A WireGuard client interface that can be used to connect to a WireGuard server. Usually, such an interface has exactly one peer.
Unknown: This is the default type for imported interfaces. It is encouraged to change the type to either Server or Client after importing the interface.
Accessing the Web UI
The web UI should be accessed via the URL specified in the external_url property of the configuration file. By default, WireGuard Portal listens on port 8888 for HTTP connections. Check the Security section for more information on securing the web UI.
So the default URL to access the web UI is:
http://localhost:8888
+
A freshly set-up WireGuard Portal instance will have a default admin user with the username admin@wgportal.local and the password wgportal-default. You can and should override the default credentials in the configuration file. Make sure to change the default password immediately after the first login!
Basic UI Description
As seen in the screenshot above, the web UI is divided into several sections which are accessible via the navigation bar on the top of the screen.
Home: The landing page of WireGuard Portal. It provides a staring point for the user to access the different sections of the web UI. It also provides quick links to WireGuard Client downloads or official documentation.
Interfaces: This section allows you to manage the WireGuard interfaces. You can add, edit, or delete interfaces, as well as view their status and statistics. Peers for each interface can be managed here as well.
Users: This section allows you to manage the users of WireGuard Portal. You can add, edit, or delete users, as well as view their status and statistics.
Key Generator: This section allows you to generate WireGuard keys locally on your browser. The generated keys are never sent to the server. This is useful if you want to generate keys for a new peer without having to store the private keys in the database.
Profile / Settings: This section allows you to access your own profile page, settings, and audit logs.
Interface View
The interface view provides an overview of the WireGuard interfaces and peers configured in WireGuard Portal.
The most important elements are:
Interface Selector: This dropdown allows you to select the WireGuard interface you want to manage. All further actions will be performed on the selected interface.
Create new Interface: This button allows you to create a new WireGuard interface.
Interface Overview: This section provides an overview of the selected WireGuard interface. It shows the interface type, number of peers, and other important information.
List of Peers: This section provides a list of all peers associated with the selected WireGuard interface. You can view, add, edit, or delete peers from this list.
Add new Peer: This button allows you to add a new peer to the selected WireGuard interface.
Add multiple Peers: This button allows you to add multiple peers to the selected WireGuard interface. This is useful if you want to add a large number of peers at once.
\ No newline at end of file
diff --git a/master/documentation/usage/ldap/index.html b/master/documentation/usage/ldap/index.html
index 63af4e9..ea702fb 100644
--- a/master/documentation/usage/ldap/index.html
+++ b/master/documentation/usage/ldap/index.html
@@ -1,6 +1,6 @@
- LDAP - WireGuard Portal
WireGuard Portal lets you hook up any LDAP server such as Active Directory or OpenLDAP for both authentication and user sync. You can even register multiple LDAP servers side-by-side. When someone logs in via LDAP, their specific provider is remembered, so there's no risk of cross-provider conflicts. Details on the log-in process can be found in the Security documentation.
If you enable LDAP synchronization, all users within the LDAP directory will be created automatically in the WireGuard Portal database if they do not exist. If a user is disabled or deleted in LDAP, the user will be disabled in WireGuard Portal as well. The synchronization process can be fine-tuned by multiple parameters, which are described below.
LDAP Synchronization
WireGuard Portal can automatically synchronize users from LDAP to the database. To enable this feature, set the sync_interval property in the LDAP provider configuration to a value greater than "0". The value is a string representing a duration, such as "15m" for 15 minutes or "1h" for 1 hour (check the exact format definition for details). The synchronization process will run in the background and synchronize users from LDAP to the database at the specified interval. Also make sure that the sync_filter property is a well-formed LDAP filter, or synchronization will fail.
Limiting Synchronization to Specific Users
Use the sync_filter property in your LDAP provider block to restrict which users get synchronized. It accepts any valid LDAP search filter, only entries matching that filter will be pulled into the portal's database.
For example, to import only users with a mail attribute:
WireGuard Portal lets you hook up any LDAP server such as Active Directory or OpenLDAP for both authentication and user sync. You can even register multiple LDAP servers side-by-side. When someone logs in via LDAP, their specific provider is remembered, so there's no risk of cross-provider conflicts. Details on the log-in process can be found in the Security documentation.
If you enable LDAP synchronization, all users within the LDAP directory will be created automatically in the WireGuard Portal database if they do not exist. If a user is disabled or deleted in LDAP, the user will be disabled in WireGuard Portal as well. The synchronization process can be fine-tuned by multiple parameters, which are described below.
LDAP Synchronization
WireGuard Portal can automatically synchronize users from LDAP to the database. To enable this feature, set the sync_interval property in the LDAP provider configuration to a value greater than "0". The value is a string representing a duration, such as "15m" for 15 minutes or "1h" for 1 hour (check the exact format definition for details). The synchronization process will run in the background and synchronize users from LDAP to the database at the specified interval. Also make sure that the sync_filter property is a well-formed LDAP filter, or synchronization will fail.
Limiting Synchronization to Specific Users
Use the sync_filter property in your LDAP provider block to restrict which users get synchronized. It accepts any valid LDAP search filter, only entries matching that filter will be pulled into the portal's database.
For example, to import only users with a mail attribute:
auth:ldap:-id:ldap# ... other settingssync_filter:(mail=*)
-
Disable Missing Users
If you set the disable_missing property to true, any user that is not found in LDAP during synchronization will be disabled in WireGuard Portal. All peers associated with that user will also be disabled.
If you want a user and its peers to be automatically re-enabled once they are found in LDAP again, set the auto_re_enable property to true. This will only re-enable the user if they where disabled by the synchronization process. Manually disabled users will not be re-enabled.
\ No newline at end of file
+
Disable Missing Users
If you set the disable_missing property to true, any user that is not found in LDAP during synchronization will be disabled in WireGuard Portal. All peers associated with that user will also be disabled.
If you want a user and its peers to be automatically re-enabled once they are found in LDAP again, set the auto_re_enable property to true. This will only re-enable the user if they where disabled by the synchronization process. Manually disabled users will not be re-enabled.
\ No newline at end of file
diff --git a/master/documentation/usage/security/index.html b/master/documentation/usage/security/index.html
index c797ff1..a503e34 100644
--- a/master/documentation/usage/security/index.html
+++ b/master/documentation/usage/security/index.html
@@ -1,4 +1,4 @@
- Security - WireGuard Portal
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.
This password must be changed immediately after the first login.
The minimum password length for all local users can be configured in the auth section of the configuration file. The default value is 16 characters, see 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 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.
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 property in the 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 section of the configuration file. Make sure that each configured provider has a unique provider_name property set. Samples can be seen here.
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:
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.
This password must be changed immediately after the first login.
The minimum password length for all local users can be configured in the auth section of the configuration file. The default value is 16 characters, see 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 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.
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 property in the 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 section of the configuration file. Make sure that each configured provider has a unique provider_name property set. Samples can be seen here.
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:
auth:oidc:-provider_name:"oidc1"# ... other settings
@@ -25,4 +25,4 @@
-provider_name:"ldap1"# ... other settingslogin_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 section.
\ No newline at end of file
+
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 section.
\ No newline at end of file
diff --git a/master/documentation/usage/webhooks/index.html b/master/documentation/usage/webhooks/index.html
index 3ef9a7b..e85c84f 100644
--- a/master/documentation/usage/webhooks/index.html
+++ b/master/documentation/usage/webhooks/index.html
@@ -1,4 +1,4 @@
- Webhooks - WireGuard Portal
Webhooks allow WireGuard Portal to notify external services about events such as user creation, device changes, or configuration updates. This enables integration with other systems and automation workflows.
When webhooks are configured and a specified event occurs, WireGuard Portal sends an HTTP POST request to the configured webhook URL. The payload contains event-specific data in JSON format.
Configuration
All available configuration options for webhooks can be found in the configuration overview.
Webhooks allow WireGuard Portal to notify external services about events such as user creation, device changes, or configuration updates. This enables integration with other systems and automation workflows.
When webhooks are configured and a specified event occurs, WireGuard Portal sends an HTTP POST request to the configured webhook URL. The payload contains event-specific data in JSON format.
Configuration
All available configuration options for webhooks can be found in the configuration overview.
Webhooks can be secured by using a shared secret. This secret is included in the Authorization header of the webhook request, allowing your service to verify the authenticity of the request. You can set the shared secret in the webhook configuration:
A beautiful and simple UI to manage your WireGuard peers and interfaces
WireGuard Portal is an open source web-based user interface that makes it easy to setup and manage WireGuard VPN connections. It's built on top of WireGuard's official wgctrl library.
WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography.
WireGuard uses state-of-the-art cryptography and still manages to be as easy to configure and deploy as SSH. A combination of extremely high-speed cryptographic primitives and the fact that WireGuard lives inside the Linux kernel means that secure networking can be very high-speed. It is suitable for both small embedded devices like smartphones and fully loaded backbone routers.
A beautiful and simple UI to manage your WireGuard peers and interfaces
WireGuard Portal is an open source web-based user interface that makes it easy to setup and manage WireGuard VPN connections. It's built on top of WireGuard's official wgctrl library.
WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography.
WireGuard uses state-of-the-art cryptography and still manages to be as easy to configure and deploy as SSH. A combination of extremely high-speed cryptographic primitives and the fact that WireGuard lives inside the Linux kernel means that secure networking can be very high-speed. It is suitable for both small embedded devices like smartphones and fully loaded backbone routers.