SafeLine WAF 家庭实验室部署实战

一、概述

1. 简介

A. 是什么

SafeLine WAF 是一款免费的自托管 Web 应用防火墙,采用语义分析引擎而非简单的模式匹配,能够有效降低误报率和漏报率。

B. 为什么需要

家庭实验室服务若暴露到公网,会面临与生产环境相同的安全威胁。自动化扫描器和恶意机器人会持续探测开放的服务和漏洞,WAF 作为 HTTP/HTTPS 层的防护盾,可在恶意流量到达应用之前进行过滤。

C. 学完能做什么

  • 在家庭实验室中部署 SafeLine WAF
  • 配置保护多个 Web 应用
  • 监控攻击日志和分析安全事件
  • 理解自托管 WAF 与云 WAF 的区别

2. 前置知识

A. 必备技能

  • 基本 Linux 命令操作
  • Docker 基础知识
  • 了解 HTTP/HTTPS 协议

B. 推荐知识

  • 域名和 DNS 配置
  • 网络基础知识

二、环境准备

1. 系统要求

SafeLine 仅支持 Linux 系统,兼容 x86_64 和 ARM64 架构。

2. 软件依赖

  • Docker 20.10.14 或更高版本
  • Docker Compose 2.0.0 或更高版本

3. 硬件要求

  • CPU:至少 1 核心,需支持 SSSE3 指令集
  • 内存:至少 1 GB
  • 磁盘:至少 5 GB 可用空间

4. 环境验证命令

uname -m                                  # 查看指令架构
docker version                            # 查看 Docker 版本
docker compose version                    # 查看 Docker Compose 版本
cat /proc/cpuinfo | grep "processor"      # 查看 CPU 信息
free -h                                   # 查看内存信息
df -h                                     # 查看磁盘信息
lscpu | grep ssse3                        # 检查 CPU SSSE3 指令

三、核心概念

1. 基本术语

  • WAF:Web 应用防火墙,保护 Web 应用免受常见攻击
  • Upstream:上游服务器,指真实的后端应用地址
  • 语义分析引擎:SafeLine 使用的检测技术,优于简单模式匹配

2. 工作原理

graph LR
    A[用户请求] --> B[SafeLine WAF]
    B --> C{流量检测}
    C -->|正常| D[后端应用]
    C -->|恶意| E[拦截阻断]
    D --> F[响应返回]
    F --> B
    B --> A

mermaid

3. 架构说明

SafeLine 作为反向代理部署在用户和后端服务之间,所有 HTTP/HTTPS 流量都经过 WAF 检测。

四、快速上手

1. 方法一:自动部署(推荐)

最简单的安装方式是使用官方自动化安装脚本。

执行以下命令(需要 root 权限):

bash -c "$(curl -fsSLk https://waf.chaitin.com/release/latest/manager.sh)" -- --en

命令执行完成后,SafeLine 即安装完成,可直接使用 Web UI 进行配置和管理。

2. 方法二:手动部署

A. 安装 Docker

SafeLine 运行在 Docker 容器中,因此需要先安装 Docker。

curl -sSL "https://get.docker.com/" | bash

B. 创建 SafeLine 目录

为 SafeLine 创建存储配置和数据的目录,确保磁盘有至少 5 GB 可用空间。

mkdir -p /data/safeline

C. 下载 Docker Compose 配置

切换到 SafeLine 目录并下载最新的 Docker Compose 配置文件:

cd /data/safeline
wget https://waf.chaitin.com/release/latest/compose.yaml

D. 配置环境变量

创建 .env 文件:

cd /data/safeline
touch .env

打开 .env 文件并添加以下内容(将 {postgres-password} 替换为你的安全密码):

SAFELINE_DIR=/data/safeline
IMAGE_TAG=latest
MGT_PORT=9443
POSTGRES_PASSWORD={postgres-password}
SUBNET_PREFIX=172.22.222
IMAGE_PREFIX=chaitin
ARCH_SUFFIX=
RELEASE=
REGION=-g
MGT_PROXY=0

配置说明:

  • 如果部署在 ARM 服务器上,设置 ARCH_SUFFIX=-arm
  • 要安装 LTS 版本,设置 RELEASE=-lts
  • MGT_PORT 定义 Web 控制台端口
  • SUBNET_PREFIX 用于 SafeLine 内部网络通信
  • MGT_PROXY 仅在需要控制台代理时使用,否则保持为 0

E. 启动 SafeLine

配置完成后,启动 SafeLine 服务:

docker compose up -d

3. 访问 Web UI

部署完成后,在浏览器中访问:

https://<你的服务器IP>:9443/

你将看到 SafeLine 登录页面。

五、初始配置

1. 获取管理员账户

运行以下命令生成初始管理员账户:

docker exec safeline-mgt resetadmin

命令执行成功后,你会看到类似以下输出:

[SafeLine] Initial username: admin
[SafeLine] Initial password: **********
[SafeLine] Done

请务必将此信息保存在安全的地方。

2. 登录 Web UI

使用上一步获取的凭据登录 SafeLine Web UI。登录后,你可以开始添加应用、启用防护和监控流量。

六、配置第一个受保护的站点

