长亭百川云

长亭百川云

技术讨论长亭漏洞情报库IP 威胁情报SLA在线工具
热门产品
雷池 WAF 社区版
IP 威胁情报
网站安全监测
百川漏扫服务
云堡垒机
百川云
技术文档
开发工具
长亭漏洞情报库
网安百科
安全社区
CT STACK 安全社区
雷池社区版
XRAY 扫描工具
长亭科技
长亭科技官网
万众合作伙伴商城
长亭 BBS 论坛
友情链接
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备2024055124号-2

长亭百川云

热门应用
查看更多
雷池 WAF 社区版
IP 威胁情报
网站安全监测
SSL 证书服务
https://rivers-collie.oss-accelerate.aliyuncs.com/cyber-wiki-prod/image/952d39f311aa1c4c23f32968b7cd45a1.png
雷池 WAF 社区版
智能语义算法 · 开箱即用 · 高性能高可用性
应用介绍
https://rivers-collie.oss-accelerate.aliyuncs.com/cyber-wiki-prod/image/ee8f2918e4d99d17f219cb46ec806fde.png
IP 威胁情报
IP 画像查询 · IP 库订阅 · 4 大应用场景
应用介绍
https://rivers-collie.oss-accelerate.aliyuncs.com/cyber-wiki-prod/image/5f3debe40bd86b430564010c75b2cb41.png
网站安全监测
敏感词监控 · 篡改监控 · 恶意链接 · 挂马监控
应用介绍
https://rivers-collie.oss-accelerate.aliyuncs.com/cyber-wiki-prod/image/4c6052bcaddaa7698c0257719b76cef2.png
SSL 证书服务
快速颁发 · 证书监控 · 极高性价比 · DV-OV-EV
应用介绍

热门讨论

查看更多

docker 安全部署 Wordpress 方案(单服务器 +safeline+mariadb+redis)

头像

Paddy

更新于 11 小时前

