收起左侧

担心 NAS 上的网站被黑客盯上?一键部署雷池 WAF,为站点保障护航!

13
回复
3922
查看
[ 复制链接 ]

138

主题

16

回帖

0

牛值

fnOS系统内测组

社区上线纪念勋章fnOS1.0上线纪念勋章EVO2产品纪念

2025-12-30 11:34:56 显示全部楼层 阅读模式

SafeLine:

一款简单好用, 效果突出的 Web 应用防火墙(WAF),可以保护 Web 服务不受黑客攻击。雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入、XSS、 代码注入、命令注入、CRLF 注入、ldap 注入、xpath 注入、RCE、XXE、SSRF、路径遍历、后门、暴力破解、CC、爬虫 等攻击。

雷池通过阻断流向 Web 服务的恶意 HTTP 流量来保护 Web 服务。雷池作为反向代理接入网络,通过在 Web 服务前部署雷池,可在 Web 服务和互联网之间设置一道屏障。

安装

雷池和 Web 业务服务不建议部署到同一台机器中,安装雷池需要已经有 Docker 运行环境,这里我就直接演示简单演示两种安装方式。个人推荐一键部署方式,安装路径可以自行设置的。对于不想打开 SSH 连接的用户,也可以直接使用 Compose 方式手动部署。

一键部署

使用 SSH 工具连接,切换为 root 用户权限

sudo -i

输入一键安装命令

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

选择安装,输入 1

输入安装目录(放到 docker 路径方便管理),接下来等待安装就行

/vol1/1000/docker/safeline(按实际情况修改)

安装启动成功,会出现初始化的用户名和密码

下面就可以访问管理面板了

手动部署

复制下面内容,创建 docker-compose.yaml 和 .env 两个文件

docker-compose.yaml 文件

networks:
  safeline-ce:
    name: safeline-ce
    driver: bridge
    ipam:
      driver: default
      config:
        - gateway: ${SUBNET_PREFIX:?SUBNET_PREFIX required}.1
          subnet: ${SUBNET_PREFIX}.0/24
    driver_opts:
      com.docker.network.bridge.name: safeline-ce

