可能有许多人都有这个需求:为自己的个人站点套上WAF,增加安全性,本文将介绍如何将1panel面板深度结合长亭雷池防火墙,实现为个人站点套上WAF并且自动续签ssl证书。
前提条件:
-
服务器IP已绑定域名
-
完整的1panel环境
-
1panel未安装OpenResty
-
有支持 TOTP 的认证软件,如腾讯身份验证器,谷歌身份验证器,微软身份验证器,FreeOTP,Bitwarden等
安装OpenResty
如图找到OpenResty,点击安装。
在安装配置页注意:修改HTTP/HTTPS的默认端口,后期WAF对外使用会占用80,443端口。这里改为180,1443,点击确认安装OpenResty。
此处安装取决于服务器连接 dockerhub 的速度,若为国内服务器或速度过慢,可在容器
-配置
-镜像加速
中填入如下配置:
https://dockerproxy.com
https://hub-mirror.c.163.com
https://docker.m.daocloud.io
https://ghcr.io
https://mirror.baidubce.com
https://docker.nju.edu.cn
站点搭建
如图,按照顺序点击创建网站
静态网站搭建
点击创建静态网站,主域名填写站点域名,其他域名填写 127.0.0.1:任意未占用端口,如此处127.0.0.1:10000,点击确定创建静态网站。
反向代理网站搭建
反向代理本机的各种工具类站点,以Alist为例,安装时若未选择 端口外部访问
,1panel会将其服务端口映射到127.0.0.1而非0.0.0.0,故适合使用反向代理搭建。
主域名填写站点域名,其他域名填写 127.0.0.1:任意未占用端口,如此处127.0.0.1:10001,点击确定创建反向代理。
运行环境(PHP)网站搭建
PHP站点的搭建,需要先创建运行环境,如下图:
等待安装PHP环境
当状态转为正常时即安装完毕。
点击创建网站,选择运行环境,主域名填写站点域名,其他域名填写 127.0.0.1:任意未占用端口,如此处127.0.0.1:10003,点击确定创建反向代理。
一键部署网站搭建
一键部署参考此处https://docs.halo.run/getting-started/install/1panel/,注意其他域名填写 127.0.0.1:任意未占用端口。
证书申请
创建Acme账户
如图,按此顺序创建ACME账户,
创建DNS账户
参考 1panel官方文档 创建DNS账户
申请证书
参考 1panel官方文档 申请证书
部署证书
在部署好的站点中,点击配置,点击基本,HTTPS,启用HTTPS,将HTTP选项修改为HTTP可直接访问,下方选择对应证书后保存。
获取证书文件
进入网站目录,进入SSL文件夹,下载保存fullchain.pem,privkey.pem两个文件备用。
部署长亭雷池WAF
长亭雷池的安装可参考该文:https://waf-ce.chaitin.cn/docs/guide/install,注意雷池要求CPU支持ssse3指令集。
我在此选择一键安装,安装到/opt/safeline
bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)"
```![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/bf1d79278d0e4be58a7a6c3c4fd8c3a8.png)
成功安装后显示如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/722b05a685664851b46f567719be8011.png)
使用**https://IP:9443**访问WAF
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/73a1da50cd4a40daa079a68f5b75acf9.png)
使用**支持TOTP的认证软件**进行认证
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/92e1c7b5ff3c42cda771c0e584c94c17.png)
### 添加证书
如图,在`通用配置`-`证书管理`,**添加证书**,上传之前下载的证书文件。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/5ed2ecda8ad14f30be375cdafdbeb45d.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b9b5935858c44237b78d6eec9182f02c.png)
### 站点通用配置
如图,在`通用配置`-**其他**,**站点通用配置**,根据需求开启,我这里全部开启。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/2632bca19b5e44349175b987b2aea4f2.png)
### 添加防护站点
如图,在防护站点中,**添加站点**,**根据需求配置**,上游服务器填写**1panel****的OpenResty配置的其他域名**,提交。
其他网站同理。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d3184741270347498ff89360dcbe62fe.png)
### 测试访问
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/be345a0dc4df41099e9a131b3400473b.png)
## 自动更新雷池WAF的SSL证书
如下图,在1panel中添加计划任务,添加shell脚本,脚本内容及解析见下。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/61f247a4871e4238b57549593897c367.png)
```bash
sudo cp -f /opt/1panel/apps/openresty/openresty/www/sites/域名/ssl/fullchain.pem /opt/safeline/resources/nginx/certs/cert_1.crt
# 从域名的ssl目录下复制证书到safeline的nginx目录下,替换原有证书,该证书用于雷池的防护站点
sudo cp -f /opt/1panel/apps/openresty/openresty/www/sites/域名/ssl/privkey.pem /opt/safeline/resources/nginx/certs/cert_1.key
# 从域名的ssl目录下复制密钥到safeline的nginx目录下,替换原有密钥,该密钥用于雷池的防护站点
sudo cp -f /opt/1panel/apps/openresty/openresty/www/sites/域名/ssl/fullchain.pem /opt/safeline/resources/management/certs/server.crt
# 从域名的ssl目录下复制证书到safeline的nginx目录下,替换原有证书,该证书用于雷池的管理站点,可不设置使用自签证书
sudo cp -f /opt/1panel/apps/openresty/openresty/www/sites/域名/ssl/privkey.pem /opt/safeline/resources/management/certs/server.key
# 从域名的ssl目录下复制密钥到safeline的nginx目录下,替换原有密钥,该密钥用于雷池的管理站点,可不设置使用自签密钥
sudo docker restart safeline-tengine
# 重启safeline的nginx服务,使证书生效
sudo docker restart safeline-mgt-api
# 重启safeline的管理api服务,使证书生效
防护
为保证网站流量均从WAF进入,在1panel中开启防火墙,具体可参考官方文档,屏蔽掉之前配置的OpenResty的默认端口。