NAS 用户必装!减少 90% 网络攻击,雷池 WAF 部署保姆级教程
NAS 互联网访问就像一柄双刃剑,在用户头顶不断盘旋。
是为了方便牺牲安全,把 NAS 的访问权限不断开放到互联网更好;还是为了安全抛弃方便,严格遵守局域网、异地组网更好?我想每个 NAS 都有自己的考虑。
但如果你问我的选择是什么,那我肯定:

雷池 WAF 是我推荐了很多次的一款免费、开源网安产品,在 Github 上有 21.5K star。
它提供了针对SQL 注入、XSS、代码注入、操作系统命令注入、CRLF 注入、LDAP 注入、xpath 注入、RCE、XXE、SSRF、路径穿越、暴力破解、http泛滥、机器人滥用等主流 Web 攻击的防护能力,还支持 CC防护、身份认证、人机验证等高级功能,非常适合 NAS 用户安装。

一。雷池 WAF 防护能力解析
为什么要安装 WAF ?很多人可能觉得自己在 NAS 安装的应用都有账号密码,而且端口位数高,大概率都不会被攻击到。但你可能没想过,很多应用本身就是漏洞大王,更有些应用会直接暴露你的互联网 IP。
WAF 的作用就是在这些应用之上再套一层保护壳,所有流量先经审查,确认安全才放行,如同地铁安保一样。所以安装 WAF 十分有必要。

我发布到互联网的应用,每天访问上万次,通过雷池 WAF 可以发现并拦截异常攻击 100 余次。

1. 基于语义分析的攻击防护模块
攻击防护模式是雷池 WAF 的核心能力,它提供了 14 种常见的攻击类型防护,每一种防护类型又提供了 4 个档次的防护强度。
针对不同的网页防护需求,可以自定义配置每个 web 的防护级别。有些重要的应用系统就开启高强度防护确保数据安全,而有些来源比较复杂的 web 则可以开启平衡或仅观察,以业务正常使用为第一要素。

比如之前广为人知的路径穿越漏洞,现在已经被纳入了平衡防护模式。换句话说,只要你安装了雷池 WAF,那么之前爆发的 0day 路径穿越漏洞就不用担心再次发生。因为异常流量进来的时候,雷池 WAF 就已经先帮你挡掉了。

每一个攻击日志会包含攻击者源 IP、攻击载荷、J4A 指纹、攻击时间、信息泄露内容、请求报文等信息。可以一键把攻击 IP 纳入管理池,也可以通过长亭的情报中心去进行深入分析。
此外,每一条攻击人日志,都可以使用雷池 WAF 内置的免费智能 AI 攻击分析。没错,哪怕是社区版本的免费开源项目,雷池 WAF 的 AI 解读也是免费的。

2.CC 攻击和反爬虫
除了网络攻击,DDoS 攻击和恶意爬虫行为也在雷池 WAF 的防护能力内。在当下的网络环境里,它更可以用来应对 AI Agent 的扫描攻击。

其中值得一提的是等候室功能,它为个人应用提供了一个非常有效的高并发拦截能力。默认限定的 3 分钟 5 个并发用户,可以直接将 DDos 挡在流量外部。
高频攻击、高频错误和我们 NAS 里的账号管理就特别像,一定时间内的错误自动实现 IP 封禁或人机验证。

3.人机验证&身份认证
NAS 一般性能都有限,所以对于网络上来的非目标流量,肯定是有多少挡多少的。比如你在自己的 NAS 上架了一个 Blog,当有内容还进了 SEO,你就会发现 Agent 抓取的量会变非常大。这个时候人机验证是我最推荐开启的功能。因为它在当前无头浏览器横行的时候,可以非常有效的阻拦 Agent 的自动化攻击行为。
我相信大家玩 Agent 的时候最喜欢做的事情,就是让 Agent 用无头浏览器去访问和抓取一些网页的信息,很多时候 Agent 会告诉你有人机验证无法通过,就是这个场景。

而身份认证可以理解成是一个独立的账号密码授权。支持独立的账号密码,支持dingtalk、企业微信、Github、微信开放平台等 7 种主流第三方 Oauth 授权。
当我们为网页配备了身份认证功能以后,所有的网页都必须先通过雷池的统一认证中心授权登录后才可以进入到真正的网页里。这可以解决很多本身没有账号体系又包含隐私信息或者重要权限的 web 应用的互联网访问困境。真正做到安全、便捷一手抓。

4.雷池情报中心
对一款网络安全产品来说,功能模块仅仅只是能力的一部分体现。更重要的是不断更新的后台知识库。
一个长期不更新特征库、恶意 IP 库的工具,只是一个摆设。真正长期在维护社区通用的知识库、指纹库,才是网络安全产品的核心价值。
雷池 WAF 社区版可以免费使用雷池的情报中心数据库,它提供了恶意 IP 情报、搜索引擎爬虫 IP、恶意 JA4 指纹情报等信息,并且长期动态在更新。

而且还可以通过长亭 IP 威胁情报网,获取 330+ IP 组,支持一键导入到本地雷池 WAF 内,大大增强 IP 的识别能力。