services:
  postgres:
    container_name: safeline-pg
    restart: always
    image: ${IMAGE_PREFIX}/safeline-postgres${ARCH_SUFFIX}:15.2
    volumes:
      - ${SAFELINE_DIR}/resources/postgres/data:/var/lib/postgresql/data
      - /etc/localtime:/etc/localtime:ro
    environment:
      - POSTGRES_USER=safeline-ce
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:?postgres password required}
    networks:
      safeline-ce:
        ipv4_address: ${SUBNET_PREFIX}.2
    command: [postgres, -c, max_connections=600]
    healthcheck:
      test: pg_isready -U safeline-ce -d safeline-ce
  mgt:
    container_name: safeline-mgt
    restart: always
    image: ${IMAGE_PREFIX}/safeline-mgt${REGION}${ARCH_SUFFIX}:${IMAGE_TAG:?image tag required}
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ${SAFELINE_DIR}/resources/mgt:/app/data
      - ${SAFELINE_DIR}/logs/nginx:/app/log/nginx:z
      - ${SAFELINE_DIR}/resources/sock:/app/sock
      - /var/run:/app/run
    ports:
      - ${MGT_PORT:-9443}:1443
    healthcheck:
      test: curl -k -f https://localhost:1443/api/open/health
    environment:
      - MGT_PG=postgres://safeline-ce:${POSTGRES_PASSWORD}@safeline-pg/safeline-ce?sslmode=disable
      - MGT_PROXY=${MGT_PROXY}
    depends_on:
      - postgres
      - fvm
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "5"
    networks:
      safeline-ce:
        ipv4_address: ${SUBNET_PREFIX}.4
  detect:
    container_name: safeline-detector
    restart: always
    image: ${IMAGE_PREFIX}/safeline-detector${REGION}${ARCH_SUFFIX}:${IMAGE_TAG}
    volumes:
      - ${SAFELINE_DIR}/resources/detector:/resources/detector
      - ${SAFELINE_DIR}/logs/detector:/logs/detector
      - /etc/localtime:/etc/localtime:ro
    environment:
      - LOG_DIR=/logs/detector
    networks:
      safeline-ce:
        ipv4_address: ${SUBNET_PREFIX}.5
  tengine:
    container_name: safeline-tengine
    restart: always
    image: ${IMAGE_PREFIX}/safeline-tengine${REGION}${ARCH_SUFFIX}:${IMAGE_TAG}
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/resolv.conf:/etc/resolv.conf:ro
      - ${SAFELINE_DIR}/resources/nginx:/etc/nginx
      - ${SAFELINE_DIR}/resources/detector:/resources/detector
      - ${SAFELINE_DIR}/resources/chaos:/resources/chaos
      - ${SAFELINE_DIR}/logs/nginx:/var/log/nginx:z
      - ${SAFELINE_DIR}/resources/cache:/usr/local/nginx/cache
      - ${SAFELINE_DIR}/resources/sock:/app/sock
    environment:
      - TCD_MGT_API=https://${SUBNET_PREFIX}.4:1443/api/open/publish/server
      - TCD_SNSERVER=${SUBNET_PREFIX}.5:8000
      # deprecated
      - SNSERVER_ADDR=${SUBNET_PREFIX}.5:8000
      - CHAOS_ADDR=${SUBNET_PREFIX}.10
    ulimits:
      nofile: 131072
    network_mode: host
  luigi:
    container_name: safeline-luigi
    restart: always
    image: ${IMAGE_PREFIX}/safeline-luigi${REGION}${ARCH_SUFFIX}:${IMAGE_TAG}
    environment:
      - MGT_IP=${SUBNET_PREFIX}.4
      - LUIGI_PG=postgres://safeline-ce:${POSTGRES_PASSWORD}@safeline-pg/safeline-ce?sslmode=disable
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ${SAFELINE_DIR}/resources/luigi:/app/data
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "5"
    depends_on:
      - detect
      - mgt
    networks:
      safeline-ce:
        ipv4_address: ${SUBNET_PREFIX}.7
  fvm:
    container_name: safeline-fvm
    restart: always
    image: ${IMAGE_PREFIX}/safeline-fvm${REGION}${ARCH_SUFFIX}:${IMAGE_TAG}
    volumes:
      - /etc/localtime:/etc/localtime:ro
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "5"
    networks:
      safeline-ce:
        ipv4_address: ${SUBNET_PREFIX}.8
  chaos:
    container_name: safeline-chaos
    restart: always
    image: ${IMAGE_PREFIX}/safeline-chaos${REGION}${ARCH_SUFFIX}:${IMAGE_TAG}
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "10"
    environment:
      - DB_ADDR=postgres://safeline-ce:${POSTGRES_PASSWORD}@safeline-pg/safeline-ce?sslmode=disable
    volumes:
      - ${SAFELINE_DIR}/resources/sock:/app/sock
      - ${SAFELINE_DIR}/resources/chaos:/app/chaos
    networks:
      safeline-ce:
        ipv4_address: ${SUBNET_PREFIX}.10

.env 文件

SAFELINE_DIR=/vol1/1000/docker/safeline
IMAGE_TAG=latest
MGT_PORT=9443
POSTGRES_PASSWORD=WrKvo1VfKMRFWHZsPMZC
SUBNET_PREFIX=172.22.222
IMAGE_PREFIX=swr.cn-east-3.myhuaweicloud.com/chaitin-safeline
ARCH_SUFFIX=
RELEASE=
REGION=
MGT_PROXY=0

参数说明(只说需要修改部分)

:::SAFELINE_DIR:安装目录,放到 docker 路径方便管理

