Debian 安装雷池 WAF(SafeLine)+计划+DDNS
说明
我尝试在 iKuai 上安装单网口旁路由(防火墙)虚拟机,实现内网安全的需求。
在 Github 上找可以安装在 Debian (或者其他系统)上的 WAF 或者 Firewall 程序,看到了 SafeLine 。
进入官网,体验 Demo 后发现:社区版有非常简单的 Web 反向代理和防火墙设置,也没有什么账户绑定。
我决定尝试使用一段时间。
因为 iKuai 无法正常安装 OPNsense 虚拟机,我遇到了许多困难,但 iKuai 无法进入控制台,我甚至不知道问题出在哪里。可能是双网口配置不支持,但尝试了单网口 lan 配置后改 wan 口仍然无法正常访问后,已经耗费了一天多的时间。放弃了。
安装雷池 WAF
官方提供了非常丰富完善的操作指南: 上手指南 | 雷池 WAF 社区版 (chaitin.cn) 。
建议直接去看文档,此处只做记录。
基于 LXC 的 PVE 容器
在 PVE 创建基于 LXC 的 Docker 容器时,勾选 无特权的容器
和 嵌套
。
否则容器运行卡顿、脚本执行不畅,还会报错:
Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "proc" to rootfs at "/proc": mount proc:/proc (via /proc/self/fd/6), flags: 0xe: permission denied: unknown
安装官方脚本
apt install curl
官网:https://waf-ce.chaitin.cn/docs/guide/install
# su
密码:
root@firewall:/home/firewall# apt install curl ca-certificates curl gnupg
root@firewall:/home/firewall# install -m 0755 -d /etc/apt/keyrings
root@firewall:/home/firewall# bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)"
提示以下信息时,隐式输入 y
,回车。
[SafeLine] 缺少 Docker 环境
[SafeLine] 是否需要自动安装 Docker (Y/n)
提示以下信息时,隐式输入 y
,回车。
================================================================================
[SafeLine] Docker 安装完成
[SafeLine] 发现 Docker 环境: '/usr/bin/docker'
Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable docker
[SafeLine] Docker 工作状态正常
Docker Compose version v2.21.0
[SafeLine] 发现 Docker Compose Plugin
[SafeLine] 雷池安装目录 (留空则为 '/data/safeline'): [SafeLine] 目录 '/data/safeline' 当前剩余存储空间为 44G ,雷池至少需要 5G,是否确定 (Y/n)
安装完成后,提示:
微信扫描上方二维码加入雷池项目讨论组
[SafeLine] 雷池 WAF 社区版安装成功,请访问以下地址访问控制台
[SafeLine] https://0.0.0.0:9443/
root@firewall:/home/firewall#
检查安装情况
检查 Docker 运行情况。
root@firewall:/home/firewall# docker ps -a
登录
打开 https://<ip>:9443/
,检查是否正常访问。
下载 Microsoft 移动电话身份验证器应用 ,扫描网页的 QR 码。
绑定成功、获取到动态口令后,完成绑定。
输入动态口令后,即可登录。
配置
SSL 证书
在 通用配置 -> 设置管理
中添加证书。
通用配置 -> 其他
在 通用配置 -> 其他
中:
-
设置源 IP 获取方式:
项目 值 说明 从 HTTP Header 中获取
X-Real-IP
-
设置站点通用配置:
项目 值 说明 强制 HTTPS 不勾选 使用 HTTP/2 不勾选 监听 IPv6 勾选 传递客户端连接的 host 和协议 不勾选 -
设置
雷池控制台证书
为新添加的证书。
防护站点
在 防护站点
中,添加站点:
项目 | 值 | 说明 |
---|---|---|
域名 | a.example.com * |
|
端口 | 10443 |
|
SSL | 勾选 | |
证书 | 刚刚添加的证书 | |
上游服务器 | https://127.0.0.1:9443/ |
|
备注 | 雷池 WAF |
点击提交。
定时任务
aliddns
添加脚本文件
运行容器后,创建路径 /home/scripts/aliddns/
,有文件:
aliddns aliddns_run.sh
其中:
-
aliddns
: honwen/aliyun-ddns-cli 可执行程序。 -
aliddns_run.sh
:在 Debian 主机上使用这个脚本。
#!/bin/bash /ql/data/shell/aliddns/aliddns --id "xxxxxxxxxxxxxxxxxxxxx" --secret "xxxxxxxxxxxxxxxxxxxxxxxxxxx" --ipv6 auto-update --domain example.com echo '[Docker]' `date` "\taliddns\t" `ip addr show ens3 | grep 'inet6 2409' | grep '<IPv6固定后缀64位>' | awk '{print $2}' | sed 's/.\{3\}$//'` >> /ql/data/shell/aliddns/aliddns.log
-
赋予执行权限:
chmod + x aliddns aliddns_run.sh
crontab 配置
crontab -e
填写:
*/15 * * * * /bin/sh /home/scripts/aliddns/aliddns_run.sh
liteip
添加脚本文件
运行容器后,创建路径 /home/scripts/liteip
,有文件:
liteip_main_debug.sh
其中:
-
/home/docker/qinglong/data/shell/liteip
对应容器内:/ql/data/shell/liteip
. -
liteip
: liteip | gitee.com 可执行程序。
执行:
-
python3 liteip_main_debug.sh
-
修改
config.ini
配置文件[COMMAND] command = ip addr show ens3 | grep 'inet6 2409' | grep '<IPv6固定后缀64位>' | awk '{print $2}' | head -1 [MAIL_SENDER] usermail = example@qq.com password = xxxxxxxxxxxxxxxx server = smtp.qq.com port = 465 username = example [MAIL_RECEIVER] usermail = example@qq.com username = example [MAIL_BODY] mail_body = Firewall 数据变更通知 [MAIL_AHERF] mail_aherf = <a href='https://example.com/' target='_blank' class='amber'>[雷池 WAF]</a> 。
crontab 配置
crontab -e
填写:
*/10 * * * * python3 /home/scripts/liteip/liteip_main_debug.py
ping_subprocess
添加脚本文件
运行容器后,创建路径 /home/scripts/ping_subprocess
,有文件:
ping3 ping_subprocess.py
其中:
-
ping3
: python ping命令工具包。 -
ping_subprocess.py
: opnsense_tools | gitee.com 可执行程序。
执行:
-
python3 liteip_main_debug.sh
-
修改
config.ini
配置文件[HOST] host = 10.0.1.4 [PORT] port = 80 [RESULT] result = False [COMMAND] command = wg-quick up firewall
crontab 配置
crontab -e
填写:
*/10 * * * * python3 /home/scripts/ping_subprocess/ping_subprocess.py
统合任务脚本
crontab -e
添加:
# per 10 mins
*/10 * * * * python3 /home/scripts/ping_subprocess/ping_subprocess.py
# per 10 mins
*/10 * * * * python3 /home/scripts/liteip/liteip_main_debug.py
# per 15 mins
*/15 * * * * /bin/sh /home/scripts/aliddns/aliddns_run.sh
防护站点
在雷池 WAF 防护站点
中,添加站点:
项目 | 值 | 说明 |
---|---|---|
域名 | a.example.com * |
|
端口 | 10001 |
|
SSL | 勾选 | |
证书 | 刚刚添加的证书 | |
上游服务器 | http://127.0.0.1:10001/ |
|
备注 | 青龙 |
点击提交。