
一、项目概述
BunkerWeb 是一款基于 NGINX 构建的开源下一代 Web 应用防火墙(WAF),由 bunkerity 团队维护。其核心设计理念是“默认安全”(Secure by Default),通过集成 OWASP 核心规则集、HTTPS 自动加密、DDoS 防护等功能,为 Web 服务提供开箱即用的安全保护。项目采用 AGPLv3 许可证,支持 Linux、Docker、Kubernetes 等多种部署环境,并配备可视化 Web UI,大幅降低了安全配置的门槛。
开源地址:
文档与社区:
二、核心功能与特性
1. 安全防护能力
- WAF 规则集:集成 ModSecurity 与 OWASP 核心规则,自动防御 SQL 注入、XSS、CSRF 等常见攻击。
- HTTPS 自动化:通过 Let‘s Encrypt 实现证书的自动申请与续期,支持 TLS 1.3 和 A+ 评级配置。
- 速率限制:基于 IP 或用户的请求频率进行限制,有效防止暴力破解与爬虫滥用。
- 机器人挑战:支持 Cookie 验证、reCAPTCHA、hCaptcha 等多种验证机制,智能阻断恶意自动化工具。
- 黑名单与 DNSBL:集成外部威胁情报,利用 DNS 反垃圾邮件列表(DNSBL),主动拦截已知的恶意 IP 地址。
2. 部署灵活性
- 多环境支持:无缝集成 Linux、Docker、Swarm、Kubernetes 等主流环境,适应不同规模与架构的基础设施。
- 轻量级设计:最低资源需求仅为 2 核 CPU 与 8GB 内存,特别适合在树莓派等边缘计算设备上部署。
- 插件系统:拥有丰富的官方及社区插件生态,可根据需要扩展功能,例如:
- ClamAV:对上传的文件进行实时病毒扫描。
- CrowdSec:基于行为分析的协同式威胁检测与响应。
- Slack/Discord:将安全事件实时通知到团队协作平台。
3. 易用性
- Web UI:提供直观的可视化配置界面,支持服务管理、规则调优与日志分析,操作无需深入命令行。
- 预设模板:为 WordPress、Nextcloud 等常见应用提供了优化配置模板,极大简化了部署流程。
- 自动化工具:通过
docker-compose 或 Kubernetes YAML 文件即可实现一键部署,提升运维效率。
三、Docker 容器化部署
1. 环境准备
- 硬件要求:
- 树莓派 4B/5(推荐 4GB 内存以上)或标准的 x86 服务器。
- 至少 16GB 存储空间(建议使用 Class 10 microSD 卡或 SSD)。
- 系统要求:
- Raspberry Pi OS Bullseye 64 位(树莓派)或 Ubuntu/Debian(x86)。
- 已安装并启用 Docker 与 Docker Compose(版本 2.0+)。
2. 优化系统配置(树莓派示例)
对于在资源受限的设备上运行,进行一些基础优化是必要的:
# 启用内存交换(避免内存不足)
sudo sed -i 's/CONF_SWAPSIZE=100/CONF_SWAPSIZE=1024/g' /etc/dphys-swapfile
sudo dphys-swapfile swapon
# 配置 Docker 镜像加速(国内用户)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
EOF
sudo systemctl restart docker
3. 部署 BunkerWeb 核心服务
创建一个 docker-compose.yml 文件,内容如下:
version: '3'
services:
bunkerweb:
image: bunkerity/bunkerweb:1.6.5 # 使用最新稳定版本
ports:
- "80:8080/tcp" # HTTP 端口
- "443:8443/tcp" # HTTPS 端口
environment:
- MULTISITE=yes # 启用多站点模式
- SERVER_NAME=example.com # 替换为你的域名
- USE_LETS_ENCRYPT=yes # 自动申请 HTTPS 证书
- LETS_ENCRYPT_EMAIL=admin@example.com # 证书联系邮箱
- USE_MODSECURITY=yes # 启用 WAF 规则
- MEMORY_LIMIT=512m # 内存限制
volumes:
- ./bw-data:/data # 持久化配置与证书
restart: unless-stopped
networks:
- bw-network
networks:
bw-network:
使用以下命令启动服务:
docker-compose up -d
4. 初始配置向导
- 访问
https://<服务器IP>/setup,按照提示创建管理员账户(密码需包含大小写字母、数字与特殊字符)。
- 配置域名与 HTTPS:
- 输入你的真实域名(如
example.com)。
- 确保服务器的公网 80/443 端口已开放,以便 Let‘s Encrypt 完成域名验证。
- 完成配置后,系统会自动生成优化后的 Nginx 配置文件,并存储在
./bw-data/configs 目录下。
5. 添加受保护的服务
你可以通过 Web UI(https://<域名>)或在 docker-compose.yml 中添加反向代理规则来保护后端应用。例如,要保护一个 WordPress 博客,可以添加以下服务定义:
services:
wordpress:
image: arm64v8/wordpress:latest # 或对应的 x86 版本
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wpuser
- WORDPRESS_DB_PASSWORD=wppass
volumes:
- ./wp-data:/var/www/html
depends_on:
- db
networks:
- bw-network # 确保连接到同一网络
db:
image: arm64v8/mariadb:10.6
environment:
- MYSQL_ROOT_PASSWORD=rootpass
- MYSQL_DATABASE=wpdb
- MYSQL_USER=wpuser
- MYSQL_PASSWORD=wppass
volumes:
- ./db-data:/var/lib/mysql
networks:
- bw-network
随后,在 BunkerWeb 的管理界面中添加反向代理规则:
- 目标 URL:
http://wordpress:80
- 启用缓存:例如,设置
Cache TTL=30秒 以提升性能。
- 开启 CSP:配置内容安全策略,限制外部资源的加载,增强安全性。
四、高级功能与调优
1. 性能优化
- 启用 Redis 缓存:在管理界面的 Settings > Performance 中配置 Redis 连接,用于缓存会话、限流计数等,减少重复计算开销。
- 调整工作进程数:根据服务器的 CPU 核心数,合理设置
Worker Processes 参数(通常建议为核心数的 1-2 倍)。
- 启用 GZIP 压缩:对文本类响应启用压缩,压缩级别设为 6,可在压缩率和 CPU 占用间取得良好平衡。
2. 安全增强
- 自定义 WAF 规则:在 Settings > WAF > Core Rules 中,可以根据应用特性启用或禁用特定的 OWASP 规则,减少误报。
- IP 白名单:通过
WHITELIST_IP 环境变量或 Web UI,限制只允许特定的 IP 地址或网段访问管理界面或关键服务。
- 日志分析:定期查看 Logs 页面,筛选 403(禁止访问)、429(请求过多)等状态码,有助于快速识别潜在的攻击模式和安全威胁。
3. 多场景适配
- 物联网设备防护:对于暴露在公网的 IoT 设备管理界面,可以结合基础认证(Basic Auth)与严格的 IP 白名单,实现双层访问控制。
- 高流量站点:在 Kubernetes 集群中部署 BunkerWeb,并利用 Horizontal Pod Autoscaler (HPA) 根据流量指标动态扩展实例数量,以应对突发流量。
五、常见问题与解决方案
1. 服务无法访问
- 检查后端服务(如 WordPress)是否加入了正确的 Docker 网络(可使用
docker network inspect bw-network 命令验证)。
- 验证在 BunkerWeb 中配置的反向代理目标地址是否与后端服务的容器名称一致。
- 查看 BunkerWeb 容器的日志以获取详细错误信息:
docker logs bunkerweb。
2. Let‘s Encrypt 证书申请失败
- 确保服务器的公网 IP 地址正确,且 80/443 端口未被防火墙或其他应用占用。
- 对于国内网络环境,如果自动申请困难,可考虑使用阿里云、腾讯云等提供的免费 SSL 证书,然后通过 Web UI 的“高级设置”手动上传证书和私钥。
3. 资源占用过高
- 通过环境变量(如
MEMORY_LIMIT=512m)明确限制单个 BunkerWeb 容器的最大内存使用量。
- 评估并关闭非必要的插件,例如如果不需扫描上传文件,可以禁用 VirusTotal API 等插件以节省资源。
六、总结
BunkerWeb 以“默认安全”为核心理念,通过模块化设计与丰富的插件系统,为各类 Web 服务提供了灵活且高效的安全防护方案。其基于 Docker 的容器化部署方式,极大地简化了安装与运维的复杂度,无论是个人开发者、中小企业,还是边缘计算场景,都能快速从中受益。通过结合官方文档与社区资源,用户可以轻松上手并根据自身需求定制安全策略,从而构建起一道抵御现代 Web 威胁的坚固防线。如果你想了解更多关于 网络与系统 安全或 Web应用防火墙 的深度讨论,欢迎访问云栈社区与广大开发者交流。
|