bunkerweb

bunkerityAGPL-3.0活跃维护

云原生 Web 应用防火墙,基于 Nginx 和 ModSecurity,开箱即用地为容器与 Kubernetes 环境提供反爬虫、DNSBL、Let's Encrypt 等安全防护。

🛡️ Open-source and cloud-native Web Application Firewall (WAF)

v1.6.17发布于 2026-10-21 16:03 UTC11,243star +12 / 7 天671fork同步于 2026-11-10 11:28 UTC

怎么上手

由 README 提炼,执行前请确认
docker pull bunkerity/bunkerweb
硬件要求按 README 说明

README 未说明

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

基于 NGINX 的开源云原生 WAF,作为反向代理为 Web 服务提供默认安全防护

云原生 Web 应用防火墙,基于 Nginx 和 ModSecurity,开箱即用地为容器与 Kubernetes 环境提供反爬虫、DNSBL、Let's Encrypt 等安全防护。

核心能力

  • 基于 NGINX 的全功能 Web 服务器,作为反向代理保护上游服务
  • 默认开启核心安全特性,开箱即用实现 secure by default
  • 通过插件系统扩展额外安全能力
  • 提供 Web UI 图形界面,无需只用 CLI 配置
  • Docker autoconf 监听容器事件并实时重配,无需重建容器

容易踩的坑