POSTGRES_PASSWORD:数据库的初始化密码,使用数字+英文大小写组合,勿使用特殊字符

SUBNET_PREFIX:一般默认就行,提示有冲突的话再改

:::

创建 safeline 文件夹,将两个文件放到里面(注意是 .env,不是 env)

创建项目,选择上面路径就会自动导入配置

TIP:有可能提示一键有 SUBNET_PREFIX 配置的网关,随便修改一个没有的就行,比如我改为“192.168.0”

正常情况是全部都启动了

使用

浏览器中输入 https://NAS的IP:9443 就能看到界面,注意是 HTTPS 协议


点击“同意,开始使用”

重置密码

如果是手动部署的,可能会找不到初始化的管理员账号和密码,需要重置密码

找到 safeline-mgt 容器,在终端里输入下面命令

resetadmin

TIP:也可以直接连接 SSH,输入下面命令

docker exec safeline-mgt resetadmin

修改密码

输入管理员用户名和密码,进行登录

管理面板界面挺清爽的

通用设置 -》 控制台管理 -》 编辑

输入要修改密码

添加站点

这里我以下面一个 Web 站点演示(一般来说,雷池和被防护的站点不是同一个服务器)

防护应用 -》添加应用

默认会有两个端口,分别是 HTTP 和 HTTPS

修改端口号(根据需要保留一个 HTTP 就行,使用 HTTPS 需要证书,后面也会讲这么添加证书),到时候就是通过这个端口访问页面的了。

填写上游服务器(需要防护的 Web 网站)和应用名称

这样添加成功了(可以编辑详细防护信息,这里就不展开说了)

浏览器访问 9080 端口(IP 地址和雷池一样的),可以正常访问

添加证书

有些部署的网页是需要 HTTPS 访问,这时候就需要添加证书

TIP:这里演示本地生成 SSL 证书,可以用于局域网里访问。

使用 SSH 工具连接 NAS 设备,依次输入下面命令

//切换为 root 用户权限sudo -i//找个路径用于存放生产证书文件(按实际情况填写路径)cd /vol1/1000/docker//生成不带加密的私钥openssl genrsa -out server.key 2048//生成证书请求,需要填写一下信息(可以一路回车不填)openssl req -new -key server.key -out server.csr//生成证书文件openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

打开文件管理器,就能看到生成的证书,证书请求和私钥(一般需要用到的是证书和私钥,中间那个可以删掉不要)

根据提示,上传证书和私钥

可以看到证书已经添加成功了

来到刚刚添加防护的站点,点击详情

点击编辑基础配置

添加一个 HTTPS 的端口

选择刚刚添加的证书

添加以后,就有两个端口都可以访问了

现在就可以使用 HTTPS 访问了

总结

由于我平时很少用这类应用,所以很多功能也没有展开讲解设置,有需要可以去官网有详细的文档介绍。初次上手使用还是很简单的,有非常直观的 UI 界面展示各类信息。有需要的推荐可以部署试试,于有没有什么很大的效果,因为我不太懂这方面,反正聊胜于无吧。

要说有什么麻烦的地方,就是关联的容器太多了,要是封装成一个 all in one 就更方便了。资源占用情况,内存占用大概有 1GB 还是比较多的,倒是不怎么吃 CPU 性能。

综合推荐:⭐⭐⭐(有站点防护需求,值得部署)

使用体验:⭐⭐⭐⭐(上手简单,界面大气)

部署难易:⭐⭐(简单)︎

收藏
送赞 4
分享

2

主题

30

回帖

0

牛值

江湖小虾

2026-1-31 12:13:59 显示全部楼层

终于用得上了

0

主题

2

回帖

0

牛值

江湖小虾

2026-2-2 18:22:44 显示全部楼层
已部署,安全无小事。

2

主题

17

回帖

0

牛值

江湖小虾

2026-2-3 00:36:32 显示全部楼层

