XYCOVO CONSOLE KURISU · WEB 渗透 / AI 辅助攻防 ONLINE
#002 · 2025-12-19✓ PASS

云服务器部署雷池 WAF + HFish 蜜罐全记录

在 2 核 2G 云服务器上用 Docker 部署 SafeLine 社区版 WAF 和 HFish 蜜罐,记录从架构设计到踩坑填坑的完整过程。
wafhoneypotdockernginxAUTHOR: KURISU

背景

有一台 2 核 2G 的云服务器(your-server-ip),上面跑着 example.com 静态博客(Nginx 直接对外 80/443)。想在这台机器上同时跑两样东西:

  1. 雷池 SafeLine WAF — 给博客加一层 Web 应用防火墙,拦截常见攻击
  2. HFish 蜜罐 — 布一些诱捕端口,看互联网上有多少自动扫描器在乱撞

最终架构:公网 80/443 → 雷池 WAF → 博客(127.0.0.1:8080),蜜罐独立运行在非标端口。

第 1 步:基础准备

2G 内存要跑 Nginx + SafeLine(7 个容器)+ HFish + 系统开销,swap 是刚需。

# 加 2G swap
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# 装 Docker(国内用阿里云镜像)
curl -fsSL https://get.docker.com | sudo bash -s docker --mirror Aliyun

# 配置 Docker 镜像加速
sudo tee /etc/docker/daemon.json <<'EOF'
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me"
  ]
}
EOF
sudo systemctl restart docker

第 2 步:把博客从 80/443 挪走

雷池的 tengine 需要监听 80/443,所以先把 Nginx 改成只监听 127.0.0.1:8080:

server {
    listen 127.0.0.1:8080;
    server_name example.com www.example.com;
    root /原来的/web/根目录;
    index index.html;
    # 原有的 location 规则保持不变
}

验证 curl -I http://127.0.0.1:8080 返回 200,且 80/443 端口已空出。

第 3 步:部署雷池 SafeLine

bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)"

安装完成后登入管理后台(https://服务器IP:9443),添加防护站点:

  • 域名:example.com
  • 上游地址:http://127.0.0.1:8080
  • 开启 HTTPS,上传证书(或用雷池免费证书)

内存限制(2G 小机器必做):

docker update --memory 900m --memory-swap 1200m \
  $(docker ps --filter name=safeline -q)

验证拦截生效: 访问 https://example.com/?id=1 and 1=1 union select 1--,应出现雷池拦截页面。

第 4 步:部署 HFish 蜜罐

docker run -d --name hfish \
  --restart unless-stopped \
  -m 400m --memory-swap 600m \
  -p 4433:4433 \
  -p 21:21 -p 23:23 -p 3306:3306 \
  -p 6379:6379 -p 9200:9200 -p 8081:8081 \
  threatbook/hfish-server:latest

管理后台在 https://服务器IP:4433/web/,登录后到”服务管理”开启诱捕服务。

踩坑记录

  1. 雷池 mgt 容器偶发 502 — JWT 过期或 fvm 连接超时,重启整个栈恢复:cd /data/safeline && docker compose down && docker compose up -d
  2. HFish 初始密码找不到docker logs hfish 查看;如果已改过忘了,进容器直改 SQLite 数据库的 bcrypt hash
  3. 蜜罐端口没流量 — 检查云安全组,诱捕端口必须对 0.0.0.0/0 开放(这是故意的),但管理后台 9443/4433 只能对管理员 IP 开放

安全加固

端口来源用途
22仅我的 IPSSH
80, 4430.0.0.0/0雷池(网站入口)
9443仅我的 IP雷池管理
4433仅我的 IPHFish 管理
21, 23, 3306, 6379, 9200, 80810.0.0.0/0蜜罐诱捕

当前状态

  • ✅ 博客通过雷池正常访问(HTTP/HTTPS)
  • ✅ 雷池拦截测试生效,后台有攻击记录
  • ⚠️ HFish 管理端已部署,诱捕端口待全部开启
  • ⚠️ 蜜罐数据分析(攻击源统计、payload 分类)待完成
← #001 渗透测试 Skills 体系:A…#003 企业网络综合实验… →