前言:部署一个既强大又安全的个人博客

   近期,我和许多朋友一样都入手了自己的云服务器,拥有了自己的第一块“数字自留地”。

   总不能闲着不用叭,用其来部署一个个人博客站,记录成长、分享生活是一个好的选择。博客框架有很多,我想更多的专注于内容创作所以选择了老牌**WordPress**。

   然而,WordPress的巨大市场份额也使其成为黑客与自动化攻击脚本的重点关注对象。因此,**如何为其筑起坚固的防线?**(其实是我喜欢瞎折腾啦

   虽然WordPress部署教程有很多,本篇部署方案的重点在于在单个服务器上,使用**长亭Safeline雷池Web应用防火墙**代替常用的Nginx。

通过Docker容器化技术,我们将构建一个由Safeline WAF作为安全网关,内部集成MariaDB数据库与Redis缓存的高效、安全的WordPress站点。

部署成果:https://www.paddysun.top/ 欢迎来我的个人博客玩呀

核心组件简介

  1. WordPress

    1. 是什么:一款全球最流行的开源内容管理系统(CMS),以其强大的功能、灵活的可扩展性(海量主题与插件)和友好的用户体验而闻名。无论是个人博客、企业官网还是电商平台,它都能胜任。

    2. 在本文中的角色:我们网站的核心应用,提供内容创作和管理的所有功能。

  2. 长亭 Safeline WAF

    1. 是什么:一款业界领先的、开箱即用的Web应用防火墙产品。它像一位忠诚的卫士,守候在网站的最前沿,对所有外来访问请求进行检测和过滤,能有效防御SQL注入、跨站脚本(XSS)、恶意爬虫等常见的Web攻击。

    2. 在本文中的角色:我们的“安全网关”。所有公网流量都必须先经过它的审查,确认安全无害后,才会被转发给内网的WordPress容器。WordPress本身则不直接暴露在公网上,极大地提升了安全性。

实现 “既享受WordPress的便捷与强大,又拥有可靠的安全防护”

本部署方案关键优势

  1. 单服务器:成本低

  2. 安全防护:所有流量经过 Safeline WAF 防护

  3. 网络隔离:WordPress 不直接暴露在公网

  4. 详细得不行(大概叭:我折腾了1个月,稳定运行1个月的实际部署方案

这种架构既保证了安全性,又保持了 WordPress 的完整功能。

具体部署方案 (个人博客实战检验稳定运行)

购买并登云服务器

  • 选择 Linux 系统镜像

  • 确保云和系统安全组开放端口:80, 443

  • 通过 SSH 登录服务器:ssh ubuntu@your-server-ip

0.服务器准备&docker安装

1# 更新系统
2sudo apt update && sudo apt upgrade -y
3
4# 安装 Docker
5sudo apt install docker.io -y
6
7# 安装 Docker Compose
8sudo apt install docker-compose-plugin -y
9
10# 验证安装
11docker --version
12docker compose version
13
14# 确保云防火墙和服务器系统放行80和443端口

1.safeline docker安装

safeline docker安装教程摘录自官方文档 长亭官方安装教程

1.1.创建雷池目录

1mkdir -p "/data/safeline"

该命令会创建 /data/safeline 目录作为雷池的安装目录(你可以根据你的实际情况选择安装目录)
请确保该目录至少有 5GB 的存储空间(如果日常流量较大,请保证充足的磁盘容量)

1.2.下载 compose 编排脚本

使用下方的命令进入雷池安装目录,并下载 docker compose 编排脚本

1cd "/data/safeline"
2wget "https://waf-ce.chaitin.cn/release/latest/compose.yaml"

1.3.配置 compose 环境变量

使用下方的命令进入雷池安装目录,并创建 .env 配置文件

1cd "/data/safeline"
2touch ".env"

使用文本编辑器打开 .env 文件,写入下方的内容,POSTGRES的密码需自定义
具体参数请参考官方文档 长亭官方安装教程

1SAFELINE_DIR=/data/safeline
2IMAGE_TAG=latest
3MGT_PORT=9443
4POSTGRES_PASSWORD=yourpassword #(自定义密码使用数字+英文大小写组合,勿使用特殊字符)
5SUBNET_PREFIX=172.22.222 
6IMAGE_PREFIX=swr.cn-east-3.myhuaweicloud.com/chaitin-safeline
7ARCH_SUFFIX=
8RELEASE=
9REGION=
10MGT_PROXY=0

1.4.启动雷池

现在万事具备,使用以下命令启动雷池服务

1cd "/data/safeline"
2docker compose up -d

2.Wordpress 安装

Wordpress部署方案参考 Docker部署Wordpress (Nginx+Mariadb+redis+Wordpress)
选择合适的目录,创建项目结构

1# 创建项目目录
2mkdir wordpress && cd wordpress
3
4# 创建必要的目录结构
5mkdir -p data/mariadb/{conf,logs}
6mkdir -p data/redis/{conf,log,data}
7mkdir -p data/wordpress/{html,php}
8
9# 设置目录权限
10sudo chmod -R 755 data/

3. 创建配置文件

3.1 修改后的 docker-compose.yml(关键修改)

1# docker-compose.yml
2services:
3  mariadb:
4    image: mariadb:10
5    container_name: mariadb
6    restart: always
7    volumes:
8      - ./data/mariadb/conf:/etc/mysql/conf.d
9      - ./data/mariadb/logs:/logs
10      - wordpress-db-data:/var/lib/mysql
11    environment:
12      MARIADB_DATABASE: wordpress
13      MARIADB_USER: ${DB_USER:-wordpress_user}
14      MARIADB_PASSWORD: ${DB_PASSWORD:-secure_password_123}
15      MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-very_secure_root_password_123}
16      TZ: Asia/Shanghai
17    networks:
18      - wordpress_network
19
20  redis:
21    image: redis:alpine
22    container_name: redis
23    restart: always
24    volumes:
25      - ./data/redis/log/redis.log:/etc/redis.log
26      - ./data/redis/conf/redis.conf:/etc/redis/redis.conf
27      - ./data/redis/data:/data
28    networks:
29      - wordpress_network
30
31  wordpress:
32    depends_on:
33      - mariadb
34      - redis
35    image: wordpress:latest
36    container_name: wordpress
37    restart: always
38    volumes:
39      - ./data/wordpress/html:/var/www/html
40      - ./data/wordpress/php/upload.ini:/usr/local/etc/php/conf.d/upload.ini
41    environment:
42      WORDPRESS_DB_HOST: mariadb
43      WORDPRESS_DB_USER: ${DB_USER:-wordpress_user}
44      WORDPRESS_DB_PASSWORD: ${DB_PASSWORD:-secure_password_123}
45      WORDPRESS_DB_NAME: wordpress
46      TZ: Asia/Shanghai
47      # 重要!:不可以设置 WordPress 站点 URL 和主页地址 要不然之后无法修改
48      # WORDPRESS_CONFIG_EXTRA: |
49      #  define('WP_HOME', 'https://${DOMAIN}');
50      #  define('WP_SITEURL', 'https://${DOMAIN}');
51    networks:
52      - wordpress_network
53    # 重要:不直接暴露端口到宿主机,只在Docker内网访问
54    expose:
55      - "80"
56
57networks:
58  wordpress_network:
59
60volumes:
61  wordpress-db-data:

3.2 创建环境变量文件

1# 创建 .env 文件存储敏感信息
2cat > .env << EOF
3# 数据库配置
4DB_USER= #(你的数据库用户名称)
5DB_PASSWORD= #(你的安全密码)
6DB_ROOT_PASSWORD= #(你的安全密码)
7
8# 域名配置
9DOMAIN= #你的域名
10SERVER_IP= #你的IP 
11
12# WordPress 容器配置
13
14WORDPRESS_PORT=80
15WORDPRESS_CONTAINER_NAME=wordpress
16EOF
17
18# 保护环境文件权限,若要以非root启动,则暂时不必配置权限
19chmod 600 .env

3.3 创建 Redis 配置

1# 下载 Redis 配置文件
2wget -O ./data/redis/conf/redis.conf http://download.redis.io/redis-stable/redis.conf
3
4# 修改 Redis 配置
5sed -i 's/^bind 127.0.0.1/bind 0.0.0.0/' ./data/redis/conf/redis.conf
6sed -i 's/^protected-mode yes/protected-mode no/' ./data/redis/conf/redis.conf
7sed -i 's/^daemonize yes/daemonize no/' ./data/redis/conf/redis.conf
8echo 'logfile "/etc/redis.log"' >> ./data/redis/conf/redis.conf
9echo 'maxmemory 1gb' >> ./data/redis/conf/redis.conf
10echo 'maxmemory-policy allkeys-lru' >> ./data/redis/conf/redis.conf
11
12# 创建日志文件
13touch ./data/redis/log/redis.log
14chmod 666 ./data/redis/log/redis.log

3.4 创建 PHP 上传配置

1# 创建 PHP 配置目录
2mkdir -p ./data/wordpress/php/
3
4# 创建 upload.ini 文件
5cat > ./data/wordpress/php/upload.ini << EOF
6file_uploads = On
7memory_limit = 256M
8upload_max_filesize = 100M
9post_max_size = 100M
10max_execution_time = 300
11EOF

4. 启动 WordPress 服务

1# 启动所有服务
2docker compose --env-file .env up -d
3
4# 查看服务状态
5docker compose ps
6
7# 查看 WordPress 日志
8docker compose logs -f wordpress

5. 配置 Safeline 反向代理

因为WordPress和safeline处于不同的docker和网络, 现在需要在 Safeline 管理界面添加 WordPress 站点, 这样safeline才能与WordPres通讯.

5.1 获取 WordPress 容器网络IP

1# 将 WordPress 相关容器连接到 Safeline 网络
2sudo docker network connect safeline-ce wordpress
3
4# 查看 safeline-ce 网络中 wordpress 容器的 IP 地址
5sudo docker inspect safeline-ce
6# 将"Name": "wordpress"块的IP地址记录下来

5.2 在 Safeline 中添加站点

  1. 登录 Safeline 管理界面:https://您的服务器IP:9443

添加防护站点

  1. 站点名称:wordpress或者你喜欢的名称

  2. 上游服务器:WordPress 容器的实际 IP地址

  3. 访问域名:your-domain.com没有域名就填服务器公网IP

  4. 协议:HTTP(如果配置了 HTTPS 证书则选择 HTTPS)

配置监听端口:

  1. 监听端口:80 和 443(若要开启HTTPS则必须监听443端口)

  2. 确保 Safeline 监听的端口在防火墙中开放

5.3 配置 DNS 解析

将您的域名 your-domain.com 解析到服务器 IP: 您的服务器IP地址

6. 完成 WordPress 安装

  1. 通过 Safeline 访问您的网站:https://your-domain.com或者公网IP

  2. 按照 WordPress 安装向导完成安装

  3. 选择语言、设置站点标题、管理员账号等信息

7. WordPress 安全加固

7.1 修改默认设置

1# WordPress 初始化完成后操作
2# 进入2.中选择的Wordpress对应根目录下
3cd /你的/目录/地址
4# 修改默认数据库表前缀
5if [ -f "./data/wordpress/html/wp-config.php" ]; then
6    sed -i "s/\$table_prefix = 'wp_';/\$table_prefix = 'wp_$(openssl rand -hex 3)_';/" ./data/wordpress/html/wp-config.php
7    echo "数据库表前缀已修改"
8fi

7.2 设置文件权限

1# 设置正确的文件权限
2sudo chown -R www-data:www-data ./data/wordpress/html/
3sudo find ./data/wordpress/html/ -type d -exec chmod 755 {} \;
4sudo find ./data/wordpress/html/ -type f -exec chmod 644 {} \;

8. 验证配置

8.1 检查 Safeline 防护

访问您的网站,确认:

  • 网站正常访问

  • Safeline 的防护功能正常工作

  • 如果需要强制重定向到HTTPS 重定向正常(如果配置了 SSL),可以在wordpress后台配置站点名URL

1# 进入WordPress /wp-admin/ 后台-设置-常规命令页面 进行配置
2# https://你的网址/wp-admin/options-general.php
3
4WordPress 地址(URL)	https://www.paddysun.top
5站点地址(URL)	https://www.paddysun.top

8.2 测试 WordPress 功能

测试以下功能确保正常工作:

  • 文章发布

  • 图片上传

  • 插件安装

  • 主题切换

9. 管理命令

1# 停止服务
2docker compose down
3
4# 重启服务
5docker compose restart
6
7# 查看服务状态
8docker compose ps
9
10# 查看日志
11docker compose logs wordpress
12
13# 备份数据库
14docker compose exec mariadb mysqldump -u root -p wordpress > backup.sql

10.建议

不建议开启safeline Bot防护,开启bot防护也记得将RSS等路径排除。

记得定期维护,更新系统 WordPress 核心、主题和插件等。

建议部署完成后创建系统镜像。

本文最早发布于 https://www.paddysun.top/,采用 共享-署名-非商用-相同方式共享 4.0 国际许可协议 进行许可。投稿至长亭内容创作者计划,希望能够获得雷池专业版授权体验一下 QaQ。

# 雷池 WAF

0

1

雷池规则广场:恶意操作IP

头像

希涵

更新于 1 天前

规则地址

规则库说明

恶意操作

在正常网站上进行恶意操作的神人IP

# 雷池 WAF

0

2

fvm snserver 进程分别有十几个,正常吗,内存爆了

头像

刘鑫

更新于 2 天前

fvm snserver 进程分别有十几个,正常吗,内存爆了

# 雷池 WAF

0

2

建议升级postgres数据库版本

头像

time flies

更新于 2 天前

最新版本9.2.7数据库版本不postgresql15.2,建议升级数据库版本到17,性能更好!

# 雷池 WAF

1

16

公司官网安装waf需要购买商业授权吗?

头像

Dawn

更新于 2 天前

如题,一直有这个疑问,给公司的官网安装雷池的waf,需不需要购买授权?

# 雷池 WAF

0

3

雷池社区版自动化更新SSL证书(基于DNS验证)

头像

突突突

更新于 3 天前

前言

从2023年下半年开始,各大云厂商的免费证书陆续从有效期一年变成了有效期三个月,这对广大的个人用户来讲是一件很不好的事情,因为这样就意味着每三个月就需要重新申请一次证书并部署。

雷池虽然自带了一个通过 Let's Encrypt 来申请证书的功能,但只支持申请时长为3个月的免费证书,但也没有自动续签的功能,所以作者就写了一个用于自动化更新雷池SSL证书的工具。

工具介绍

这款工具使用golang编写(go语言写的多了,就没想过用其他语言了),通过 Let's Encrypt 的 DNS-01 challenge 来进行验证并申请新的证书,替换原有的证书来实现自动更新。

目前DNS验证暂时仅支持:腾讯云、 阿里云、 华为云、 西部数码、 雨云,如果有小伙伴使用的是其他的域名服务提供商,欢迎在评论区留言,作者会在收到留言后会进行相应的更新。

项目地址:

github: https://github.com/Wink541/SafelineAPI

个人gitea: https://gitea.doicat.com/duoduo/SafelineAPI

工具使用

1. 下载项目

$ git clone https://github.com/Wink541/SafelineAPI

2. 编译项目

$ cd SafelineAPI
$ go build -o safelineApi ./cmd/safelineApi/main.go

// 可根据不同平台来设定不同的编译环境
$ go env -w GOOS=linux    //编译环境修改为linux,可选: linux/windows/darwin
$ go env -w GOARCH=amd64  //编辑架构修改为amd64,可选: amd64/arm64

3. 配置文件编辑

{
	"SafeLine": {
		"Host": {
			"HostName": "192.168.1.4",
			"Port": "1443"
		},
		"ApiToken": "xxx"
	},
	"ApplyCert": {
		"Days": 30,
		"Email": "xxx",
		"SavePath": "/tmp/ssl",
		"DNSProviderConfig": {
			"DNSProvider": "xxx",
			"TencentCloud": {
				"SecretId": "xxx",
				"SecretKey": "xxx"
			},
			"AliCloud": {
				"AccessKeyId": "xxx",
				"AccessKeySecret": "xxx",
				"RAMRole": "xxx(可选)",
				"STSToken": "xxx(可选)"
			},
			"HuaweiCloud": {
				"AccessKeyId": "xxx",
				"Region": "xxx",
				"SecretAccessKey": "xxx"
			},
			"WestCN": {
				"Username": "xxx",
				"Password": "xxx"
			},
			"RainYun": {
				"ApiKey": "xxx"
			}
		}
	}
}

参数介绍:

  • SafeLine

    • HostName : 雷池管理后台地址。默认为 safeline-mgt 容器IP;

    • Port : 雷池管理后台端口。默认为 1443 ;

    • ApiToken : 雷池接口API Token ,从控制台获取;

  • ApplyCert

    • Days : 过期时间,默认当证书剩余有效期小于该值时,则对证书进行更新;

    • Email : 申请证书时所使用的邮箱;

    • SavePath : 申请证书临时保存位置;

    • DNSProviderConfig : DNS服务提供商配置

      • DNSProvider : 域名服务提供商,可选 TencentCloud/AliCloud/HuaweiCloud/WestCN/RainYun ,下列的相关参数为云服务平台账号的凭据。

执行文件

$ ./safelineApi ./config.json    //<可执行文件路径> <配置文件路径>

计划任务(可选)

0 0 1,31 * * root /opt/safelineApi/safelineApi /opt/safelineApi/config.json > /opt/safelineApi/app.log

工具效果

工具执行前证书有效期如图:

测试环境,过期时间设定为90天

工具执行部分日志如下:

[SUCCESS] 2025/04/15 21:36:07 SafeLine 相关配置检验完成!
[INFO]    2025/04/15 21:36:07 ApplyCert 相关配置检验完成!
[INFO]    2025/04/15 21:36:07 配置检查完毕,即将开始更新证书!
[INFO]    2025/04/15 21:36:07 本次需要更新证书数量有 6 个
2025/04/15 21:36:08 [INFO] acme: Registering account for admin@example.com
2025/04/15 21:36:09 [INFO] [www.doicat.com] acme: Obtaining bundled SAN certificate
2025/04/15 21:36:10 [INFO] [www.doicat.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/xxxxxxxxxx/xxxxxxxxxxxx
2025/04/15 21:36:10 [INFO] [www.doicat.com] acme: Could not find solver for: tls-alpn-01
2025/04/15 21:36:10 [INFO] [www.doicat.com] acme: Could not find solver for: http-01
2025/04/15 21:36:10 [INFO] [www.doicat.com] acme: use dns-01 solver
2025/04/15 21:36:10 [INFO] [www.doicat.com] acme: Preparing to solve DNS-01
2025/04/15 21:36:12 [INFO] [www.doicat.com] acme: Trying to solve DNS-01
2025/04/15 21:36:12 [INFO] [www.doicat.com] acme: Checking DNS record propagation. [nameservers=183.60.83.19:53,183.60.82.98:53]
2025/04/15 21:36:14 [INFO] Wait for propagation [timeout: 1m0s, interval: 2s]
2025/04/15 21:36:22 [INFO] [www.doicat.com] The server validated our request
2025/04/15 21:36:22 [INFO] [www.doicat.com] acme: Cleaning DNS-01 challenge
2025/04/15 21:36:24 [INFO] [www.doicat.com] acme: Validations succeeded; requesting certificates
2025/04/15 21:36:27 [INFO] [www.doicat.com] Server responded with a certificate.
[SUCCESS] 2025/04/15 21:36:43 域名 [www.doicat.com] 证书更新成功!

执行后证书更新如下:

结尾

这个简单的项目就到这里了,主要还是为了解决证书更新的问题,文章内容不是很丰富(由于最近学业较繁忙,凭据申请的方法就没有去收集,各位可以上官网查询文档来获取),项目还是有需要完善的地方,有想法的小伙伴可以前往原文 雷池社区版自动化更新SSL证书 留言,在条件允许的情况下会尽力去实现。

# 雷池 WAF
# SSL 证书
技术资料

1

6

IP 威胁情报

查看更多

当前 IP

查看 IP 风险画像
地理信息
ISP
运营商
最后更新时间
-

长亭漏洞情报库

查看更多
东方通应用服务器 EJB 反序列化远程代码执行漏洞
泛微e-cology 前台SQL注入漏洞
用友 U8 Cloud pubsmsservlet 远程代码执行漏洞
Oracle E-Business Suite 远程代码执行漏洞
用友 U8 Cloud NCCloudGatewayServlet 命令执行漏洞
用友 U8 Cloud IPFxxFileService 任意文件上传漏洞
用友 U8 Cloud 文件上传绕过漏洞
Docker Desktop Engine API 未授权访问漏洞
Smartbi 远程代码执行漏洞
Cherry Studio 命令注入漏洞
雷池 WAF 社区版
智能语义算法 · 开箱即用 · 高性能高可用性
应用文档
IP 威胁情报
IP 画像查询 · IP 库订阅 · 4 大应用场景
应用文档
网站安全监测
敏感词监控 · 篡改监控 · 恶意链接 · 挂马监控
应用文档
SSL 证书服务
快速颁发 · 证书监控 · 极高性价比 · DV-OV-EV
应用文档

docker 安全部署 Wordpress 方案(单服务器 +safeline+mariadb+redis)

头像

Paddy

更新于 11 小时前

前言:部署一个既强大又安全的个人博客

   近期,我和许多朋友一样都入手了自己的云服务器,拥有了自己的第一块“数字自留地”。

   总不能闲着不用叭,用其来部署一个个人博客站,记录成长、分享生活是一个好的选择。博客框架有很多,我想更多的专注于内容创作所以选择了老牌**WordPress**。

   然而,WordPress的巨大市场份额也使其成为黑客与自动化攻击脚本的重点关注对象。因此,**如何为其筑起坚固的防线?**(其实是我喜欢瞎折腾啦

   虽然WordPress部署教程有很多,本篇部署方案的重点在于在单个服务器上,使用**长亭Safeline雷池Web应用防火墙**代替常用的Nginx。

通过Docker容器化技术,我们将构建一个由Safeline WAF作为安全网关,内部集成MariaDB数据库与Redis缓存的高效、安全的WordPress站点。

部署成果:https://www.paddysun.top/ 欢迎来我的个人博客玩呀

核心组件简介

  1. WordPress

    1. 是什么:一款全球最流行的开源内容管理系统(CMS),以其强大的功能、灵活的可扩展性(海量主题与插件)和友好的用户体验而闻名。无论是个人博客、企业官网还是电商平台,它都能胜任。

    2. 在本文中的角色:我们网站的核心应用,提供内容创作和管理的所有功能。

  2. 长亭 Safeline WAF

    1. 是什么:一款业界领先的、开箱即用的Web应用防火墙产品。它像一位忠诚的卫士,守候在网站的最前沿,对所有外来访问请求进行检测和过滤,能有效防御SQL注入、跨站脚本(XSS)、恶意爬虫等常见的Web攻击。

    2. 在本文中的角色:我们的“安全网关”。所有公网流量都必须先经过它的审查,确认安全无害后,才会被转发给内网的WordPress容器。WordPress本身则不直接暴露在公网上,极大地提升了安全性。

实现 “既享受WordPress的便捷与强大,又拥有可靠的安全防护”

本部署方案关键优势

  1. 单服务器:成本低

  2. 安全防护:所有流量经过 Safeline WAF 防护

  3. 网络隔离:WordPress 不直接暴露在公网

  4. 详细得不行(大概叭:我折腾了1个月,稳定运行1个月的实际部署方案

这种架构既保证了安全性,又保持了 WordPress 的完整功能。

具体部署方案 (个人博客实战检验稳定运行)

购买并登云服务器

  • 选择 Linux 系统镜像

  • 确保云和系统安全组开放端口:80, 443

  • 通过 SSH 登录服务器:ssh ubuntu@your-server-ip

0.服务器准备&docker安装

1# 更新系统
2sudo apt update && sudo apt upgrade -y
3
4# 安装 Docker
5sudo apt install docker.io -y
6
7# 安装 Docker Compose
8sudo apt install docker-compose-plugin -y
9
10# 验证安装
11docker --version
12docker compose version
13
14# 确保云防火墙和服务器系统放行80和443端口

1.safeline docker安装

safeline docker安装教程摘录自官方文档 长亭官方安装教程

1.1.创建雷池目录

1mkdir -p "/data/safeline"

该命令会创建 /data/safeline 目录作为雷池的安装目录(你可以根据你的实际情况选择安装目录)
请确保该目录至少有 5GB 的存储空间(如果日常流量较大,请保证充足的磁盘容量)

1.2.下载 compose 编排脚本

使用下方的命令进入雷池安装目录,并下载 docker compose 编排脚本

1cd "/data/safeline"
2wget "https://waf-ce.chaitin.cn/release/latest/compose.yaml"

1.3.配置 compose 环境变量

使用下方的命令进入雷池安装目录,并创建 .env 配置文件

1cd "/data/safeline"
2touch ".env"

使用文本编辑器打开 .env 文件,写入下方的内容,POSTGRES的密码需自定义
具体参数请参考官方文档 长亭官方安装教程

1SAFELINE_DIR=/data/safeline
2IMAGE_TAG=latest
3MGT_PORT=9443
4POSTGRES_PASSWORD=yourpassword #(自定义密码使用数字+英文大小写组合,勿使用特殊字符)
5SUBNET_PREFIX=172.22.222 
6IMAGE_PREFIX=swr.cn-east-3.myhuaweicloud.com/chaitin-safeline
7ARCH_SUFFIX=
8RELEASE=
9REGION=
10MGT_PROXY=0

1.4.启动雷池

现在万事具备,使用以下命令启动雷池服务

1cd "/data/safeline"
2docker compose up -d

2.Wordpress 安装

Wordpress部署方案参考 Docker部署Wordpress (Nginx+Mariadb+redis+Wordpress)
选择合适的目录,创建项目结构

1# 创建项目目录
2mkdir wordpress && cd wordpress
3
4# 创建必要的目录结构
5mkdir -p data/mariadb/{conf,logs}
6mkdir -p data/redis/{conf,log,data}
7mkdir -p data/wordpress/{html,php}
8
9# 设置目录权限
10sudo chmod -R 755 data/

3. 创建配置文件

3.1 修改后的 docker-compose.yml(关键修改)

1# docker-compose.yml
2services:
3  mariadb:
4    image: mariadb:10
5    container_name: mariadb
6    restart: always
7    volumes:
8      - ./data/mariadb/conf:/etc/mysql/conf.d
9      - ./data/mariadb/logs:/logs
10      - wordpress-db-data:/var/lib/mysql
11    environment:
12      MARIADB_DATABASE: wordpress
13      MARIADB_USER: ${DB_USER:-wordpress_user}
14      MARIADB_PASSWORD: ${DB_PASSWORD:-secure_password_123}
15      MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-very_secure_root_password_123}
16      TZ: Asia/Shanghai
17    networks:
18      - wordpress_network
19
20  redis:
21    image: redis:alpine
22    container_name: redis
23    restart: always
24    volumes:
25      - ./data/redis/log/redis.log:/etc/redis.log
26      - ./data/redis/conf/redis.conf:/etc/redis/redis.conf
27      - ./data/redis/data:/data
28    networks:
29      - wordpress_network
30
31  wordpress:
32    depends_on:
33      - mariadb
34      - redis
35    image: wordpress:latest
36    container_name: wordpress
37    restart: always
38    volumes:
39      - ./data/wordpress/html:/var/www/html
40      - ./data/wordpress/php/upload.ini:/usr/local/etc/php/conf.d/upload.ini
41    environment:
42      WORDPRESS_DB_HOST: mariadb
43      WORDPRESS_DB_USER: ${DB_USER:-wordpress_user}
44      WORDPRESS_DB_PASSWORD: ${DB_PASSWORD:-secure_password_123}
45      WORDPRESS_DB_NAME: wordpress
46      TZ: Asia/Shanghai
47      # 重要!:不可以设置 WordPress 站点 URL 和主页地址 要不然之后无法修改
48      # WORDPRESS_CONFIG_EXTRA: |
49      #  define('WP_HOME', 'https://${DOMAIN}');
50      #  define('WP_SITEURL', 'https://${DOMAIN}');
51    networks:
52      - wordpress_network
53    # 重要:不直接暴露端口到宿主机,只在Docker内网访问
54    expose:
55      - "80"
56
57networks:
58  wordpress_network:
59
60volumes:
61  wordpress-db-data:

3.2 创建环境变量文件

1# 创建 .env 文件存储敏感信息
2cat > .env << EOF
3# 数据库配置
4DB_USER= #(你的数据库用户名称)
5DB_PASSWORD= #(你的安全密码)
6DB_ROOT_PASSWORD= #(你的安全密码)
7
8# 域名配置
9DOMAIN= #你的域名
10SERVER_IP= #你的IP 
11
12# WordPress 容器配置
13
14WORDPRESS_PORT=80
15WORDPRESS_CONTAINER_NAME=wordpress
16EOF
17
18# 保护环境文件权限,若要以非root启动,则暂时不必配置权限
19chmod 600 .env

3.3 创建 Redis 配置

1# 下载 Redis 配置文件
2wget -O ./data/redis/conf/redis.conf http://download.redis.io/redis-stable/redis.conf
3
4# 修改 Redis 配置
5sed -i 's/^bind 127.0.0.1/bind 0.0.0.0/' ./data/redis/conf/redis.conf
6sed -i 's/^protected-mode yes/protected-mode no/' ./data/redis/conf/redis.conf
7sed -i 's/^daemonize yes/daemonize no/' ./data/redis/conf/redis.conf
8echo 'logfile "/etc/redis.log"' >> ./data/redis/conf/redis.conf
9echo 'maxmemory 1gb' >> ./data/redis/conf/redis.conf
10echo 'maxmemory-policy allkeys-lru' >> ./data/redis/conf/redis.conf
11
12# 创建日志文件
13touch ./data/redis/log/redis.log
14chmod 666 ./data/redis/log/redis.log

3.4 创建 PHP 上传配置

1# 创建 PHP 配置目录
2mkdir -p ./data/wordpress/php/
3
4# 创建 upload.ini 文件
5cat > ./data/wordpress/php/upload.ini << EOF
6file_uploads = On
7memory_limit = 256M
8upload_max_filesize = 100M
9post_max_size = 100M
10max_execution_time = 300
11EOF

4. 启动 WordPress 服务

1# 启动所有服务
2docker compose --env-file .env up -d
3
4# 查看服务状态
5docker compose ps
6
7# 查看 WordPress 日志
8docker compose logs -f wordpress

5. 配置 Safeline 反向代理

因为WordPress和safeline处于不同的docker和网络, 现在需要在 Safeline 管理界面添加 WordPress 站点, 这样safeline才能与WordPres通讯.

5.1 获取 WordPress 容器网络IP

1# 将 WordPress 相关容器连接到 Safeline 网络
2sudo docker network connect safeline-ce wordpress
3
4# 查看 safeline-ce 网络中 wordpress 容器的 IP 地址
5sudo docker inspect safeline-ce
6# 将"Name": "wordpress"块的IP地址记录下来

5.2 在 Safeline 中添加站点

  1. 登录 Safeline 管理界面:https://您的服务器IP:9443

添加防护站点

  1. 站点名称:wordpress或者你喜欢的名称

  2. 上游服务器:WordPress 容器的实际 IP地址

  3. 访问域名:your-domain.com没有域名就填服务器公网IP

  4. 协议:HTTP(如果配置了 HTTPS 证书则选择 HTTPS)

配置监听端口:

  1. 监听端口:80 和 443(若要开启HTTPS则必须监听443端口)

  2. 确保 Safeline 监听的端口在防火墙中开放

5.3 配置 DNS 解析

将您的域名 your-domain.com 解析到服务器 IP: 您的服务器IP地址

6. 完成 WordPress 安装

  1. 通过 Safeline 访问您的网站:https://your-domain.com或者公网IP

  2. 按照 WordPress 安装向导完成安装

  3. 选择语言、设置站点标题、管理员账号等信息

7. WordPress 安全加固

7.1 修改默认设置

1# WordPress 初始化完成后操作
2# 进入2.中选择的Wordpress对应根目录下
3cd /你的/目录/地址
4# 修改默认数据库表前缀
5if [ -f "./data/wordpress/html/wp-config.php" ]; then
6    sed -i "s/\$table_prefix = 'wp_';/\$table_prefix = 'wp_$(openssl rand -hex 3)_';/" ./data/wordpress/html/wp-config.php
7    echo "数据库表前缀已修改"
8fi

7.2 设置文件权限

1# 设置正确的文件权限
2sudo chown -R www-data:www-data ./data/wordpress/html/
3sudo find ./data/wordpress/html/ -type d -exec chmod 755 {} \;
4sudo find ./data/wordpress/html/ -type f -exec chmod 644 {} \;

8. 验证配置

8.1 检查 Safeline 防护

访问您的网站,确认:

  • 网站正常访问

  • Safeline 的防护功能正常工作

  • 如果需要强制重定向到HTTPS 重定向正常(如果配置了 SSL),可以在wordpress后台配置站点名URL

1# 进入WordPress /wp-admin/ 后台-设置-常规命令页面 进行配置
2# https://你的网址/wp-admin/options-general.php
3
4WordPress 地址(URL)	https://www.paddysun.top
5站点地址(URL)	https://www.paddysun.top

8.2 测试 WordPress 功能

测试以下功能确保正常工作:

  • 文章发布

  • 图片上传

  • 插件安装

  • 主题切换

9. 管理命令

1# 停止服务
2docker compose down
3
4# 重启服务
5docker compose restart
6
7# 查看服务状态
8docker compose ps
9
10# 查看日志
11docker compose logs wordpress
12
13# 备份数据库
14docker compose exec mariadb mysqldump -u root -p wordpress > backup.sql

10.建议

不建议开启safeline Bot防护,开启bot防护也记得将RSS等路径排除。

记得定期维护,更新系统 WordPress 核心、主题和插件等。

建议部署完成后创建系统镜像。

本文最早发布于 https://www.paddysun.top/,采用 共享-署名-非商用-相同方式共享 4.0 国际许可协议 进行许可。投稿至长亭内容创作者计划,希望能够获得雷池专业版授权体验一下 QaQ。

# 雷池 WAF

0

1

雷池规则广场:恶意操作IP

头像

希涵

更新于 1 天前

规则地址

规则库说明

恶意操作

在正常网站上进行恶意操作的神人IP

# 雷池 WAF

0

2

fvm snserver 进程分别有十几个,正常吗,内存爆了

头像

刘鑫

更新于 2 天前

fvm snserver 进程分别有十几个,正常吗,内存爆了

# 雷池 WAF

0

2

建议升级postgres数据库版本

头像

time flies

更新于 2 天前

最新版本9.2.7数据库版本不postgresql15.2,建议升级数据库版本到17,性能更好!

# 雷池 WAF

1

16

公司官网安装waf需要购买商业授权吗?

头像

Dawn

更新于 2 天前

如题,一直有这个疑问,给公司的官网安装雷池的waf,需不需要购买授权?

# 雷池 WAF

0

3

雷池社区版自动化更新SSL证书(基于DNS验证)

头像

突突突

更新于 3 天前

前言

从2023年下半年开始,各大云厂商的免费证书陆续从有效期一年变成了有效期三个月,这对广大的个人用户来讲是一件很不好的事情,因为这样就意味着每三个月就需要重新申请一次证书并部署。

雷池虽然自带了一个通过 Let's Encrypt 来申请证书的功能,但只支持申请时长为3个月的免费证书,但也没有自动续签的功能,所以作者就写了一个用于自动化更新雷池SSL证书的工具。

工具介绍

这款工具使用golang编写(go语言写的多了,就没想过用其他语言了),通过 Let's Encrypt 的 DNS-01 challenge 来进行验证并申请新的证书,替换原有的证书来实现自动更新。

目前DNS验证暂时仅支持:腾讯云、 阿里云、 华为云、 西部数码、 雨云,如果有小伙伴使用的是其他的域名服务提供商,欢迎在评论区留言,作者会在收到留言后会进行相应的更新。

项目地址:

github: https://github.com/Wink541/SafelineAPI

个人gitea: https://gitea.doicat.com/duoduo/SafelineAPI

工具使用

1. 下载项目

$ git clone https://github.com/Wink541/SafelineAPI

2. 编译项目

$ cd SafelineAPI
$ go build -o safelineApi ./cmd/safelineApi/main.go

// 可根据不同平台来设定不同的编译环境
$ go env -w GOOS=linux    //编译环境修改为linux,可选: linux/windows/darwin
$ go env -w GOARCH=amd64  //编辑架构修改为amd64,可选: amd64/arm64

3. 配置文件编辑

{
	"SafeLine": {
		"Host": {
			"HostName": "192.168.1.4",
			"Port": "1443"
		},
		"ApiToken": "xxx"
	},
	"ApplyCert": {
		"Days": 30,
		"Email": "xxx",
		"SavePath": "/tmp/ssl",
		"DNSProviderConfig": {
			"DNSProvider": "xxx",
			"TencentCloud": {
				"SecretId": "xxx",
				"SecretKey": "xxx"
			},
			"AliCloud": {
				"AccessKeyId": "xxx",
				"AccessKeySecret": "xxx",
				"RAMRole": "xxx(可选)",
				"STSToken": "xxx(可选)"
			},
			"HuaweiCloud": {
				"AccessKeyId": "xxx",
				"Region": "xxx",
				"SecretAccessKey": "xxx"
			},
			"WestCN": {
				"Username": "xxx",
				"Password": "xxx"
			},
			"RainYun": {
				"ApiKey": "xxx"
			}
		}
	}
}

参数介绍:

  • SafeLine

    • HostName : 雷池管理后台地址。默认为 safeline-mgt 容器IP;

    • Port : 雷池管理后台端口。默认为 1443 ;

    • ApiToken : 雷池接口API Token ,从控制台获取;

  • ApplyCert

    • Days : 过期时间,默认当证书剩余有效期小于该值时,则对证书进行更新;

    • Email : 申请证书时所使用的邮箱;

    • SavePath : 申请证书临时保存位置;

    • DNSProviderConfig : DNS服务提供商配置

      • DNSProvider : 域名服务提供商,可选 TencentCloud/AliCloud/HuaweiCloud/WestCN/RainYun ,下列的相关参数为云服务平台账号的凭据。

执行文件

$ ./safelineApi ./config.json    //<可执行文件路径> <配置文件路径>

计划任务(可选)

0 0 1,31 * * root /opt/safelineApi/safelineApi /opt/safelineApi/config.json > /opt/safelineApi/app.log

工具效果

工具执行前证书有效期如图:

测试环境,过期时间设定为90天

工具执行部分日志如下:

[SUCCESS] 2025/04/15 21:36:07 SafeLine 相关配置检验完成!
[INFO]    2025/04/15 21:36:07 ApplyCert 相关配置检验完成!
[INFO]    2025/04/15 21:36:07 配置检查完毕,即将开始更新证书!
[INFO]    2025/04/15 21:36:07 本次需要更新证书数量有 6 个
2025/04/15 21:36:08 [INFO] acme: Registering account for admin@example.com
2025/04/15 21:36:09 [INFO] [www.doicat.com] acme: Obtaining bundled SAN certificate
2025/04/15 21:36:10 [INFO] [www.doicat.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/xxxxxxxxxx/xxxxxxxxxxxx
2025/04/15 21:36:10 [INFO] [www.doicat.com] acme: Could not find solver for: tls-alpn-01
2025/04/15 21:36:10 [INFO] [www.doicat.com] acme: Could not find solver for: http-01
2025/04/15 21:36:10 [INFO] [www.doicat.com] acme: use dns-01 solver
2025/04/15 21:36:10 [INFO] [www.doicat.com] acme: Preparing to solve DNS-01
2025/04/15 21:36:12 [INFO] [www.doicat.com] acme: Trying to solve DNS-01
2025/04/15 21:36:12 [INFO] [www.doicat.com] acme: Checking DNS record propagation. [nameservers=183.60.83.19:53,183.60.82.98:53]
2025/04/15 21:36:14 [INFO] Wait for propagation [timeout: 1m0s, interval: 2s]
2025/04/15 21:36:22 [INFO] [www.doicat.com] The server validated our request
2025/04/15 21:36:22 [INFO] [www.doicat.com] acme: Cleaning DNS-01 challenge
2025/04/15 21:36:24 [INFO] [www.doicat.com] acme: Validations succeeded; requesting certificates
2025/04/15 21:36:27 [INFO] [www.doicat.com] Server responded with a certificate.
[SUCCESS] 2025/04/15 21:36:43 域名 [www.doicat.com] 证书更新成功!

执行后证书更新如下:

结尾

这个简单的项目就到这里了,主要还是为了解决证书更新的问题,文章内容不是很丰富(由于最近学业较繁忙,凭据申请的方法就没有去收集,各位可以上官网查询文档来获取),项目还是有需要完善的地方,有想法的小伙伴可以前往原文 雷池社区版自动化更新SSL证书 留言,在条件允许的情况下会尽力去实现。

# 雷池 WAF
# SSL 证书
技术资料

1

6

查看更多