Loading... # 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. 环境验证命令 ```bash 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. 工作原理 ```mermaid graph LR A[用户请求] --> B[SafeLine WAF] B --> C{流量检测} C -->|正常| D[后端应用] C -->|恶意| E[拦截阻断] D --> F[响应返回] F --> B B --> A ```  ## 3. 架构说明 SafeLine 作为反向代理部署在用户和后端服务之间,所有 HTTP/HTTPS 流量都经过 WAF 检测。 # 四、快速上手 ## 1. 方法一:自动部署(推荐) 最简单的安装方式是使用官方自动化安装脚本。 执行以下命令(需要 root 权限): ```bash bash -c "$(curl -fsSLk https://waf.chaitin.com/release/latest/manager.sh)" -- --en ``` 命令执行完成后,SafeLine 即安装完成,可直接使用 Web UI 进行配置和管理。 ## 2. 方法二:手动部署 ### A. 安装 Docker SafeLine 运行在 Docker 容器中,因此需要先安装 Docker。 ```bash curl -sSL "https://get.docker.com/" | bash ``` ### B. 创建 SafeLine 目录 为 SafeLine 创建存储配置和数据的目录,确保磁盘有至少 5 GB 可用空间。 ```bash mkdir -p /data/safeline ``` ### C. 下载 Docker Compose 配置 切换到 SafeLine 目录并下载最新的 Docker Compose 配置文件: ```bash cd /data/safeline wget https://waf.chaitin.com/release/latest/compose.yaml ``` ### D. 配置环境变量 创建 .env 文件: ```bash cd /data/safeline touch .env ``` 打开 .env 文件并添加以下内容(将 {postgres-password} 替换为你的安全密码): ```bash 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 服务: ```bash docker compose up -d ``` ## 3. 访问 Web UI 部署完成后,在浏览器中访问: ``` https://<你的服务器IP>:9443/ ``` 你将看到 SafeLine 登录页面。 # 五、初始配置 ## 1. 获取管理员账户 运行以下命令生成初始管理员账户: ```bash docker exec safeline-mgt resetadmin ``` 命令执行成功后,你会看到类似以下输出: ```bash [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 在检测后会将流量转发到该地址。 示例: - http://127.0.0.1:8096 - http://192.168.1.50:8080 配置完成后,提交应用。 ## 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 定价的主要优势是无需额外费用,你预先知道成本,攻击流量不会改变账单。 # 八、架构部署图 ```mermaid 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[拦截阻断] ```  # 九、常见问题 ## 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](https://linuxhandbook.com/safeline-waf-homelab-setup/) 2. [SafeLine 官方文档](https://docs.waf.chaitin.com/en/GetStarted/AddApplication) 3. [SafeLine GitHub 仓库](https://github.com/chaitin/SafeLine) 4. [SafeLine 在线演示](https://demo.waf.chaitin.com:9443/statistics) 最后修改:2026 年 01 月 23 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