大家在部署docker应用时,总会担心被别人恶意攻击,今天给教同学基于docker搭建一套waf防火墙,雷池 WAF。里面内嵌了许多拦截规则,可以在某些程度上提供一些安全保护。
官网地址:https://waf-ce.chaitin.cn/
要求: 飞牛,域名,公网ip(ipv4\ipv6)
作用: 一个域名一个应用
可以是顶级域名,二级域名,三级域名等
废话不多说,直接上干货
第一步:
创建安装目录
由于飞牛控制面板没法创建文件,我们进到终端去创建
#切换成管理员
sudo -i
复制文件路径
cd #你的文件路径
例如:
创建环境文件
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,点击新增项目
输入项目名,safeline
选择安装目录
选择创建docker-compsoe.yml
粘贴代码
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
点击完成后等它构建,根据网络不同,稍微等几分钟
出现 Exited:0 证明已经构建成功
我们可以到容器看一下是否,已经启动成功,搜索框输入safeline
浏览器输入 【你的IP】:9443
浏览器会提示不安全,点击高级,继续访问
查看密码
进入终端
docker exec safeline-mgt resetadmin
用户名是:admin
密码是:ME3teChK
进入页面就算是成功了一半
第三步:
防护站点
先申请一个证书,有证书的同学,可以直接上传证书
证书管理
添加证书
申请免费证书
输入域名
输入邮箱
输入的域名需要已经是配置过域名解析的域名
申请成功
到这一步,先停一下,我们回到飞牛去创建docker应用
以 music_tag_web 为例,我们创建一个docker应用
选择music_tag_web 镜像,创建容器。
端口可以不写,知道容器运行的端口即可
配置存储位置
网络选择‘safeline-ce’
需要内网访问就勾‘bridge’,需要配置端口,根据不同的网络环境,有可能被暴露到公网,演示环境,我就不勾了,各位同学根据自身需求选择。
点击下一步,点击创建
启动成功
查看music_tag_web 的ip
打开容器终端
cat /etc/hosts
我们回到safeline继续
站点管理
添加站点
配置完成
验证一下
浏览器输入你的域名,不用带端口,因为我们监听了http的80端口和https的443端口
到这一步,大功告成。。。。。
还差一步,为了使飞牛自带的浏览器应用也能访问,我们需要改一下它的网络配置
打开docker,点击容器,找到chromium,点击编辑
别忘了,暂停应用
保存退出后重启。
如果在飞牛桌面看不到浏览器,那就进应用中心找到浏览器,点击启动即可。
进到浏览器,输入music_tag_web 的ip:端口
完结撒花。 |