From cb76d1c093932953d8c4b28f17aa1fd19ff9b05f Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 8 Dec 2023 08:37:04 +0000
Subject: [PATCH 01/26] deps/gha: bump github/codeql-action from 2.22.8 to
2.22.9
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.22.8 to 2.22.9.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/407ffafae6a767df3e0230c3df91b6443ae8df75...c0d1daa7f7e14667747d73a7dbbe8c074bc8bfe2)
---
updated-dependencies:
- dependency-name: github/codeql-action
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
.github/workflows/codeql.yml | 4 ++--
.github/workflows/scorecards-analysis.yml | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index e638fcdcb..18df4ebbf 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -35,12 +35,12 @@ jobs:
python -m pip install --no-cache-dir --require-hashes -r src/common/db/requirements.txt
echo "CODEQL_PYTHON=$(which python)" >> $GITHUB_ENV
- name: Initialize CodeQL
- uses: github/codeql-action/init@407ffafae6a767df3e0230c3df91b6443ae8df75 # v2.22.8
+ uses: github/codeql-action/init@c0d1daa7f7e14667747d73a7dbbe8c074bc8bfe2 # v2.22.9
with:
languages: ${{ matrix.language }}
config-file: ./.github/codeql.yml
setup-python-dependencies: false
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@407ffafae6a767df3e0230c3df91b6443ae8df75 # v2.22.8
+ uses: github/codeql-action/analyze@c0d1daa7f7e14667747d73a7dbbe8c074bc8bfe2 # v2.22.9
with:
category: "/language:${{matrix.language}}"
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index 979021677..be1aa521d 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -25,6 +25,6 @@ jobs:
results_format: sarif
publish_results: true
- name: "Upload SARIF results to code scanning"
- uses: github/codeql-action/upload-sarif@407ffafae6a767df3e0230c3df91b6443ae8df75 # v2.22.8
+ uses: github/codeql-action/upload-sarif@c0d1daa7f7e14667747d73a7dbbe8c074bc8bfe2 # v2.22.9
with:
sarif_file: results.sarif
From 10f0ee7eef6d01dce41eb3efd76994516baa25b6 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 11 Dec 2023 08:08:31 +0000
Subject: [PATCH 02/26] deps/gha: bump rickstaa/action-create-tag from 1.7.1 to
1.7.2
Bumps [rickstaa/action-create-tag](https://github.com/rickstaa/action-create-tag) from 1.7.1 to 1.7.2.
- [Release notes](https://github.com/rickstaa/action-create-tag/releases)
- [Commits](https://github.com/rickstaa/action-create-tag/compare/861755f3fcbce1b21a65c17bad10e7d35c27b6d9...a1c7777fcb2fee4f19b0f283ba888afa11678b72)
---
updated-dependencies:
- dependency-name: rickstaa/action-create-tag
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
.github/workflows/push-github.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/push-github.yml b/.github/workflows/push-github.yml
index 43a92ba11..e463a7799 100644
--- a/.github/workflows/push-github.yml
+++ b/.github/workflows/push-github.yml
@@ -23,7 +23,7 @@ jobs:
with:
name: BunkerWeb_documentation_v${{ inputs.VERSION }}.pdf
# Create tag
- - uses: rickstaa/action-create-tag@861755f3fcbce1b21a65c17bad10e7d35c27b6d9 # v1.7.1
+ - uses: rickstaa/action-create-tag@a1c7777fcb2fee4f19b0f283ba888afa11678b72 # v1.7.2
name: Create tag
if: inputs.VERSION != 'testing'
with:
@@ -31,7 +31,7 @@ jobs:
message: "v${{ inputs.VERSION }}"
force_push_tag: true
# Create tag
- - uses: rickstaa/action-create-tag@861755f3fcbce1b21a65c17bad10e7d35c27b6d9 # v1.7.1
+ - uses: rickstaa/action-create-tag@a1c7777fcb2fee4f19b0f283ba888afa11678b72 # v1.7.2
name: Create tag
if: inputs.VERSION == 'testing'
with:
From de30a734f999c9cd21dc0034e35c544b417d86d0 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 11 Dec 2023 08:37:14 +0000
Subject: [PATCH 03/26] deps/ui: bump python in /src/ui
Bumps python from 3.12.0-alpine3.18 to 3.12.1-alpine3.18.
---
updated-dependencies:
- dependency-name: python
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
src/ui/Dockerfile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/ui/Dockerfile b/src/ui/Dockerfile
index 299b06be3..64b15011e 100644
--- a/src/ui/Dockerfile
+++ b/src/ui/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.12.0-alpine3.18@sha256:f1d0d03700fb2d4480e89fb807e7346c14b88952f7bd58d56de54a24817cc2e8 AS builder
+FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8 AS builder
# Install python dependencies
RUN apk add --no-cache --virtual .build-deps g++ gcc musl-dev jpeg-dev zlib-dev libffi-dev cairo-dev pango-dev gdk-pixbuf-dev openssl-dev cargo postgresql-dev file make
@@ -36,7 +36,7 @@ COPY src/common/helpers helpers
COPY src/ui ui
COPY src/VERSION VERSION
-FROM python:3.12.0-alpine3.18@sha256:f1d0d03700fb2d4480e89fb807e7346c14b88952f7bd58d56de54a24817cc2e8
+FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8
# Set default umask to prevent huge recursive chmod increasing the final image size
RUN umask 027
From 0f2bf17a586db21f3425924f8dc317e81b5c15c2 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 11 Dec 2023 08:39:56 +0000
Subject: [PATCH 04/26] deps/scheduler: bump python in /src/scheduler
Bumps python from 3.12.0-alpine3.18 to 3.12.1-alpine3.18.
---
updated-dependencies:
- dependency-name: python
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
src/scheduler/Dockerfile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/scheduler/Dockerfile b/src/scheduler/Dockerfile
index 97e576f45..9d9d48e58 100644
--- a/src/scheduler/Dockerfile
+++ b/src/scheduler/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.12.0-alpine3.18@sha256:f1d0d03700fb2d4480e89fb807e7346c14b88952f7bd58d56de54a24817cc2e8 AS builder
+FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8 AS builder
# Install python dependencies
RUN apk add --no-cache --virtual .build-deps g++ gcc musl-dev jpeg-dev zlib-dev libffi-dev cairo-dev pango-dev gdk-pixbuf-dev openssl-dev cargo postgresql-dev
@@ -38,7 +38,7 @@ COPY src/common/utils utils
COPY src/scheduler scheduler
COPY src/VERSION VERSION
-FROM python:3.12.0-alpine3.18@sha256:f1d0d03700fb2d4480e89fb807e7346c14b88952f7bd58d56de54a24817cc2e8
+FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8
# Set default umask to prevent huge recursive chmod increasing the final image size
RUN umask 027
From 8eff772fefba85818ea8cb8740b95777d5211c2c Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 11 Dec 2023 08:44:02 +0000
Subject: [PATCH 05/26] deps/autoconf: bump python in /src/autoconf
Bumps python from 3.12.0-alpine3.18 to 3.12.1-alpine3.18.
---
updated-dependencies:
- dependency-name: python
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
src/autoconf/Dockerfile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/autoconf/Dockerfile b/src/autoconf/Dockerfile
index b757f9031..65330ff4b 100644
--- a/src/autoconf/Dockerfile
+++ b/src/autoconf/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.12.0-alpine3.18@sha256:f1d0d03700fb2d4480e89fb807e7346c14b88952f7bd58d56de54a24817cc2e8 AS builder
+FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8 AS builder
# Copy python requirements
COPY src/deps/requirements.txt /tmp/requirements-deps.txt
@@ -34,7 +34,7 @@ COPY src/common/helpers helpers
COPY src/common/settings.json settings.json
COPY src/common/utils utils
-FROM python:3.12.0-alpine3.18@sha256:f1d0d03700fb2d4480e89fb807e7346c14b88952f7bd58d56de54a24817cc2e8
+FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8
# Set default umask to prevent huge recursive chmod increasing the final image size
RUN umask 027
From ea45f3c119158ff858a08f545dadc2c29702bc21 Mon Sep 17 00:00:00 2001
From: fl0ppy-d1sk
Date: Mon, 11 Dec 2023 18:48:08 +0100
Subject: [PATCH 06/26] docs - update logos
---
README.md | 67 ++++++++----------
docs/about.md | 2 +-
docs/assets/logo.png | Bin 4050 -> 4626 bytes
docs/concepts.md | 2 +-
docs/index.md | 2 +-
docs/json2md.py | 2 +-
docs/professional-services.md | 2 +-
docs/settings.md | 2 +-
.../images/BUNKERWEB-print-hd-blanc.png | Bin 30346 -> 49316 bytes
src/ui/static/images/BUNKERWEB-print-hd.png | Bin 39964 -> 54105 bytes
src/ui/static/images/favicon-white.ico | Bin
src/ui/static/images/favicon.ico | Bin
src/ui/static/images/logo-menu-2.png | Bin 30346 -> 49316 bytes
src/ui/static/images/logo-menu.png | Bin 39964 -> 54105 bytes
14 files changed, 37 insertions(+), 42 deletions(-)
mode change 100755 => 100644 src/ui/static/images/favicon-white.ico
mode change 100755 => 100644 src/ui/static/images/favicon.ico
diff --git a/README.md b/README.md
index e2ab87983..db928b743 100644
--- a/README.md
+++ b/README.md
@@ -47,9 +47,9 @@
BunkerWeb is a next-generation and open-source Web Application Firewall (WAF).
-Being a full-featured web server (based on [NGINX](https://nginx.org/) under the hood), it will protect your web services to make them "secure by default". BunkerWeb integrates seamlessly into your existing environments ([Linux](https://docs.bunkerweb.io/1.5.4/integrations/#linux), [Docker](https://docs.bunkerweb.io/1.5.4/integrations/#docker), [Swarm](https://docs.bunkerweb.io/1.5.4/integrations/#swarm), [Kubernetes](https://docs.bunkerweb.io/1.5.4/integrations/#kubernetes), …) and is fully configurable (don't panic, there is an [awesome web UI](https://docs.bunkerweb.io/1.5.4/web-ui/) if you don't like the CLI) to meet your own use-cases . In other words, cybersecurity is no more a hassle.
+Being a full-featured web server (based on [NGINX](https://nginx.org/) under the hood), it will protect your web services to make them "secure by default". BunkerWeb integrates seamlessly into your existing environments ([Linux](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#linux), [Docker](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#docker), [Swarm](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#swarm), [Kubernetes](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#kubernetes), …) and is fully configurable (don't panic, there is an [awesome web UI](https://docs.bunkerweb.io/1.5.4/web-ui/?utm_campaign=self&utm_source=github) if you don't like the CLI) to meet your own use-cases . In other words, cybersecurity is no more a hassle.
-BunkerWeb contains primary [security features](https://docs.bunkerweb.io/1.5.4/security-tuning/) as part of the core but can be easily extended with additional ones thanks to a [plugin system](https://docs.bunkerweb.io/1.5.4/plugins/).
+BunkerWeb contains primary [security features](https://docs.bunkerweb.io/1.5.4/security-tuning/?utm_campaign=self&utm_source=github) as part of the core but can be easily extended with additional ones thanks to a [plugin system](https://docs.bunkerweb.io/1.5.4/plugins/?utm_campaign=self&utm_source=github).
## Why BunkerWeb ?
@@ -74,7 +74,7 @@ Explore the impressive array of security features offered by BunkerWeb. While no
- **Block known bad IPs** with external blacklists and DNSBL : Utilize external blacklists and DNS-based blackhole lists (DNSBL) to proactively block known malicious IP addresses, bolstering your defense against potential threats.
- **And much more...** : BunkerWeb is packed with a plethora of additional security features that go beyond this list, providing you with comprehensive protection and peace of mind.
-Learn more about the core security features in the [security tuning](https://docs.bunkerweb.io/1.5.4/security-tuning/) section of the documentation.
+Learn more about the core security features in the [security tuning](https://docs.bunkerweb.io/1.5.4/security-tuning/?utm_campaign=self&utm_source=github) section of the documentation.
## Demo
@@ -82,7 +82,7 @@ Learn more about the core security features in the [security tuning](https://doc
-A demo website protected with BunkerWeb is available at [demo.bunkerweb.io](https://demo.bunkerweb.io). Feel free to visit it and perform some security tests.
+A demo website protected with BunkerWeb is available at [demo.bunkerweb.io](https://demo.bunkerweb.io/?utm_campaign=self&utm_source=github). Feel free to visit it and perform some security tests.
## Professional services
@@ -98,7 +98,7 @@ Don't hesitate to [contact us](https://panel.bunkerweb.io/contact.php?utm_campai
-You will find more information about the key concepts of BunkerWeb in the [documentation](https://docs.bunkerweb.io/1.5.4/concepts).
+You will find more information about the key concepts of BunkerWeb in the [documentation](https://docs.bunkerweb.io/1.5.4/concepts/?utm_campaign=self&utm_source=github).
## Integrations
@@ -106,13 +106,13 @@ The first concept is the integration of BunkerWeb into the target environment. W
The following integrations are officially supported :
-- [Docker](https://docs.bunkerweb.io/1.5.4/integrations/#docker)
-- [Docker autoconf](https://docs.bunkerweb.io/1.5.4/integrations/#docker-autoconf)
-- [Swarm](https://docs.bunkerweb.io/1.5.4/integrations/#swarm)
-- [Kubernetes](https://docs.bunkerweb.io/1.5.4/integrations/#kubernetes)
-- [Linux](https://docs.bunkerweb.io/1.5.4/integrations/#linux)
-- [Ansible](https://docs.bunkerweb.io/1.5.4/integrations/#ansible)
-- [Vagrant](https://docs.bunkerweb.io/1.5.4/integrations/#vagrant)
+- [Docker](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#docker)
+- [Docker autoconf](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#docker-autoconf)
+- [Swarm](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#swarm)
+- [Kubernetes](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#kubernetes)
+- [Linux](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#linux)
+- [Ansible](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#ansible)
+- [Vagrant](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#vagrant)
## Settings
@@ -132,7 +132,7 @@ USE_GZIP=yes
USE_BROTLI=no
```
-You will find an easy to use settings generator at [config.bunkerweb.io](https://config.bunkerweb.io).
+You will find an easy to use settings generator at [config.bunkerweb.io](https://config.bunkerweb.io/?utm_campaign=self&utm_source=github).
## Multisite mode
@@ -144,7 +144,7 @@ When multisite mode is enabled, BunkerWeb will serve and protect multiple web ap
## Custom configurations
-Because meeting all the use cases only using the settings is not an option (even with [external plugins](https://docs.bunkerweb.io/1.5.4/plugins)), you can use custom configurations to solve your specific challenges.
+Because meeting all the use cases only using the settings is not an option (even with [external plugins](https://docs.bunkerweb.io/1.5.4/plugins/?utm_campaign=self&utm_source=github)), you can use custom configurations to solve your specific challenges.
Under the hood, BunkerWeb uses the notorious NGINX web server, that's why you can leverage its configuration system for your specific needs. Custom NGINX configurations can be included in different [contexts](https://docs.nginx.com/nginx/admin-guide/basic-functionality/managing-configuration-files/#contexts) like HTTP or server (all servers and/or specific server block).
@@ -189,7 +189,7 @@ Docker integration key concepts are :
- **Scheduler** container to store configuration and execute jobs
- **Networks** to expose ports for clients and connect to upstream web services
-You will find more information in the [Docker integration section](https://docs.bunkerweb.io/1.5.4/integrations/#docker) of the documentation.
+You will find more information in the [Docker integration section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#docker) of the documentation.
## Docker autoconf
@@ -201,7 +201,7 @@ The downside of using environment variables is that the container needs to be re
Instead of defining environment variables for the BunkerWeb container, you simply add **labels** to your web applications containers and the **autoconf** will "automagically" take care of the rest.
-You will find more information in the [Docker autoconf section](https://docs.bunkerweb.io/1.5.4/integrations/#docker-autoconf) of the documentation.
+You will find more information in the [Docker autoconf section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#docker-autoconf) of the documentation.
## Swarm
@@ -211,9 +211,9 @@ You will find more information in the [Docker autoconf section](https://docs.bun
To automatically configure BunkerWeb instances, a special service, called **autoconf** will listen for Docker Swarm events like service creation or deletion and automatically configure the **BunkerWeb instances** in real-time without downtime.
-Like the [Docker autoconf integration](https://docs.bunkerweb.io/1.5.4/integrations/#docker-autoconf), configuration for web services is defined using labels starting with the special **bunkerweb.** prefix.
+Like the [Docker autoconf integration](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#docker-autoconf), configuration for web services is defined using labels starting with the special **bunkerweb.** prefix.
-You will find more information in the [Swarm section](https://docs.bunkerweb.io/1.5.4/integrations/#swarm) of the documentation.
+You will find more information in the [Swarm section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#swarm) of the documentation.
## Kubernetes
@@ -223,7 +223,7 @@ You will find more information in the [Swarm section](https://docs.bunkerweb.io/
The autoconf acts as an [Ingress controller](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) and will configure the BunkerWeb instances according to the [Ingress resources](https://kubernetes.io/docs/concepts/services-networking/ingress/). It also monitors other Kubernetes objects like [ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/) for custom configurations.
-You will find more information in the [Kubernetes section](https://docs.bunkerweb.io/1.5.4/integrations/#kubernetes) of the documentation.
+You will find more information in the [Kubernetes section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#kubernetes) of the documentation.
## Linux
@@ -240,7 +240,7 @@ List of supported Linux distros :
Repositories of Linux packages for BunkerWeb are available on [PackageCloud](https://packagecloud.io/bunkerity/bunkerweb), they provide a bash script to automatically add and trust the repository (but you can also follow the [manual installation](https://packagecloud.io/bunkerity/bunkerweb/install) instructions if you prefer).
-You will find more information in the [Linux section](https://docs.bunkerweb.io/1.5.4/integrations/#linux) of the documentation.
+You will find more information in the [Linux section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#linux) of the documentation.
## Ansible
@@ -259,7 +259,7 @@ List of supported Linux distros :
A specific BunkerWeb Ansible role is available on [Ansible Galaxy](https://galaxy.ansible.com/bunkerity/bunkerweb) (source code is available [here](https://github.com/bunkerity/bunkerweb-ansible)).
-You will find more information in the [Ansible section](https://docs.bunkerweb.io/1.5.4/integrations/#ansible) of the documentation.
+You will find more information in the [Ansible section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#ansible) of the documentation.
## Vagrant
@@ -268,11 +268,11 @@ We maintain ready to use Vagrant boxes hosted on Vagrant cloud for the following
- virtualbox
- libvirt
-You will find more information in the [Vagrant section](https://docs.bunkerweb.io/1.5.4/integrations/#vagrant) of the documentation.
+You will find more information in the [Vagrant section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#vagrant) of the documentation.
# Quickstart guide
-Once you have setup BunkerWeb with the integration of your choice, you can follow the [quickstart guide](https://docs.bunkerweb.io/1.5.4/quickstart-guide/) that will cover the following common use cases :
+Once you have setup BunkerWeb with the integration of your choice, you can follow the [quickstart guide](https://docs.bunkerweb.io/1.5.4/quickstart-guide/?utm_campaign=self&utm_source=github) that will cover the following common use cases :
- Protecting a single HTTP application
- Protecting multiple HTTP application
@@ -283,19 +283,19 @@ Once you have setup BunkerWeb with the integration of your choice, you can follo
# Security tuning
-BunkerWeb offers many security features that you can configure with [settings](https://docs.bunkerweb.io/1.5.4/settings). Even if the default values of settings ensure a minimal "security by default", we strongly recommend you to tune them. By doing so you will be able to ensure a security level of your choice but also manage false positives.
+BunkerWeb offers many security features that you can configure with [settings](https://docs.bunkerweb.io/1.5.4/settings/?utm_campaign=self&utm_source=github). Even if the default values of settings ensure a minimal "security by default", we strongly recommend you to tune them. By doing so you will be able to ensure a security level of your choice but also manage false positives.
-You will find more information in the [security tuning section](https://docs.bunkerweb.io/1.5.4/security-tuning) of the documentation.
+You will find more information in the [security tuning section](https://docs.bunkerweb.io/1.5.4/security-tuning/?utm_campaign=self&utm_source=github) of the documentation.
# Settings
-To help you tuning BunkerWeb we have made an easy to use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io).
+To help you tuning BunkerWeb we have made an easy to use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io/?utm_campaign=self&utm_source=github).
As a general rule when multisite mode is enabled, if you want to apply settings with multisite context to a specific server you will need to add the primary (first) server name as a prefix like `www.example.com_USE_ANTIBOT=captcha` or `myapp.example.com_USE_GZIP=yes` for example.
When settings are considered as "multiple", it means that you can have multiple groups of settings for the same feature by adding numbers as suffix like `REVERSE_PROXY_URL_1=/subdir`, `REVERSE_PROXY_HOST_1=http://myhost1`, `REVERSE_PROXY_URL_2=/anotherdir`, `REVERSE_PROXY_HOST_2=http://myhost2`, ... for example.
-Check the [settings section](https://docs.bunkerweb.io/1.5.4/settings) of the documentation to get the full list.
+Check the [settings section](https://docs.bunkerweb.io/1.5.4/settings/?utm_campaign=self&utm_source=github) of the documentation to get the full list.
# Web UI
@@ -315,7 +315,7 @@ The "Web UI" is a web application that helps you manage your BunkerWeb instance
- Monitor jobs execution
- View the logs and search pattern
-You will find more information in the [Web UI section](https://docs.bunkerweb.io/1.5.4/web-ui) of the documentation.
+You will find more information in the [Web UI section](https://docs.bunkerweb.io/1.5.4/web-ui/?utm_campaign=self&utm_source=github) of the documentation.
# Plugins
@@ -333,20 +333,15 @@ Here is the list of "official" plugins that we maintain (see the [bunkerweb-plug
| **VirusTotal** | 1.2 | Automatically scans uploaded files with the VirusTotal API and denies the request when a file is detected as malicious. | [bunkerweb-plugins/virustotal](https://github.com/bunkerity/bunkerweb-plugins/tree/main/virustotal) |
| **WebHook** | 1.2 | Send security notifications to a custom HTTP endpoint using a Webhook. | [bunkerweb-plugins/slack](https://github.com/bunkerity/bunkerweb-plugins/tree/main/webhook) |
-You will find more information in the [plugins section](https://docs.bunkerweb.io/1.5.4/plugins) of the documentation.
+You will find more information in the [plugins section](https://docs.bunkerweb.io/1.5.4/plugins/?utm_campaign=self&utm_source=github) of the documentation.
# Support
## Professional
-We offer professional services related to BunkerWeb like :
+Get technical support directly from the BunkerWeb maintainers. You will find more information by visiting the [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=github), our dedicated platform for professional services.
-* Consulting
-* Support
-* Custom development
-* Partnership
-
-Please contact us at [contact@bunkerity.com](mailto:contact@bunkerity.com) if you are interested.
+Don't hesitate to [contact us](https://panel.bunkerweb.io/contact.php?utm_campaign=self&utm_source=github) if you have any question, we will be more than happy to respond to your needs.
## Community
diff --git a/docs/about.md b/docs/about.md
index f972313a2..63f4199e2 100644
--- a/docs/about.md
+++ b/docs/about.md
@@ -2,7 +2,7 @@
## Who maintains BunkerWeb ?
-BunkerWeb is maintained by [Bunkerity](https://www.bunkerity.com?utm_campaign=self&utm_source=doc), a French 🇫🇷 company specialized in Cybersecurity 🛡️.
+BunkerWeb is maintained by [Bunkerity](https://www.bunkerity.com/?utm_campaign=self&utm_source=doc), a French 🇫🇷 company specialized in Cybersecurity 🛡️.
## Do you offer professional services ?
diff --git a/docs/assets/logo.png b/docs/assets/logo.png
index 2b7bcf430f54ed1d12e2e5c4893cd629e8083733..b209e8c0a7e7db7eb7530e5e484ef4b627212d6d 100644
GIT binary patch
literal 4626
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
IM6N<$g5Q$@GXMYp
literal 4050
zcmV;@4=wPCP)bV)=(RCwC#T|sCa#~EIU*Fs%_UhCvy
zV)O#FO?!FI;6r?gS1CQTDfTm@^k9f3$iX*Tg`NtL6xvfDl5RQ}^c2V`0ox&N4k6Vl
zJvawZuX=FmxFsuW+(Vr72~!7Lg1i5|ndi}Jc6WC7pM5i{|AR$OdfM69nfbr@{(t_R
z9dii#5>K8yaSNOljE#*23FS4zADy!05bVSlHGvTZEi>xL@Mxu++7FNA&>+2>*8^j}
zl2LXVX2NUsBqZ`>cr;5ig&!VMVcGqZxIy@Ww?oDIvrn&Te+Q_|o8$HQy-F*007XyVzh+@+Md&xb$eN|Yb4_VQDR
zJYdJbKyniGeno?tK>IA-4bR^*i-%Z6Ad#q?uzX*|RbWQbM7U;`&HmWPs@wUJ;P6c4obwuF54rQ6o1q0zg-plKy2g==XuUxIQdV}LMt<3!>j8Xu6{@tTu)
z7m0X-5`EB7tgB4jh{Q7_q`D}chUJ56n$1$JoP*2_&uxdDIHNfGmYv0$;1+50)jMJN
zi(&b*mXAkIqZ;8@uJC>`$EAdH)+Fkch(sfaz$|~ML=n?r8Ox%-Tu^T3na#Xd{G^H4
zB$vYbxmHJ?p2eoR7(^B8?@5Dhlamfia)H>7Y{Hyl-+O|p*%1h6q%KvX!od({=fXG6
z%DRMP-2RB#-bZwAIIe_k^Fj?*DW;LiS(6yAiEue#u=w1n#2s@J)JJYF(Yv-`quYx)+s41R2~%R2^K!7Y#5
zTOb_U>{>xtl4%qm3$85M0#THe=q@`zp2H0;7}V*WQ*Ozz^4ScQNyGM=uZdgJDPT;a
zj*XNiJ&luHOIBvs&V4r4H^Sp;UT>k1&~cpAcv2JwS>(A@1nGVAC-UE(De@sXq%)<`0W)wMICYPd|@&Z&3^k7WC=-C=6_(QlFkU*4`NN==G?SNO(B)jGq69DTr#wVF?Nqn&R?HeRc!A7_{ib%Zg+Ka2aysH9PNmJmtQUk*!tw3$fA5bK9&2QM8y
z$WYr@Mk?kyiPyWDp}ac6xaMO!p8L}=yuV<1*o8WCBH3`vi4Ln02^Lfm#W32ZLp)I_
zmMiLyR^CaCxm#XM+8JEXA(2?O#EF=tS(SXGRf1~KtI!?eY69DiPFc{-UD356H=%ma
zKB5{)q{1L8D3UA8Wf9%(zMy7#fBS;l71X7%!M(AaNPGl|+E%;{wxaSaeD1{-j5?E5
z9FuN>@%0oo*0RMNcE<&u&GZ@4(=@BAxE!P&>_MQI(lBbbVOk;epolyC0y}1ydnZnU
zu)XLMJ7zJ*^*HjZ3l&>{8yRB=Kc97Q0!xAI243)8G6cKS2+AZ@Gz%GACU!)MCp=&;
z-yb=Ho&RB%evchXjBtExA_)*k1fJBL7yUnY&LKQF1D3%x$=@&@d~+4=jX*$GPbuFO
zAre1!P@#;&PXD^?(h45Mt8`0w{3*mjtIOVs6Y^97vEI@A5
z0-NAkf|B5$+rk9u%I>wo2}f6-_4g17(xds%hIQzWwG`VfZA@DX{3fuUM
zV@I$tQSq^{5+KO?E;Du=h6)5eD@?$_J{)qx#}QbHdCZo|bjVE|+YexLhdHAF?N|U@nhHMAm2Z^IBNHR;@-sKY1n|>
z(H7Zc76=pDwlFsPJZzAo+)2Z`XCeMbjEqS78V3jFORQZculh*-G$#&M=lxgM**sur
z%L+h0!M!Ov>z|UiNp0l1x3b2cFz!Xtfk``%yjQnna6es*XUHbGHa>!ZS1RWnJ09Mv
z^yy^_T^zqc_hyvj+F~~1GIhSnRE;V1%NoPd2WT6*44q{Ua@Sx|U~L_23j=Q2LZ82{
znM|y9agf}bDwcuEqLcBv30M+Vsj`WLxe8^LX(6Y7uHpgbA-Xp@Al**|Y2VhYewuak
zzpAsXv1|`vl1N$xCa90!)D4ivD|A0}!(
zZBLgFly7GLCJ{;Cm=8Z@Fg-&FaB0-qSMO0KLSbPbO|=-80xINSCVl*HLl
z5y`d%W6V#O`Atg3>Sam7ny4b(C>^Lydm7j!H
zhO6@45(k0!l+H(XajI6VI@}whVi3q`DbUbo%{sa^%P9uaGhp^zP$UtI*>*X{|1Kf8
zI7<=|-_SJpMfavGTsE_|3?~wdWVCG!HtnW;*+}TPz~HyQd07Js$b_xpT&dU}1|>I}
zbJzI=)=7B>I4F^2S#nTHyTFPZJgPrkuw9b&{^S8YS($BxYh6=Vo`q}FH6>kCl^8^)
zLkLWyj;#!z$i&1LU-iAN?Ae*hBJ^c^QRc&UoZat@MJc;3C^;sF@7p!)MP*{&BH7&@
z8$l?yukp1k1OkDOqDTmY3KWJ+F$T1$w|!_(6PSVa`xiiNuOs^0Rmo5=`aTAet<>!+TmP+BSBSWXNC*;WeTo?im;dpR^X+$!qtAy9{Mb1?
zdD8jU!+*OK*Byf0^E70LNC=kV;s3sMR&IS5eLnHr(TGS0c4C~GfIuJ+k<`l_ArOd2
z2&K@WCLq`fijmX=hYlQcF8u73=;!U7dr|y>gU2C~aPB8BJI{Roz^=bNeEi7yVEe|d
za^g7Fd_Ib69GiIFIrPJW(X}_f`XV}K{r*;TexCZvFm>w>w5Hm@L41QCPjm>v*sS_Y6PKt0IkOjX7
zAePgUFAmFw@1cAG5eWeaKnj~*-HD74TooA+$iV*(2w-5mauNaZ;3NVD3}huEDKLCE
zpdLU9Z~&pHsE5eS3d@IbXK$=X>jBq>y1sehd~}WbkG{!t-w1j^!Pc6A8y>_h2QPRY9Yyel93gZ`}(JErxGEM68sO~!cSj`loEl6
zgn$HaF~AUIh84vvLZgF&tB<(b0;)zv5CfOuWb_>ZE1WZ3SS?8-2(A>e{;w?JiD^nohp8zbNWy49!PeTk
zH}{4l!rdA%hzZIBNP))|vfLW}U6i8|o~H|tY?cR57pOlFqsmGTfrx}qz`Z#(ad?+o
z^OQ)ohAt1pOrmohq$rY5;lPRw7;aJ?3W_2*a4=WA~z)~bTgV~us
z$QNI>72O*k8&Sn1#z$^lkIvy~_;~>2qnhgh8LKLRSx_R76EoN#={j{f5eY$;BH>G}
zvfK>r-hk1n#63WjK-&7i*k6mDb;)vbfN=i&%Rfd2f9}Z3O7-Tc_-U&`P%c~_010wg
zL1KblP_VV;aS|X29$?)|BwIsep_&r{hW^`6{uCKHxFCN${dQDN^nl>wM?${IkzGUp
z=e_m!_x6whkBRUgE368g4oLyNgM5{=hxPz@9|$B6kq~lX|1tT#}^R3@}ixMDnb}
z073ogqd!FP32;|{P-Jn90fG664*_!bBn}`4s2e<=Ga#FjQgsCXM+sF;-Fd#zwHq{D45d!QR+tYU|Y%k47LV5`qCP6dXD>8RA@M<^TWy07*qoM6N<$
Eg8F8W6951J
diff --git a/docs/concepts.md b/docs/concepts.md
index 52252820e..ce25ca3d2 100644
--- a/docs/concepts.md
+++ b/docs/concepts.md
@@ -48,7 +48,7 @@ USE_BROTLI=no
!!! info "Settings generator tool"
- To help you tune BunkerWeb, we offer an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io?utm_campaign=self&utm_source=doc).
+ To help you tune BunkerWeb, we offer an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io/?utm_campaign=self&utm_source=doc).
## Multisite mode
diff --git a/docs/index.md b/docs/index.md
index a09e870fb..945c8838a 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -57,7 +57,7 @@ To delve deeper into the core security features, we invite you to explore the [s
-A demo website protected with BunkerWeb is available at [demo.bunkerweb.io](https://demo.bunkerweb.io?utm_campaign=self&utm_source=doc). Feel free to visit it and perform some security tests.
+A demo website protected with BunkerWeb is available at [demo.bunkerweb.io](https://demo.bunkerweb.io/?utm_campaign=self&utm_source=doc). Feel free to visit it and perform some security tests.
## Professional services
diff --git a/docs/json2md.py b/docs/json2md.py
index daf052292..7ea963260 100755
--- a/docs/json2md.py
+++ b/docs/json2md.py
@@ -39,7 +39,7 @@ doc = StringIO()
print("# Settings\n", file=doc)
print(
- '!!! info "Settings generator tool"\n\n To help you tune BunkerWeb, we have made an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io?utm_campaign=self&utm_source=doc).\n',
+ '!!! info "Settings generator tool"\n\n To help you tune BunkerWeb, we have made an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io/?utm_campaign=self&utm_source=doc).\n',
file=doc,
)
print(
diff --git a/docs/professional-services.md b/docs/professional-services.md
index a5fde998c..4f190c418 100644
--- a/docs/professional-services.md
+++ b/docs/professional-services.md
@@ -8,7 +8,7 @@ But dedicating time to a specific technology may not be easy depending on your b
Getting professional services in addition to the open-source solution is the ideal solution to cover your business needs. You can focus on your top priorities and rely on a trusted partner when it comes to web security.
-Please note that professionnal services are directly offered by [Bunkerity](https://www.bunkerity.com?utm_campaign=self&utm_source=doc), the company maintaining the BunkerWeb project, through our [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=doc) online platform.
+Please note that professionnal services are directly offered by [Bunkerity](https://www.bunkerity.com/?utm_campaign=self&utm_source=doc), the company maintaining the BunkerWeb project, through our [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=doc) online platform.
## Which professional services do you offer ?
diff --git a/docs/settings.md b/docs/settings.md
index 236421be1..6754f2af9 100644
--- a/docs/settings.md
+++ b/docs/settings.md
@@ -2,7 +2,7 @@
!!! info "Settings generator tool"
- To help you tune BunkerWeb, we have made an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io?utm_campaign=self&utm_source=doc).
+ To help you tune BunkerWeb, we have made an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io/?utm_campaign=self&utm_source=doc).
This section contains the full list of settings supported by BunkerWeb. If you are not yet familiar with BunkerWeb, you should first read the [concepts](concepts.md) section of the documentation. Please follow the instructions for your own [integration](integrations.md) on how to apply the settings.
diff --git a/src/ui/static/images/BUNKERWEB-print-hd-blanc.png b/src/ui/static/images/BUNKERWEB-print-hd-blanc.png
index 44f08f1f86ee8fe38ab0ddf42b426c6e22cef95c..7fca33ef3d28e141c9979b1664a5a880f2ce4fb7 100644
GIT binary patch
literal 49316
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