收起左侧

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

0
回复
465
查看
[ 复制链接 ]

108

主题

11

回帖

0

牛值

小有名气

fnOS1.0上线纪念勋章社区上线纪念勋章

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 性能。

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

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

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

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则