担心docker部署的应用安全,担心隐私泄露?雷池 WAF

发表于:6 天前 Docker 46

大家在部署docker应用时,总会担心被别人恶意攻击,今天给教同学基于docker搭建一套waf防火墙,雷池 WAF。里面内嵌了许多拦截规则,可以在某些程度上提供一些安全保护。

官网地址:https://waf-ce.chaitin.cn/

要求: 飞牛,域名,公网ip(ipv4\ipv6)

作用: 一个域名一个应用

可以是顶级域名,二级域名,三级域名等

废话不多说,直接上干货

第一步:

创建安装目录

image.png

由于飞牛控制面板没法创建文件,我们进到终端去创建

#切换成管理员
sudo -i

复制文件路径

image.png

cd #你的文件路径

例如:

image.png

创建环境文件

vim .env

按键盘的 “i” 进入编辑模式

#雷池安装目录
SAFELINE_DIR=你的安装目录

#要安装的雷池版本,保持默认的 `latest` 即可
IMAGE_TAG=latest

#雷池控制台的端口,保持默认的 `9443` 即可
MGT_PORT=9443

#雷池所需数据库的初始化密码
POSTGRES_PASSWORD=你的密码

#雷池内部网络的网段,保持默认的 `172.22.222` 即可
SUBNET_PREFIX=172.22.222

#雷池镜像源的前缀,建议根据服务器地理位置选择合适的源
IMAGE_PREFIX=swr.cn-east-3.myhuaweicloud.com/chaitin-safeline

#雷池架构的后缀,ARM 服务器需要配置为 `-arm` 飞牛可以不设置
#ARCH_SUFFIX=

#更新通道,LTS 版本需要配置为 `-lts`,飞牛可以不设置
#RELEASE=

#地区,飞牛可以不设置
#REGION=

按esc后, :wq 保存退出

如果不会操作终端也可以在电脑上创建文件名为 .env 的文件,然后上传到安装的目录

第二步:

点击飞牛的docker,选择 compose,点击新增项目

image.png

输入项目名,safeline

image.png

选择安装目录

image.png

选择创建docker-compsoe.yml

image.png

粘贴代码

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}${RELEASE}{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
    depends_on:
      - postgres
      - fvm
    logging:
      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}${RELEASE}{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}${RELEASE}{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}${RELEASE}{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:
      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}${RELEASE}{IMAGE_TAG}
    volumes:
      - /etc/localtime:/etc/localtime:ro
    logging:
      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}${RELEASE}{IMAGE_TAG}
    logging:
      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

点击完成后等它构建,根据网络不同,稍微等几分钟

image.png

出现 Exited:0 证明已经构建成功

image.png

我们可以到容器看一下是否,已经启动成功,搜索框输入safeline

image.png

浏览器输入 【你的IP】:9443

浏览器会提示不安全,点击高级,继续访问

image.png

查看密码

进入终端

docker exec safeline-mgt resetadmin

image.png

用户名是:admin 密码是:ME3teChK

进入页面就算是成功了一半

image.png

第三步:

防护站点

先申请一个证书,有证书的同学,可以直接上传证书

证书管理

image.png

添加证书

申请免费证书

输入域名 输入邮箱

输入的域名需要已经是配置过域名解析的域名

image.png

申请成功

image.png

到这一步,先停一下,我们回到飞牛去创建docker应用

以 music_tag_web 为例,我们创建一个docker应用

选择music_tag_web 镜像,创建容器。

image.png

端口可以不写,知道容器运行的端口即可

image.png

配置存储位置

image.png

网络选择‘safeline-ce’

需要内网访问就勾‘bridge’,需要配置端口,根据不同的网络环境,有可能被暴露到公网,演示环境,我就不勾了,各位同学根据自身需求选择。

image.png

点击下一步,点击创建

image.png

启动成功

image.png

查看music_tag_web 的ip

打开容器终端

cat /etc/hosts

image.png

我们回到safeline继续

站点管理

image.png

添加站点

image.png

配置完成

image.png

验证一下

浏览器输入你的域名,不用带端口,因为我们监听了http的80端口和https的443端口

image.png

到这一步,大功告成。。。。。

还差一步,为了使飞牛自带的浏览器应用也能访问,我们需要改一下它的网络配置

打开docker,点击容器,找到chromium,点击编辑

别忘了,暂停应用

image.png

image.png

保存退出后重启。

如果在飞牛桌面看不到浏览器,那就进应用中心找到浏览器,点击启动即可。

进到浏览器,输入music_tag_web 的ip:端口

image.png

完结撒花。

收藏
送赞
分享

发表回复

话题