Docker 一键部署 SamWaf,轻量 WAF 私有化方案

举报
程序员老张 发表于 2026/07/15 11:38:00 2026/07/15
【摘要】 网站日志里全是扫描器、SQL 注入探测,云 WAF 按量计费又贵?SamWaf 是一款 开源、轻量、可完全私有化部署 的 Web 应用防火墙——自带独立防护引擎与反向代理,不依赖 Nginx / Apache 插件;数据加密存本地,默认内置 SQLite,单容器即可跑通。管理后台在 26666 端口,可视化配置站点、规则、攻击日志与通知渠道。

网站日志里全是扫描器、SQL 注入探测,云 WAF 按量计费又贵?SamWaf 是一款 开源、轻量、可完全私有化部署 的 Web 应用防火墙——自带独立防护引擎与反向代理,不依赖 Nginx 插件;数据加密存本地,默认内置 SQLite,单容器即可跑通

不用装 Nginx 插件,一条 docker run 启动 WAF 管理后台。本文带你完成 SamWaf Docker 部署:镜像拉取、检查 80/443 是否被占用、创建数据目录、试用模式启动、读取初始密码登录改密,再导览仪表盘与添加受保护站点——全程零基础可跟做。

部署要点:SamWaf 通常部署在网站最前端(WAF + 反代)。若宿主机已有 Nginx 占用 80/443,本文采用试用模式映射 8088/8443,不中断现有站点。


一、SamWaf 是什么?

SamWaf 是一款面向小公司、工作室与个人站长的 开源轻量级网站防火墙(WAF),支持完全私有化部署,本地数据加密存储,一键启动。

能力 说明
独立引擎 防护不依赖 IIS、Nginx 插件,自带反向代理
攻击防护 SQL 注入、XSS、RCE、扫描器识别、CC 限流、OWASP CRS
访问控制 IP / URL 黑白名单、地区封禁、人机验证
流量接入 HTTP/1.1、HTTP/2、HTTP/3(QUIC)、WebSocket
证书管理 ACME 自动申请与续签、SNI 多证书
运维管理 RBAC、OTP 双因素、攻击/访问日志、钉钉/飞书/邮件通知
数据存储 默认加密 SQLite,可选 MySQL

典型场景:中小型网站防扫描、防注入、防 CC;需要数据不出本地的私有化安全方案;用 WAF 前置反代到 WordPress、Trilium 等后端应用。

架构示意:

用户/攻击流量 ──HTTP:80/443(或试用 8088/8443)──▶ SamWaf 容器
SamWaf 容器 ──检测/拦截后反代──▶ 后端站点(如 127.0.0.1:8080)
管理员 ──HTTP:26666──▶ SamWaf 管理后台

二、环境要求

项目 建议
操作系统 Linux(本文 Ubuntu 24.04)
Docker 已安装 Docker 与 Docker Compose V2
内存 ≥ 512 MB(推荐 1 GB 以上)
CPU 单核即可;多站点建议双核
磁盘 ≥ 1 GB(镜像 + 日志与 SQLite)
端口 26666(管理后台);80/443 或试用 8088/8443(WAF 入口)
工作目录 /www/wwwroot/samwaf(与业务应用目录分开)

验证 Docker:

docker --version
docker compose version

若尚未安装 Docker,可使用轩辕镜像一键安装脚本:

bash <(wget -qO- https://xuanyuan.cloud/docker.sh)

镜像标签对照

标签 适用场景
v1.3.21 本文实测标签,生产推荐固定版本便于回滚
latest 最新稳定版
beta 测试版,体验新特性

三、拉取镜像并一键启动

3.1 检查端口占用(部署前必做)

SamWaf 默认需要 80、443、26666。若宿主机已有 Nginx / 宝塔占用 80/443,直接映射会报 port is already allocated

sudo ss -tlnp | grep -E ':80 |:443 |:26666 '
docker ps --format 'table {{.Names}}\t{{.Ports}}'

判读与对策

情况 做法
80/443 空闲 用标准模式(-p 80:80 -p 443:443
80/443 被占用 用试用模式(-p 8088:80 -p 8443:443),本文实测走此方案
26666 被占用 改映射,如 -p 26667:26666

3.2 创建目录

SamWaf 需挂载四个目录。不要与业务应用混在同一数据目录。

sudo mkdir -p /www/wwwroot/samwaf/{conf,data,logs,ssl}
cd /www/wwwroot/samwaf
宿主机目录 容器路径 作用
conf/ /app/conf 配置文件
data/ /app/data 数据库、初始密码、OWASP 规则
logs/ /app/logs 运行与攻击日志
ssl/ /app/ssl SSL 证书

3.3 拉取镜像

docker pull docker.xuanyuan.run/samwaf/samwaf:v1.3.21

成功时终端类似输出(Ubuntu 24.04 实测):

v1.3.21: Pulling from samwaf/samwaf
4f4fb700ef54: Pull complete
…
Digest: sha256:ff0f4d9ddc562ac3469284e3eac87d001bbef6db1689532e37a186198d668c1e
Status: Downloaded newer image for docker.xuanyuan.run/samwaf/samwaf:v1.3.21
docker.xuanyuan.run/samwaf/samwaf:v1.3.21
官方镜像 轩辕镜像加速拉取
samwaf/samwaf:v1.3.21 docker pull docker.xuanyuan.run/samwaf/samwaf:v1.3.21

3.4 试用模式启动(80/443 已占用时)— 本文实测

不停止现有 Nginx,用非标准端口验证 WAF:

docker run -d \
  --name samwaf \
  --restart unless-stopped \
  -p 26666:26666 \
  -p 8088:80 \
  -p 8443:443 \
  -v /www/wwwroot/samwaf/conf:/app/conf \
  -v /www/wwwroot/samwaf/data:/app/data \
  -v /www/wwwroot/samwaf/logs:/app/logs \
  -v /www/wwwroot/samwaf/ssl:/app/ssl \
  docker.xuanyuan.run/samwaf/samwaf:v1.3.21
映射 访问方式
26666:26666 管理后台 http://<IP>:26666
8088:80 WAF HTTP 入口 http://<IP>:8088
8443:443 WAF HTTPS 入口 https://<IP>:8443

若 80/443 空闲,将端口改为 -p 80:80 -p 443:443 即可(标准模式)。

3.5 验证启动

docker ps
docker logs -f samwaf
curl -I http://127.0.0.1:26666

docker ps 状态为 Up 且端口映射正确即表示运行中。curl -I 应返回 HTTP/1.1 200 OK

日志关键行(首次启动正常标志):

==========================================
  SamWaf Web Application Firewall v1.3.21
  Version Name: 20260708
==========================================
… 首次安装已生成随机管理员初始口令,请查看文件: data/initial_password.txt …
… SamWaf has started successfully.You can open http://127.0.0.1:26666 in your Browser

日志说明:首次启动提示「找不到配置文件」会自动生成默认配置,属正常现象。


四、首次登录与修改密码

4.1 获取初始密码

SamWaf 不会使用固定默认密码。首次安装会生成随机口令并写入数据卷:

cat /www/wwwroot/samwaf/data/initial_password.txt

文件格式类似:

SamWaf 初始管理员账号: admin
初始随机口令: <随机字符串>
生成时间: 2026-07-12 21:22:38
请立即登录并修改密码,登录后本文件可删除。

安全提示:请勿将 initial_password.txt 内容截图外发。登录成功后建议删除该文件。

4.2 打开管理后台

浏览器访问:

http://你的服务器IP:26666

默认账号:admin,密码填入上一步读取的随机口令。
SamWaf 登录页:输入 admin 与初始随机口令

图 1:登录页,账号 admin,密码来自 initial_password.txt

4.3 首次登录强制改密

使用初始口令登录后,会弹出 修改密码 对话框。设置新密码并确认后点击 确认
SamWaf 首次登录:强制修改管理员密码

图 2:首次登录强制改密

建议随后开启 OTP 双因素认证,并限制管理端口 26666 的访问来源(防火墙 / 安全组 / 反代 + HTTPS)。


五、管理后台与添加受保护站点

5.1 概览仪表盘

登录成功后进入 概览仪表盘。首次安装会提示尚未添加受保护网站;顶部可查看 CPU、内存、磁盘占用及数据库类型(默认 SQLite)。
SamWaf 概览仪表盘:首次安装欢迎提示与零数据状态

图 3:概览仪表盘,首次安装欢迎提示

左侧主要模块:仪表盘、网站防护、数据分析、防护日志、隧道防护、通知管理、系统设置。左下角显示版本 20260708(v1.3.21)

5.2 新建防护站点

进入 网站防护 → 新建防护,在 基础内容 选项卡填写:

字段 说明 示例
网站 对外域名或测试域名 notes.example.com
加密证书 HTTP 或 HTTPS 试用可先用「非加密」
主端口 WAF 监听端口(容器内 80 对应宿主机 8088) 80
后端 IP 真实应用地址 127.0.0.1
后端端口 后端服务端口 8080
启动状态 建议「自动启动」 自动启动
SamWaf 新建防护站点:基础内容与反向代理后端配置

图 4:新建防护站点,配置反向代理后端

保存后可在列表中看到站点记录。首次安装还会自动创建 全局网站 占位项,可按需配置或忽略。
SamWaf 网站防护列表:全局网站与新建站点记录

图 5:网站防护列表

5.3 试用模式下的访问路径

用户 → http://<IP>:8088 → SamWaf 检测/拦截 → http://127.0.0.1:8080(后端)

站点创建后,可逐步开启防御规则、CC 防护、IP 黑白名单;也可先用 仅记录模式 观察日志再开启拦截。


六、日志、分析与扩展功能

6.1 访问日志

防护日志 → 访问日志 可按网站、来源 IP、响应码、日期筛选请求记录。
SamWaf 访问日志:按条件筛选 Web 请求记录

图 6:访问日志筛选界面

6.2 数据分析

数据分析 提供周期攻击对比、世界地图来源分布等可视化。
SamWaf 数据分析:攻击与正常流量世界地图分布

图 7:数据分析与流量世界地图

6.3 隧道防护(可选)

隧道防护 → 隧道管理 支持 TCP/UDP 四层转发(实验特性),可用于保护远程数据库、Redis 等。
SamWaf 隧道管理:TCP/UDP 四层隧道配置页

图 8:隧道管理(四层转发)

6.4 通知渠道(可选)

通知管理 → 通知渠道 可接入钉钉、飞书、邮件、Webhook 等,攻击或异常时推送告警。
SamWaf 通知渠道:钉钉飞书邮件等告警接入

图 9:通知渠道配置


七、生产环境简要说明

个人试用用第三节 试用模式 docker run 即可。长期运行建议改用 Docker Compose,便于版本管理。

/www/wwwroot/samwaf 创建 docker-compose.yml

services:
  samwaf:
    image: docker.xuanyuan.run/samwaf/samwaf:v1.3.21
    container_name: samwaf
    restart: unless-stopped
    ports:
      - "26666:26666"
      - "8088:80"    # 试用模式;标准模式改为 "80:80"
      - "8443:443"   # 试用模式;标准模式改为 "443:443"
    volumes:
      - ./conf:/app/conf
      - ./data:/app/data
      - ./logs:/app/logs
      - ./ssl:/app/ssl
docker compose up -d

试用验证无误后,若希望 SamWaf 接管 80/443:先备份并停止 Nginx,再用标准端口重新启动容器,并在后台为每个站点配置反代后端。此操作会影响所有现有网站,请在维护窗口进行。


八、常见问题 FAQ

Q1:port is already allocated 怎么办?

说明 80/443 或 26666 已被占用。改用试用模式端口(8088/8443)或停止冲突服务后再映射标准端口。

Q2:忘记管理员密码?

docker exec -it samwaf ./SamWafLinux64 resetpwd

按提示重置后重新登录并改密。

Q3:数据存在哪里?

宿主机 /www/wwwroot/samwaf/ 下四个子目录。删除 data/ 会丢失全部 WAF 规则与日志

Q4:管理端口 26666 要不要对公网开放?

不建议长期裸奔。可映射为 -p 127.0.0.1:26666:26666 仅本机访问,或通过 VPN / SSH 隧道访问。

Q5:如何升级版本?

docker pull docker.xuanyuan.run/samwaf/samwaf:v1.3.21
docker stop samwaf && docker rm samwaf
# 用相同 -v 参数重新 docker run(data 卷保留配置)

也可在管理后台使用在线一键升级(会短暂中断服务)。

Q6:试用模式下用户怎么访问受保护站点?

需使用 8088(HTTP)或 8443(HTTPS),而非默认 80/443。


九、命令速查

操作 命令
拉取镜像 docker pull docker.xuanyuan.run/samwaf/samwaf:v1.3.21
检查端口 sudo ss -tlnp | grep -E ':80 |:443 |:26666 '
创建目录 sudo mkdir -p /www/wwwroot/samwaf/{conf,data,logs,ssl}
试用模式启动 见第三节 docker run-p 8088:80 -p 8443:443
查看日志 docker logs -f samwaf
读取初始密码 cat /www/wwwroot/samwaf/data/initial_password.txt
管理后台 http://服务器IP:26666
重置密码 docker exec -it samwaf ./SamWafLinux64 resetpwd

总结

SamWaf = 开源轻量 WAF + 反向代理,单容器即可私有化护站:

  • 使用轩辕镜像加速拉取 samwaf/samwaf:v1.3.21
  • 部署前先检查 80/443;被占用就用试用模式 8088/8443
  • 四目录持久化 → docker run → 读 initial_password.txt → 登录改密 → 添加防护站点
  • 长期运行可改用 Compose;确认无误后再考虑接管生产 80/443

延伸阅读(复制打开):

轩辕镜像 · samwaf/samwaf 镜像页:

https://xuanyuan.cloud/r/samwaf/samwaf

SamWaf 在线文档:

https://doc.samwaf.com/

SamWaf GitHub 仓库:

https://github.com/samwafgo/SamWaf

轩辕镜像使用手册:

https://xuanyuan.cloud/usage

如果你在拉取 Docker 镜像时遇到速度慢、超时等问题,可以试试轩辕镜像的加速服务。欢迎收藏 samwaf/samwaf 镜像页,获取最新标签与更新说明:

https://xuanyuan.cloud/r/samwaf/samwaf

Compose 完整配置、生产接管步骤与更多 FAQ,详细步骤请查看官方博客完整版:

https://xuanyuan.cloud/blog/docker-samwaf-waf

本文基于 samwaf/samwaf:v1.3.21 镜像,Ubuntu 24.04 服务器实测(管理端口 26666,试用模式 WAF 入口 8088/8443

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。