image.png请问这个启动不了什么问题

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
你在 docker-compose.yaml 中已经挂载了宿主机的 /etc/resolv.conf: yaml 编辑 volumes: - /etc/resolv.conf:/etc/resolv.conf:ro 这正是问题来源。请不要直接挂载宿主机的 resolv.conf,而是提供一个只包含  详情 回复
2026-2-3 16:12

3

主题

14

回帖

0

牛值

江湖小虾

2026-2-3 16:12:50 显示全部楼层
独舞 发表于 2026-2-3 00:36
请问这个启动不了什么问题

你在 docker-compose.yaml 中已经挂载了宿主机的 /etc/resolv.conf:
yaml

编辑



volumes:
  - /etc/resolv.conf:/etc/resolv.conf:ro
这正是问题来源。请不要直接挂载宿主机的 resolv.conf,而是提供一个只包含有效 DNS 的干净版本。
步骤:
创建一个干净的 resolv.conf 文件,例如:
bash

编辑



mkdir -p /vol2/1000/docker_AI/safeline/resources
cat > /vol2/1000/docker_AI/safeline/resources/resolv.conf <<EOF
nameserver 8.8.8.8
nameserver 114.114.114.114
EOF
修改 docker-compose.yaml,将 tengine 服务中的:
yaml

编辑



- /etc/resolv.conf:/etc/resolv.conf:ro
替换为:
yaml

编辑



- ${SAFELINE_DIR}/resources/resolv.conf:/etc/resolv.conf:ro
重启服务:
bash

编辑



docker-compose down
docker-compose up -d

1

主题

1638

回帖

780

牛值

共建版主

fnOS1.0上线纪念勋章社区上线纪念勋章社区共建团荣誉勋章飞牛百度网盘玩家

2026-2-3 16:48:18 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=246860&ptid=49315][color=#999999]独舞 发表于 2026-2-3 00:36[/color][/url][/size] 请问这个启动不了什么问题[/quote]

把ipv6的网络关了试试,参考下图:

wechat_2026-02-03_164754_701.jpg

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

6

主题

17

回帖

0

牛值

江湖小虾

2026-2-3 19:59:49 显示全部楼层

配置了雷池无法飞牛无法用自己域名app登录

同样问题,解决了吗  详情 回复
2026-2-4 12:52

1

主题

1

回帖

0

牛值

江湖小虾

2026-2-4 00:08:44 显示全部楼层
开始一切正常,重启下飞牛,就一直这样是什么问题?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

0

主题

4

回帖

0

牛值

江湖小虾

2026-2-4 12:52:33 显示全部楼层
广恪盟科技 发表于 2026-2-3 19:59
配置了雷池无法飞牛无法用自己域名app登录

同样问题,解决了吗
解决了  详情 回复
2026-2-6 15:23

9

主题

38

回帖

0

牛值

初出茅庐

2026-2-4 14:03:37 显示全部楼层

ARM要是有免费的WAF就好了

0

主题

19

回帖

0

牛值

江湖小虾

2026-2-5 18:45:31 显示全部楼层
能请教一个问题吗?我按照教程设置用内网IP可以正常访问 如果是用域名呢?该如何解析和设置域名?新手请大佬指导一下,感谢!

6

主题

17

回帖

0

牛值

江湖小虾

2026-2-6 15:23:25 显示全部楼层
kukecl 发表于 2026-2-4 12:52
同样问题,解决了吗

解决了

0

主题

1

回帖

0

牛值

江湖小虾

2026-2-13 02:10:13 显示全部楼层

我部署之后必须要关闭飞牛自带的防火墙才能外网直接登录时什么原因,防火墙里面雷池转发端口已经设置好了但是就是不行。

1

主题

2

回帖

0

牛值

江湖小虾

飞牛百度网盘玩家

2026-2-17 19:54:02 显示全部楼层

好东西,收藏一下

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则