1. 在 SafeLine 中添加应用

进入 Applications 页面,点击右上角的 Add Application 按钮。

2. 配置应用设置

在应用设置对话框中,填写以下字段:

A. Domain(域名)

这是用于访问应用或服务的域名、主机名或 IP 地址。

B. Port(端口)

SafeLine 监听的端口。HTTP 使用 80,HTTPS 使用 443。如果应用使用 HTTPS,确保启用 SSL 选项并正确配置证书。

C. Upstream(上游)

这是原始应用的真实后端地址,SafeLine 在检测后会将流量转发到该地址。

示例:

配置完成后,提交应用。

3. 更新 DNS 记录

添加应用后,必须更新 DNS 使流量通过 SafeLine:

  • 将你配置的域名指向 SafeLine 服务器的 IP 地址
  • 这确保所有请求首先到达 SafeLine,而不是直接到达后端应用

DNS 传播完成后,用户可以通过域名正常访问应用,但现在受到 SafeLine 保护。

4. 验证正常访问

在浏览器中使用配置的域名访问应用。如果一切设置正确,应用应该正常加载,后端服务无需任何更改。

5. 测试常见 Web 攻击

要确认 SafeLine 正常工作,可以使用常见攻击模式(如 SQL 注入、跨站脚本攻击 XSS 等)进行安全测试。详细测试模式可访问 SafeLine 官方文档。

当攻击被成功拦截时,SafeLine 会返回拦截页面,而不是将请求转发到你的应用。

6. 查看控制台攻击日志

要查看 SafeLine 拦截的内容,导航到 Attacks > LOGS,你将看到被拦截请求的列表。

点击任何日志的 Detail 可以查看更深入的技术信息,这有助于你理解为什么请求被拦截以及 SafeLine 的检测逻辑如何工作。

七、SafeLine 优势分析

1. 云 WAF 与自托管 WAF 对比

A. 定价和成本

云 WAF 通常根据流量或每月请求数收费,对于预算有限的实验和学习场景,这种可变定价可能令人沮丧。

自托管 WAF 如 SafeLine 通常完全免费或有固定成本,无论流量峰值如何,你都知道确切的花费。这种可预测性对家庭实验室用户是很大的优势。

B. 控制和可见性

对于家庭实验室,拥有环境的完全控制权是乐趣之一。但云 WAF 通常像黑盒一样工作:规则逻辑被抽象化,日志可能受限或位于付费墙后,你无法决定流量在何处或如何处理。

还有依赖因素,如果云提供商出现故障或路由问题,即使你的基础设施运行完美,服务也可能不可用。在这种情况下,除了等待别无他法。

使用自托管 WAF,一切都在你的环境内,可以检查规则、查看完整日志、精确决定流量如何流动。

另一方面,这种级别的控制也意味着更多责任,你需要自己处理更新、维护和故障排除。

2. SafeLine 特色功能

  • 语义分析引擎:更少的误报和漏报
  • 免费个人版保护多达 10 个应用
  • 机器人防护和身份认证功能
  • 详细的攻击日志和分析

3. 定价方案

A. 免费个人版

  • 保护多达 10 个应用
  • 与 Pro 计划相同的检测级别

B. Lite 计划($10/月)

  • 保护多达 20 个应用
  • 适合较大的家庭实验室

C. Pro 计划($100/月)

  • 无限应用数量
  • 所有高级功能
  • 无隐藏费用

SafeLine 定价的主要优势是无需额外费用,你预先知道成本,攻击流量不会改变账单。

八、架构部署图

graph TB
    Internet[互联网] --> DNS[DNS解析]
    DNS --> SafeLine[SafeLine WAF<br/>端口: 80/443]
    SafeLine -->|正常流量| App1[应用1<br/>Jellyfin]
    SafeLine -->|正常流量| App2[应用2<br/>Git服务器]
    SafeLine -->|正常流量| App3[应用3<br/>个人博客]
    SafeLine -->|拦截攻击| Block[拦截阻断]

mermaid

九、常见问题

1. 安装问题

确保 Docker 和 Docker Compose 版本符合要求,CPU 支持 SSSE3 指令集。

2. 配置问题

检查防火墙规则,确保 SafeLine 端口(默认 9443)可访问。

3. ARM 架构注意

ARM 架构需要 Pro 许可证才能正常使用 WAF。

十、使用建议

1. 最佳实践

  • 定期查看攻击日志,了解威胁类型
  • 根据实际情况调整防护规则
  • 结合网络层防火墙规则实现多层防护

2. 局限性

  • WAF 不能替代安全的编码实践
  • 需要配合其他安全措施使用
  • 自托管意味着需要自己维护和更新

3. 学习价值

运行自己的 WAF 可以学到很多关于网络安全、HTTP 流量模式、攻击向量以及防御如何与真实流量交互的知识,这是家庭实验室学习之旅中最好的实践工具之一。


参考资料

  1. Setting Up Free WAF for Homelab With SafeLine
  2. SafeLine 官方文档
  3. SafeLine GitHub 仓库
  4. SafeLine 在线演示
最后修改:2026 年 01 月 23 日
如果觉得我的文章对你有用,请随意赞赏