5.应用防护添加方法
介绍介绍完雷池 WAF 的一些社区版功能,再来说说 NAS 用户如何配置自己发布的服务。
在首页的应用防护模块里,我们可以根据 web 网页来添加。它的本质上是一个反代工具,因此我们可以直接在配置完 DDNS 之后把雷池 WAF 作为前端反代软件使用。
第一行的通配域名默认不变,即所有域名访问都会经过雷池 WAF。如果你之前使用的是三级域名+固定端口的模式来配置的,这里直接填入三级域名也可以实现一样的效果。
第二行是端口,支持 HTTP/HTTPS 端口。这里填写的是我们在互联网需要具体访问的端口号。和域名一起组成入口。
第三方是网页类型,支持上游服务器(局域网真实应用地址)、静态文件、重定向三种方式。用的最多的就是上游服务器。在这里填写我们 NAS 里具体的局域网 IP 即可。

完成配置后,在前端的应用卡片上会看到 CC 防护、BOT 防护、身份认证、攻击防护四个模块,按照自己的需求配置启动即可。

二。极空间部署雷池 WAF
下面我们来看看如何在 NAS 里部署雷池 WAF。这里以极空间私有云为例。
首先打开极空间的 Docker 应用,选择创建一个 Compose 服务 并且选择合适的存储位置。
雷池 WAF 本身是提供了一键部署的指令,但是需要登录 SSH 还需要配置路径,相对门槛会高一点。所以我这里直接把雷池 WAF 的脚本解析出 docker-compose.yaml 文件,大家直接复制就可以使用。

在添加方式的 yaml 栏里,复制下列代码进去
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: swr.cn-east-3.myhuaweicloud.com/chaitin-safeline/safeline-postgres:15.2
volumes:
- ./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: swr.cn-east-3.myhuaweicloud.com/chaitin-safeline/safeline-mgt:latest
volumes:
- /etc/localtime:/etc/localtime:ro
- ./resources/mgt:/app/data
- ./logs/nginx:/app/log/nginx:z
- ./resources/sock:/app/sock
#- /var/run:/app/run
ports:
- 19443: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:
driver: "json-file"
options:
max-size: "100m"
max-file: "5"
networks:
safeline-ce:
ipv4_address: ${SUBNET_PREFIX}.4
detect:
container_name: safeline-detector
restart: always
image: swr.cn-east-3.myhuaweicloud.com/chaitin-safeline/safeline-detector:latest
volumes:
- ./resources/detector:/resources/detector
- ./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: swr.cn-east-3.myhuaweicloud.com/chaitin-safeline/safeline-tengine:latest
volumes:
- /etc/localtime:/etc/localtime:ro
#- /etc/resolv.conf:/etc/resolv.conf:ro
- ./resources/nginx:/etc/nginx
- ./resources/detector:/resources/detector
- ./resources/chaos:/resources/chaos
- ./logs/nginx:/var/log/nginx:z
- ./resources/cache:/usr/local/nginx/cache
- ./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: swr.cn-east-3.myhuaweicloud.com/chaitin-safeline/safeline-luigi:latest
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
- ./resources/luigi:/app/data
logging:
driver: "json-file"
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: swr.cn-east-3.myhuaweicloud.com/chaitin-safeline/safeline-fvm:latest
volumes:
- /etc/localtime:/etc/localtime:ro
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "5"
networks:
safeline-ce:
ipv4_address: ${SUBNET_PREFIX}.8
chaos:
container_name: safeline-chaos
restart: always
image: swr.cn-east-3.myhuaweicloud.com/chaitin-safeline/safeline-chaos:latest
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "10"
environment:
- DB_ADDR=postgres://safeline-ce:${POSTGRES_PASSWORD}@safeline-pg/safeline-ce?sslmode=disable
volumes:
- ./resources/sock:/app/sock
- ./resources/chaos:/app/chaos
networks:
safeline-ce:
ipv4_address: ${SUBNET_PREFIX}.10
接着点击下方的添加 .env ,然后填入下面的环境变量。
POSTGRES_PASSWORD=Cherry666 # 修改成自己的数据库密码,大小写英文+数字
SUBNET_PREFIX=172.36.0 # 修改为自己的 docker IP 池,可以不改
整个部署过程大概只需要 5 分钟,镜像都是通过雷池自己的 docker image 地址下载的,因此速度非常的快。
部署完成后,数据库会有一个初始化的过程,这个时候容器会反复跳失败,不用管,耐心等待即可。
最后,我们还可以我们把整个 compose 项目停掉。然后重新点到项目详情页里,找到第 39 行、第 76 行注释的两行代码,删掉最前面的 # 来映射 DNS 表和 /var/run 路径。

等项目全部跑起来,在容器列表里找到 safeline-mgt 这个容器,进入控制台重置密码。注意这里的 exec 命令要选择 /bin/sh。

在控制台,输入指令 resetadmin 就会重置雷池 WAF 的 admin 密码,后续我们再去雷池页面里修改即可。如果你忘记密码,也可以通过这个方式重新初始化。

前面容器页,选择远程访问按钮可以通过极空间的转发服务来打开雷池 WAF,不需要公网也不需要组网,非常方便。

写在最后
雷池 WAF 可以说是我目前见过最良心的开源 WAF 产品,因此我也反复推荐给大家。
而现在,网络环境还在变化。因为 AI Agent 越来越多、越来越易用了。难免有部分人会通过 Agent 来进行一些撒网式的漏洞攻击行为。
通过部署一套 WAF 工具,搭配 NAS 自身的账号安全策略,我们可以大幅度降低自己的 NAS 被互联网攻击的可能性。就像开头说的一样,既能满足互联网的便捷使用,又能确保安全,何乐而不为。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

西南猎鹰毒刺
校验提示文案
西南猎鹰毒刺
校验提示文案