Docker 方式需额外运行 scheduler 容器来存储配置和执行任务;用环境变量配置时每次更新需重建容器,可改用 autoconf 镜像配合 labels;Kubernetes 需使用 bunkerity/bunkerweb-helm 仓库的 Helm chart

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v1.6.17
  1. v1.6.18-rc3pre-release2026-11-05 · 2026-11-05 16:04 UTC
    查看更新说明

    Documentation : https://docs.bunkerweb.io/1.6.18~rc3/

    Docker tags :

    • All-in-one : bunkerity/bunkerweb-all-in-one:1.6.18-rc3 or ghcr.io/bunkerity/bunkerweb-all-in-one:1.6.18-rc3
    • BunkerWeb : bunkerity/bunkerweb:1.6.18-rc3 or ghcr.io/bunkerity/bunkerweb:1.6.18-rc3
    • Scheduler : bunkerity/bunkerweb-scheduler:1.6.18-rc3 or ghcr.io/bunkerity/bunkerweb-scheduler:1.6.18-rc3
    • Autoconf : bunkerity/bunkerweb-autoconf:1.6.18-rc3 or ghcr.io/bunkerity/bunkerweb-autoconf:1.6.18-rc3
    • UI : bunkerity/bunkerweb-ui:1.6.18-rc3 or ghcr.io/bunkerity/bunkerweb-ui:1.6.18-rc3
    • API : bunkerity/bunkerweb-api:1.6.18-rc3 or ghcr.io/bunkerity/bunkerweb-api:1.6.18-rc3 GitLab mirror : registry.gitlab.com/bunkerity/bunkerweb/<image>:1.6.18-rc3 (same digests)

    Linux packages : https://packagecloud.io/app/bunkerity/bunkerweb/search?q=1.6.18~rc3&filter=all&dist=

    Changelog :

    • [BUGFIX] crowdsec: CROWDSEC_METADATA_CACHE_SIZE now defaults to 24m, so report metadata for the whole Community Blocklist fits in stream mode. (Refs #4135)
    • [SECURITY] api: when API_LISTEN_HTTPS=yes, the scheduler, UI, API service and bwcli check that an instance presents the generated API certificate (SHA-256 pin) instead of trusting any. A mismatch is logged and the call still falls back to HTTP.
    • [SECURITY] ui: failed logins (password, TOTP or recovery code) are counted per client IP and per username in the database, and five in 15 minutes lock that IP or username for 15 minutes (LOGIN_THROTTLE, LOGIN_MAX_ATTEMPTS, LOGIN_WINDOW_MINUTES, LOGIN_LOCKOUT_MINUTES).
    • [SECURITY] core: an IPv6 address is now one ban whatever its spelling (expanded, upper case or IPv4-mapped), in every ban, unban and lookup path.
    • [SECURITY] core: an IPv4-mapped IPv6 client (::ffff:a.b.c.d) now matches the IPv4 rules of IP lists, trusted proxies, bans and rate limits.
    • [SECURITY] core: an invalid or zone-id entry in an IP list is now skipped instead of disabling the whole list.
    • [SECURITY] docker: update the Alpine libexpat package to 2.10.0-r0 in the BunkerWeb and all-in-one images, fixing CVE-2026-117610, CVE-2026-118370 and two lower-severity libexpat CVEs.
    • [FEATURE] core: plugins can run code at the TLS ClientHello of every service through the new ssl_client_hello phase (PLUGINS_ORDER_SSL_CLIENT_HELLO).
    • [FEATURE] core: utils.add_ban accepts opts.if_absent for insert-only bans that never replace an existing ban, locally or in Redis.
    • [FEATURE] bunkernet: BUNKERNET_FILTER_HEADERS (no, per service) limits a report to the User-Agent, Accept, Accept-Encoding, Accept-Language, Content-Type and Content-Length request headers and blanks the values matched in request headers and cookies, also for reports queued before the upgrade. By default a report carries every request header, as before; the plugin documentation lists what each value sends.
    • [FEATURE] core: a service can be named by an IPv4 or an IPv6 address (SERVER_NAME=2001:db8::1, bare, lowercase, compressed). NGINX also matches the bracketed Host form, and a name written another way logs a warning with its canonical spelling. (#4120)
    • [BUGFIX] backup: MySQL 8+ clients, including on Fedora, can now back up and restore MySQL and MariaDB databases without the RELOAD privilege.
    • [BUGFIX] bwcli: use the Linux package's Python interpreter, fixing startup crashes on RHEL 9.
    • [BUGFIX] core: stream services no longer abort NGINX init when an HTTP-only plugin (PRO included) is installed, a regression in 1.6.17.
    • [BUGFIX] core: local ban writes and unbans are now serialized per IP, and a writer that cannot take the lock fails with ban lock unavailable.
    • [BUGFIX] installer: on Debian and Ubuntu, the installer warns that the distribution PostgreSQL client cannot back up a newer server and shows the PGDG commands to install a matching one.
    • [BUGFIX] ui: report and ban dates carry their UTC offset, so the browser no longer s
  2. v1.6.18-rc2pre-release2026-10-30 · 2026-10-30 14:05 UTC
    查看更新说明

    Documentation : https://docs.bunkerweb.io/1.6.18~rc2/

    Docker tags :

    • All-in-one : bunkerity/bunkerweb-all-in-one:1.6.18-rc2 or ghcr.io/bunkerity/bunkerweb-all-in-one:1.6.18-rc2
    • BunkerWeb : bunkerity/bunkerweb:1.6.18-rc2 or ghcr.io/bunkerity/bunkerweb:1.6.18-rc2
    • Scheduler : bunkerity/bunkerweb-scheduler:1.6.18-rc2 or ghcr.io/bunkerity/bunkerweb-scheduler:1.6.18-rc2
    • Autoconf : bunkerity/bunkerweb-autoconf:1.6.18-rc2 or ghcr.io/bunkerity/bunkerweb-autoconf:1.6.18-rc2
    • UI : bunkerity/bunkerweb-ui:1.6.18-rc2 or ghcr.io/bunkerity/bunkerweb-ui:1.6.18-rc2
    • API : bunkerity/bunkerweb-api:1.6.18-rc2 or ghcr.io/bunkerity/bunkerweb-api:1.6.18-rc2 GitLab mirror : registry.gitlab.com/bunkerity/bunkerweb/<image>:1.6.18-rc2 (same digests)

    Linux packages : https://packagecloud.io/app/bunkerity/bunkerweb/search?q=1.6.18~rc2&filter=all&dist=

    Changelog :

    • [FEATURE] tests: a pytest unit test suite in tests/unit/, run in CI by .github/workflows/unit-tests.yml, with per-component coverage floors.
    • [FEATURE] release: images and Linux packages now come with signed build provenance, and the upgrading guide shows how to verify a release.
    • [BREAKING] reverseproxy: stream upstream TLS settings (REVERSE_PROXY_SSL_VERIFY=yes, protocols, ciphers, cached client certificate) now turn on TLS to the backend instead of being ignored. Clear them for a plaintext backend.
    • [BREAKING] core: setting regexes are stricter: list values glued without a separator (404500) and all-space values are refused. AUTH_BASIC_USER is wider and takes any value without :.
    • [BREAKING] core: the Lua API disk fallback needs an explicit API_TOKEN line in variables.env; a file without one is refused.
    • [SECURITY] antibot, country: ANTIBOT_IGNORE_URI and COUNTRY_IGNORE_URI now match the normalized request path (alone, or joined with the query string) and no longer the raw path, so a client can no longer skip the check on a protected location with a path NGINX still routes there (//x, /%78, /./x) when the pattern is a negative lookahead such as ^/(?!search).
    • [SECURITY] core: archives over the extraction size or member limits are refused, so a hostile download source can no longer fill the scheduler disk.
    • [SECURITY] jobs: an empty JSON selector term in a list download is rejected instead of widening the IP trust lists.
    • [BUGFIX] all-in-one: NGINX and service log lines reach the container logs promptly.
    • [BUGFIX] antibot: the Cap.js frame loads hashwx.wasm from the Cap.js server, so a strict CSP no longer blocks it (needs Cap.js widget 0.1.58 or later).
    • [BUGFIX] api: cache files of a folder (Let's Encrypt etc.tgz) download again, and YAML files with lowercase setting names load.
    • [BUGFIX] api: a malformed stored bcrypt credential is refused instead of raising an authentication error.
    • [BUGFIX] api: rate limiting falls back to in-memory counters when Redis is unreachable or rejects the credentials, instead of answering 500
    • [BUGFIX] autoconf: the Kubernetes controller retries a configuration deferred while the scheduler was busy, so a new Ingress deploys without waiting for the next event. (Fixes #4107)
    • [BUGFIX] autoconf: the same services, instances or configs in another order, or an apply that changes nothing, no longer re-run the scheduler jobs on every poll.
    • [BUGFIX] autoconf: an Ingress naming a port on a Service without ports no longer blocks every apply, and the fallback to port 80 is logged.
    • [BUGFIX] autoconf: the Swarm controller keeps each instance id once instead of growing its list on every poll.
    • [BUGFIX] backup: the database lock is taken even when the scheduler cannot write the lock file.
    • [BUGFIX] badbehavior: banning or unbanning an IP now clears its counter, so a single new offence no longer re-bans it (Fixes #3818)
    • [BUGFIX] bunkernet: served challenges, captchas and redirects are no longer reported as attacks
  3. v1.6.18-rc1pre-release2026-10-26 · 2026-10-26 14:53 UTC
    查看更新说明

    Documentation : https://docs.bunkerweb.io/1.6.18~rc1/

    Docker tags :

    • All-in-one : bunkerity/bunkerweb-all-in-one:1.6.18-rc1 or ghcr.io/bunkerity/bunkerweb-all-in-one:1.6.18-rc1
    • BunkerWeb : bunkerity/bunkerweb:1.6.18-rc1 or ghcr.io/bunkerity/bunkerweb:1.6.18-rc1
    • Scheduler : bunkerity/bunkerweb-scheduler:1.6.18-rc1 or ghcr.io/bunkerity/bunkerweb-scheduler:1.6.18-rc1
    • Autoconf : bunkerity/bunkerweb-autoconf:1.6.18-rc1 or ghcr.io/bunkerity/bunkerweb-autoconf:1.6.18-rc1
    • UI : bunkerity/bunkerweb-ui:1.6.18-rc1 or ghcr.io/bunkerity/bunkerweb-ui:1.6.18-rc1
    • API : bunkerity/bunkerweb-api:1.6.18-rc1 or ghcr.io/bunkerity/bunkerweb-api:1.6.18-rc1 GitLab mirror : registry.gitlab.com/bunkerity/bunkerweb/<image>:1.6.18-rc1 (same digests)

    Linux packages : https://packagecloud.io/app/bunkerity/bunkerweb/search?q=1.6.18~rc1&filter=all&dist=

    Changelog :

    • [SECURITY] cors: CORS_ALLOW_ORIGIN=self matches the Origin exactly, so look-alike origins are denied when CORS_DENY_REQUEST=yes.
    • [SECURITY] docker: update the Alpine musl and musl-utils packages to 1.2.6-r3, fixing CVE-2026-107891.
    • [SECURITY] docker: update the Alpine curl and libcurl packages to 8.23.0-r0, fixing CVE-2026-92392 and 23 lower-severity curl CVEs.
    • [SECURITY] linux: the Fedora 43 and 44 packages require NGINX 1.30.6, fixing CVE-2026-15176, CVE-2026-93479, CVE-2026-95101, CVE-2026-97629 and CVE-2026-97205.
    • [SECURITY] modsecurity: update OWASP CRS v4 to 4.30.0, fixing GHSA-89h9-2j8h-9gp2, GHSA-qmx4-jfcv-fgww and GHSA-575j-qr6p-9763.
    • [SECURITY] ui: the Support page export redacts API_TOKEN, private keys and header credentials instead of exporting them in clear.
    • [FEATURE] cli: bwcli support exports a support bundle with secrets redacted and IPs and domains anonymized.
    • [FEATURE] crowdsec: CROWDSEC_CACHE_SIZE (100m) and CROWDSEC_METADATA_CACHE_SIZE (5m) size the decision and metadata caches.
    • [FEATURE] installer: the easy install script sends its downloads through HTTP_PROXY/HTTPS_PROXY and honours NO_PROXY. (Fixes #4040)
    • [FEATURE] ui: the NGINX failover banner links to the Logs page, with error.log selected when it is available. (Fixes #4028)
    • [BUGFIX] antibot: a failed challenge keeps its destination, and its query when the session survives. Thanks to @Explotacionweb for the fix.
    • [BUGFIX] antibot: a destination that is an alias of the challenge URL is rejected, so it can no longer loop back to the challenge.
    • [BUGFIX] api: the OpenAPI schema (/openapi.json) loads again instead of returning 500, and a config upload without type is rejected.
    • [BUGFIX] backup: a restore refuses a backup from another database engine, or a damaged one, before dropping tables.
    • [BUGFIX] badbehavior: a ban stores its evidence once, so reports stay small; the Reports page loads the events on demand.
    • [BUGFIX] core: a reload whose initialization is rejected is reported as failed and retried, instead of as applied.
    • [BUGFIX] core: a kept configuration (KEEP_CONFIG_ON_RESTART=yes) that fails to start falls back to the loading page instead of exiting.
    • [BUGFIX] crowdsec: a reload in stream mode no longer leaves an orphaned decision set that fills the cache and stops new bans.
    • [BUGFIX] crowdsec: in stream mode, known bans stay enforced through Local API outages, reloads and restarts (see the plugin README).
    • [BUGFIX] db: upgrades on MariaDB or MySQL no longer crash when the method columns are VARCHAR instead of ENUM. (Fixes #4095)
    • [BUGFIX] limit: connection limits honour SECURITY_MODE=detect.
    • [BUGFIX] metrics: URLs stored in new reports are cut at 512 bytes.
    • [BUGFIX] redis: the Web UI and CLI send the Sentinel credentials and TLS settings to the Sentinel nodes. (Fixes #4093)
    • [BUGFIX] scheduler: startup stops when the database cannot be stamped for its migration, instead of running on an unmigrated database.
    • [
  4. v1.6.17最新正式版2026-10-21 · 2026-10-21 16:03 UTC

    Documentation : https://docs.bunkerweb.io/1.6.17/

    Docker tags :

    • All-in-one : bunkerity/bunkerweb-all-in-one:1.6.17 or ghcr.io/bunkerity/bunkerweb-all-in-one:1.6.17
    • BunkerWeb : bunkerity/bunkerweb:1.6.17 or ghcr.io/bunkerity/bunkerweb:1.6.17
    • Scheduler : bunkerity/bunkerweb-scheduler:1.6.17 or ghcr.io/bunkerity/bunkerweb-scheduler:1.6.17
    • Autoconf : bunkerity/bunkerweb-autoconf:1.6.17 or ghcr.io/bunkerity/bunkerweb-autoconf:1.6.17
    • UI : bunkerity/bunkerweb-ui:1.6.17 or ghcr.io/bunkerity/bunkerweb-ui:1.6.17
    • API : bunkerity/bunkerweb-api:1.6.17 or ghcr.io/bunkerity/bunkerweb-api:1.6.17 GitLab mirror : registry.gitlab.com/bunkerity/bunkerweb/<image>:1.6.17 (same digests)

    Linux packages : https://packagecloud.io/app/bunkerity/bunkerweb/search?q=1.6.17&filter=all&dist=

    Changelog :

    FEATURES

    • [FEATURE] db: DATABASE_CONNECT_TIMEOUT (default 10s) and DATABASE_READ_TIMEOUT (default 5m) bound MySQL and MariaDB calls, and PostgreSQL gets the connect timeout and TCP keepalives but no query deadline, so a database that vanishes without a reset no longer blocks the scheduler, UI or API forever.
    • [FEATURE] headers: the default PERMISSIONS_POLICY also denies unbounded-element.

    WEB UI

    • [UI] Web UI: clarify applying changed global settings to all services and confirm service overrides before saving.

    BUG FIXES

    Security, Access Control & Protection
    • [BUGFIX] bans: the ban check at the TLS ClientHello uses the same address as nginx for IPv4-mapped IPv6 clients and for IPv6 addresses ending in an IPv4 tail.
    • [BUGFIX] core: a URI rewrite in a custom config no longer skips the access checks (bans, lists, rate limit, antibot, authentication, ModSecurity). With ENABLE_INTERNAL=false, CrowdSec still checks rewritten requests.
    • [BUGFIX] core: the whitelist, blacklist, greylist and antibot checks skip the reverse DNS lookup when no rDNS entry is configured. (Fixes #4057)
    • [BUGFIX] modsecurity: multipart strict-validation and filename* denials (HTTP 400) are reported, and the matched request data stored per report is bounded. (Fixes #4012)
    • [BUGFIX] badbehavior: a ban keeps only its newest events as evidence, at most BAD_BEHAVIOR_REPORT_MAX_EVENTS (default 100, never more than the threshold), with URLs and methods cut at BAD_BEHAVIOR_REPORT_MAX_STRING_SIZE (default 512 bytes), so the report written for every request rejected during the ban no longer fills Redis. The Reports page shows the real request count.
    Configuration, Reloads & Database
    • [BUGFIX] all-in-one: a reload signal (docker kill -s HUP) waits for a configuration install in progress before it restarts the services, instead of starting them on a half-written configuration.
    • [BUGFIX] core: on the all-in-one image and on Linux, the generator renders aside and installs under a lock, and a reload or a configuration push waits for it and for any reload in flight, so a reload no longer loads a half-written /etc/nginx and leaves BunkerWeb without its settings until a restart. An orphaned reload marker is cleared once its monotonic stamp shows it is more than five minutes old; a marker whose age cannot be established keeps blocking until a restart.
    • [BUGFIX] core: a configuration generation in which any template fails to render is refused and the running configuration is kept, in every integration; fix or remove the failing template to apply changes again.
    • [BUGFIX] core: a reload whose initialization fails (settings that cannot be loaded, a plugin that fails to load) is rejected and the running configuration is kept, and later reloads are not blocked.
    • [BUGFIX] core: a reload with an unreadable or invalid plugin.json is rejected before anything changes, so the running configuration keeps its protections, and the error names the file instead of attempt to concatenate a nil value. Directories without a plugin.json are still s
  5. v1.6.17-rc2pre-release2026-10-16 · 2026-10-16 18:10 UTC
    查看更新说明

    Documentation : https://docs.bunkerweb.io/1.6.17~rc2/

    Docker tags :

    • All-in-one : bunkerity/bunkerweb-all-in-one:1.6.17-rc2 or ghcr.io/bunkerity/bunkerweb-all-in-one:1.6.17-rc2
    • BunkerWeb : bunkerity/bunkerweb:1.6.17-rc2 or ghcr.io/bunkerity/bunkerweb:1.6.17-rc2
    • Scheduler : bunkerity/bunkerweb-scheduler:1.6.17-rc2 or ghcr.io/bunkerity/bunkerweb-scheduler:1.6.17-rc2
    • Autoconf : bunkerity/bunkerweb-autoconf:1.6.17-rc2 or ghcr.io/bunkerity/bunkerweb-autoconf:1.6.17-rc2
    • UI : bunkerity/bunkerweb-ui:1.6.17-rc2 or ghcr.io/bunkerity/bunkerweb-ui:1.6.17-rc2
    • API : bunkerity/bunkerweb-api:1.6.17-rc2 or ghcr.io/bunkerity/bunkerweb-api:1.6.17-rc2 GitLab mirror : registry.gitlab.com/bunkerity/bunkerweb/<image>:1.6.17-rc2 (same digests)

    Linux packages : https://packagecloud.io/app/bunkerity/bunkerweb/search?q=1.6.17~rc2&filter=all&dist=

    Changelog :

    • [FEATURE] db: DATABASE_CONNECT_TIMEOUT (default 10s) and DATABASE_READ_TIMEOUT (default 5m) bound MySQL and MariaDB calls, and PostgreSQL gets the connect timeout and TCP keepalives but no query deadline, so a database that vanishes without a reset no longer blocks the scheduler, UI or API forever.
    • [BUGFIX] all-in-one: a reload signal (docker kill -s HUP) waits for a configuration install in progress before it restarts the services, instead of starting them on a half-written configuration.
    • [BUGFIX] autoconf: Kubernetes API calls time out and use TCP keepalives, and a controller stalled on its internal lock marks itself unhealthy, so a configured liveness probe restarts it instead of leaving it frozen on a dead API connection.
    • [BUGFIX] autoconf: in Gateway API mode, the status of the GatewayClass, Gateways and routes that BunkerWeb owns is written (Accepted, Programmed, listeners, route parents), so kubectl wait and Argo CD health checks complete. This needs get, list and watch on gatewayclasses and patch on the status of the Gateway API kinds; resources of other controllers are left alone. (Fixes #4058)
    • [BUGFIX] backup: the pre-upgrade backup no longer fails on leftover test_* write-check tables, and a slow but successful dump is no longer reported as a timeout.
    • [BUGFIX] bans: the ban check at the TLS ClientHello uses the same address as nginx for IPv4-mapped IPv6 clients and for IPv6 addresses ending in an IPv4 tail.
    • [BUGFIX] core: a URI rewrite in a custom config no longer skips the access checks (bans, lists, rate limit, antibot, authentication, ModSecurity). With ENABLE_INTERNAL=false, CrowdSec still checks rewritten requests.
    • [BUGFIX] core: on the all-in-one image and on Linux, the generator renders aside and installs under a lock, and a reload or a configuration push waits for it and for any reload in flight, so a reload no longer loads a half-written /etc/nginx and leaves BunkerWeb without its settings until a restart. An orphaned reload marker is cleared once its monotonic stamp shows it is more than five minutes old; a marker whose age cannot be established keeps blocking until a restart.
    • [BUGFIX] core: a configuration generation in which any template fails to render is refused and the running configuration is kept, in every integration; fix or remove the failing template to apply changes again.
    • [BUGFIX] core: a reload whose initialization fails (settings that cannot be loaded, a plugin that fails to load) is rejected and the running configuration is kept, and later reloads are not blocked.
    • [BUGFIX] core: a reload with an unreadable or invalid plugin.json is rejected before anything changes, so the running configuration keeps its protections, and the error names the file instead of attempt to concatenate a nil value. Directories without a plugin.json are still skipped.
    • [BUGFIX] core: an interrupted configuration install (container kill, out of memory) is no longer kept on restart with KEEP_CONFIG_ON_RESTART=yes: the next start renders t

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    🛡️ Make security by default great again!

    BunkerWeb

    BunkerWeb is a next-generation, open-source Web Application Firewall (WAF).

    Being a full-featured web server (based on NGINX under the hood), it will protect your web services to make them "secure by default." BunkerWeb integrates seamlessly into your existing environments (Linux, Docker, Swarm, Kubernetes, …) as a reverse proxy and is fully configurable (don't panic, there is an awesome web UI if you don't like the CLI) to meet your own use cases. In other words, cybersecurity is no longer a hassle.

    BunkerWeb contains primary security features as part of the core but can be easily extended with additional ones thanks to a plugin system.

    Why BunkerWeb?

    https://github.com/user-attachments/assets/c3fed740-28d8-4335-ab05-113a9e815b4f

    • Easy integration into existing environments: Seamlessly integrate BunkerWeb into various environments such as Linux, Docker, Swarm, Kubernetes, and more. Enjoy a smooth transition and hassle-free implementation.
    • Highly customizable: Tailor BunkerWeb to your specific requirements with ease. Enable, disable, and configure features effortlessly, allowing you to customize the security settings according to your unique use case.
    • Secure by default: BunkerWeb provides out-of-the-box, hassle-free minimal security for your web services. Experience peace of mind and enhanced protection right from the start.
    • Awesome web UI: Take control of BunkerWeb more efficiently with the exceptional web user interface (UI). Navigate settings and configurations effortlessly through a user-friendly graphical interface, eliminating the need for the command-line interface (CLI).
    • Plugin system: Extend the capabilities of BunkerWeb to meet your own use cases. Seamlessly integrate additional security measures and customize the functionality of BunkerWeb according to your specific requirements.
    • Free as in "freedom": BunkerWeb is licensed under the free AGPLv3 license, embracing the principles of freedom and openness. Enjoy the freedom to use, modify, and distribute the software, backed by a supportive community.
    • Professional services: Get technical support, tailored consulting, and custom development directly from the maintainers of BunkerWeb. Visit the Bunker Panel for more information.

    Security features

    A non-exhaustive list of security features:

    • HTTPS support with transparent Let's Encrypt automation
    • State-of-the-art web security: HTTP security headers, prevent leaks, TLS hardening, ...
    • Integrated ModSecurity WAF with the OWASP Core Rule Set
    • Automatic ban of strange behaviors based on HTTP status codes
    • Apply connection and request limits for clients
    • Block bots by asking them to solve a challenge (e.g., cookie, JavaScript, captcha, hCaptcha, or reCAPTCHA)
    • Block known bad IPs with external blacklists and DNSBL
    • And much more...

    Learn more about the core security features in the security tuning section of the documentation.

    Demo

    https://github.com/user-attachments/assets/6fc0e3c1-d353-4a84-bad0-15bf9b6623a5

    A demo website protected with BunkerWeb is available at demo.bunkerweb.io. Feel free to visit it and perform some security tests.

    Web UI

    https://github.com/user-attachments/assets/a3ed56f8-c124-4ca9-b8b3-4be0913b3078

    BunkerWeb offers an optional user interface to manage your instances and their configurations. An online read-only demo is available at demo-ui.bunkerweb.io, feel free to test it yourself.

    BunkerWeb Cloud

    Don't want to self-host and manage your own BunkerWeb instance(s)? You might be interested in BunkerWeb Cloud, our fully managed SaaS offering for BunkerWeb.

    Order your BunkerWeb Cloud instance and get access to:

    • A fully managed BunkerWeb instance hosted in our cloud
    • All BunkerWeb features, including PRO ones
    • A monitoring platform with dashboards and alerts
    • Technical support to assist you with configuration

    If you are interested in the BunkerWeb Cloud offering, don't hesitate to contact us so we can discuss your needs.

    PRO version

    Start a 30-day BunkerWeb PRO free trial from the BunkerWeb panel.

    When using BunkerWeb, you have the choice of the version you want to use: open-source or PRO.

    Whether it's enhanced security, an enriched user experience, or technical monitoring, the BunkerWeb PRO version allows you to fully benefit from BunkerWeb and meet your professional needs.

    In the documentation or the user interface, PRO features are annotated with a crown to distinguish them from those integrated into the open-source version.

    You can upgrade from the open-source version to the PRO one easily and at any time. The process is straightforward:

    Do not hesitate to visit the BunkerWeb panel or contact us if you have any questions regarding the PRO version.

    Professional services

    Get the most out of BunkerWeb by getting professional services directly from the maintainers of the project. From technical support to tailored consulting and development, we are here to assist you in the security of your web services.

    You will find more information by visiting the BunkerWeb Panel, our dedicated platform for professional services.

    Don't hesitate to contact us if you have any questions; we will be more than happy to respond to your needs.

    Ecosystem, community, and resources

    Official websites, tools, and resources about BunkerWeb:

    • Website: get more information, news, and articles about BunkerWeb
    • Panel: dedicated platform to order and manage professional services (e.g., technical support) around BunkerWeb
    • Documentation: technical documentation of the BunkerWeb solution
    • Demo: demonstration website of BunkerWeb, don't hesitate to attempt attacks to test the robustness of the solution
    • Web UI: online read-only demo of the web UI of BunkerWeb
    • Threatmap: live cyber attack blocked by BunkerWeb instances all around the world

    Community and social networks:

    Concepts

    You will find more information about the key concepts of BunkerWeb in the documentation.

    Integrations

    The first concept is the integration of BunkerWeb into the target environment. We prefer to use the word "integration" instead of "installation" because one of the goals of BunkerWeb is to integrate seamlessly into existing environments.

    The following integrations are officially supported:

    Settings

    Once BunkerWeb is integrated into your environment, you will need to configure it to serve and protect your web applications.

    The configuration of BunkerWeb is done by using what we call the "settings" or "variables." Each setting is identified by a name such as AUTO_LETS_ENCRYPT or USE_ANTIBOT. You can assign values to the settings to configure BunkerWeb.

    Here is a dummy example of a BunkerWeb configuration:

    SERVER_NAME=www.example.com
    AUTO_LETS_ENCRYPT=yes
    USE_ANTIBOT=captcha
    REFERRER_POLICY=no-referrer
    USE_MODSECURITY=no
    USE_GZIP=yes
    USE_BROTLI=no
    

    Multisite mode

    The multisite mode is a crucial concept to understand when using BunkerWeb. Because the goal is to protect web applications, we intrinsically inherit the concept of "virtual host" or "vhost" (more info here) which makes it possible to serve multiple web applications from a single (or a cluster of) instance.

    By default, the multisite mode of BunkerWeb is disabled, which means that only one web application will be served and all the settings will be applied to it. The typical use case is when you have a single application to protect: you don't have to worry about the multisite, and the default behavior should be the right one for you.

    When multisite mode is enabled, BunkerWeb will serve and protect multiple web applications. Each web application is identified by a unique server name and has its own set of settings. The typical use case is when you have multiple applications to protect and you want to use a single (or a cluster depending on the integration) instance of BunkerWeb.

    Custom configurations

    Because meeting all the use cases only using the settings is not an option (even with external plugins), 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 like HTTP or server (all servers and/or specific server block).

    Another core component of BunkerWeb is the ModSecurity Web Application Firewall: you can also use custom configurations to fix some false positives or add custom rules, for example.

    Database

    The state of the current configuration of BunkerWeb is stored in a backend database which contains the following data:

    • Settings defined for all the services
    • Custom configurations
    • BunkerWeb instances
    • Metadata about job execution
    • Cached files

    The following backend databases are supported: SQLite, MariaDB, MySQL, and PostgreSQL.

    Scheduler

    To make things automagically work together, a dedicated service called the scheduler is in charge of:

    • Storing the settings and custom configurations inside the database
    • Executing various tasks (called jobs)
    • Generating a configuration which is understood by BunkerWeb
    • Being the intermediary for other services (like web UI or autoconf)

    In other words, the scheduler is the brain of BunkerWeb.

    Setup

    Building container images or Linux packages from source? See the community build guide.

    Linux

    List of supported Linux distros:

    • Debian 12 "Bookworm"
    • Debian 13 "Trixie"
    • Ubuntu 22.04 "Jammy"
    • Ubuntu 24.04 "Noble"
    • Ubuntu 26.04 "Resolute Raccoon"
    • Fedora 43
    • Fedora 44
    • RHEL, CentOS, Rocky Linux and AlmaLinux 8, 9 and 10

    You will find more information in the Linux section of the documentation.

    Docker

    We provide ready-to-use prebuilt images for x64, x86, armv7, and arm64 platforms on Docker Hub.

    Docker integration key concepts are:

    • Environment variables to configure BunkerWeb
    • 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 of the documentation.

    Docker autoconf

    The downside of using environment variables is that the container needs to be recreated each time there is an update, which is not very convenient. To counter that issue, you can use another image called autoconf which will listen for Docker events and automatically reconfigure BunkerWeb in real-time without recreating the container.

    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 of the documentation.

    Kubernetes

    The autoconf acts as an Ingress controller and will configure the BunkerWeb instances according to the Ingress resources. It also monitors other Kubernetes objects like ConfigMap for custom configurations.

    The official Helm chart for BunkerWeb is available in the bunkerity/bunkerweb-helm repository.

    You will find more information in the Kubernetes section of the documentation.

    Microsoft Azure

    BunkerWeb is referenced in the Azure Marketplace and an ARM template is available in the misc folder.

    You will find more information in the Microsoft Azure section of the documentation.

    Swarm

    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, configuration for web services is defined using labels starting with the special bunkerweb. prefix.

    You will find more information in the Swarm section of the documentation.

    Quickstart guide

    Once you have set up BunkerWeb with the integration of your choice, you can follow the quickstart guide that will cover the installation and first configuration to protect a web service.

    Security tuning

    BunkerWeb offers many security features that you can configure with features. 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 of the documentation.

    Settings

    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 suffixes 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 features section of the documentation to get the full list.

    Web UI

    https://github.com/user-attachments/assets/a3ed56f8-c124-4ca9-b8b3-4be0913b3078

    The "Web UI" is a web application that helps you manage your BunkerWeb instance using a user-friendly interface instead of the command-line one.

    Here is the list of features offered by the web UI:

    • Get a comprehensive view of the blocked attacks
    • Start, stop, restart, and reload your BunkerWeb instance
    • Add, edit, and delete settings for your web applications
    • Add, edit, and delete custom configurations for NGINX and ModSecurity
    • Install and uninstall external plugins
    • Explore the cached files
    • Monitor job execution and restart them when needed
    • View the logs and search patterns

    You will find more information in the Web UI section of the documentation.

    Plugins

    BunkerWeb comes with a plugin system to make it possible to easily add new features. Once a plugin is installed, you can manage it using additional settings defined by the plugin.

    Here is the list of "official" plugins that we maintain (see the bunkerweb-plugins repository for more information):

    NameVersionDescriptionLink
    ClamAV1.9Automatically scans uploaded files with the ClamAV antivirus engine and denies the request when a file is detected as malicious.bunkerweb-plugins/clamav
    Coraza1.9Inspect requests using the Coraza WAF (alternative of ModSecurity).bunkerweb-plugins/coraza
    Discord1.9Send security notifications to a Discord channel using a Webhook.bunkerweb-plugins/discord
    Slack1.9Send security notifications to a Slack channel using a Webhook.bunkerweb-plugins/slack
    VirusTotal1.9Automatically scans uploaded files with the VirusTotal API and denies the request when a file is detected as malicious.bunkerweb-plugins/virustotal
    WebHook1.9Send security notifications to a custom HTTP endpoint using a Webhook.bunkerweb-plugins/webhook

    You will find more information in the plugins section of the documentation.

    Language Support & Localization

    BunkerWeb UI supports multiple languages. Translations are managed in the src/ui/app/static/locales directory. The following languages are currently available:

    • Arabic (ar)
    • Bengali (bn)
    • Brazilian Portuguese (br)
    • German (de)
    • English (en)
    • Spanish (es)
    • French (fr)
    • Hindi (hi)
    • Italian (it)
    • Korean (ko)
    • Polish (pl)
    • Portuguese (pt)
    • Russian (ru)
    • Turkish (tr)
    • Traditional Chinese (tw)
    • Urdu (ur)
    • Simplified Chinese (zh)

    See the locales/README.md for details on translation provenance and review status.

    Contributing Translations

    We welcome contributions to improve or add new locale files!

    How to contribute a translation:

    1. Edit the src/ui/app/lang_config.py file to add your language (code, name, flag, english_name).
    2. Copy en.json as a template in src/ui/app/static/locales/, rename it to your language code (e.g., de.json for German).
    3. Translate the values in your new file.
    4. Update the table in locales/README.md to add your language and indicate who created/reviewed it.
    5. Submit a pull request.

    For updates, edit the relevant file and update the provenance table as needed.

    See the locales/README.md for full guidelines.

    Support

    Professional

    Get technical support directly from the BunkerWeb maintainers. You will find more information by visiting the BunkerWeb Panel, our dedicated platform for professional services.

    Don't hesitate to contact us if you have any questions; we will be more than happy to respond to your needs.

    Community

    To get free community support, you can use the following media:

    Please don't use GitHub issues to ask for help; use it only for bug reports and feature requests.

    License

    This project is licensed under the terms of the GNU Affero General Public License (AGPL) version 3.

    Contribute

    If you would like to contribute to the plugins, you can read the contributing guidelines to get started.

    Security policy

    We take security bugs as serious issues and encourage responsible disclosure; see our security policy for more information.