无论是NAS,还是服务器,这些设备一旦暴露在公网上,就面临着被攻击的风险,成为黑客入侵的跳板,严重的甚至可能会造成财产损失。
实际上,在当今数字化时代,Web 应用面临着层出不穷的网络攻击,如 SQL 注入、XSS、暴力破解等,这些攻击不仅会导致数据泄露,还可能使服务陷入瘫痪。
而一款可靠的 Web 应用防火墙(WAF),就如同为 Web 应用筑起一道坚固的防线,能够抵御大多数黑客的工具。
今天,就为大家介绍一款名为 SafeLine(雷池)的开源 WAF,它能有效守护你的 Web 应用安全。
一、介绍
SafeLine 是一款自托管的 Web 应用防火墙(WAF),旨在保护 Web 应用免受各种攻击和漏洞利用。
它通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来发挥作用,能够抵御多种常见攻击,包括 SQL 注入、XSS、代码注入、命令注入、CRLF 注入、ldap 注入、xpath 注入、RCE、XXE、SSRF、路径遍历、后门攻击、暴力破解、HTTP 洪水攻击、机器人滥用等。
作为一种反向代理,SafeLine 部署在 Web 应用前方,在 Web 应用和互联网之间建立一道屏障,按照一系列安全策略过滤、监控和阻断恶意的 HTTP/S 流量,防止未授权数据从应用中泄露,就像为 Web 应用穿上了一层坚固的铠甲。
目前,SafeLine 在全球已有超过 180,000 次安装,保护着超过 1,000,000 个网站,每天处理超过 30,000,000,000 次 HTTP 请求,是一款经过实践检验、可用于生产环境的 WAF。
二、功能特性
SafeLine 拥有丰富且强大的功能特性,主要包括:
阻断 Web 攻击:能够防御各类 Web 攻击,如 SQL 注入、XSS、代码注入、命令注入等多种常见攻击方式,为 Web 应用构建第一道坚固防线。
速率限制:通过限制超过定义阈值的流量,抵御 DoS 攻击、暴力破解尝试、流量激增等各类滥用行为,保障 Web 应用的稳定运行。
反机器人挑战:采用反机器人挑战机制保护网站免受机器人攻击,正常用户可以顺利访问,而爬虫和机器人会被有效拦截。
身份验证挑战:开启身份验证挑战后,访问者需要输入密码才能访问,否则将被阻止,进一步增强 Web 应用的访问安全性。
动态防护:开启动态防护后,Web 服务器中的 HTML 和 JS 代码会在每次访问时进行动态加密,提高攻击者利用代码漏洞的难度。
三、安装
雷池提供了多种部署安装方式,下面分别一一介绍。
3.1 自动安装
在Linux服务器上,执行下面命令即可实现一键自动安装:
bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/manager.sh)"
3.2 Docker安装
对Docker比较熟悉的兄弟,也可以直接通过Docker安装。
首先在服务器上创建雷池的目录:
mkdir -p /data/safeline
然后进入到刚才创建的目录下,下载docker-compose.yml
:
cd /data/safeline
wget https://waf-ce.chaitin.cn/release/latest/compose.yaml
之后,创建.env
来配置环境变量:
cd /data/safeline
touch .env
.env
文件的内容如下:
SAFELINE_DIR=/data/safeline
IMAGE_TAG=latest
MGT_PORT=9443
POSTGRES_PASSWORD=yourpassword #-------(自定义密码使用数字+英文大小写组合,勿使用特殊字符)
SUBNET_PREFIX=172.22.222 #--- 这里改成
IMAGE_PREFIX=swr.cn-east-3.myhuaweicloud.com/chaitin-safeline
ARCH_SUFFIX=
RELEASE=
REGION=
如果是ARM
服务器的话,需要把ARCH_SUFFIX=
改成ARCH_SUFFIX=-arm
。
如果要安装LTS
版,则需要把RELEASE=
改成ELEASE=-lts
之后,执行下面的命令进行启动即可:
cd /data/safeline
docker compose up -d
提示下面的内容表示启动成功:
然后执行下面的命令获取初始密码:
docker exec safeline-mgt resetadmin
四、实战
启动成功之后,在浏览器输入https://IP:9443
,即可进入到雷池页面:
点击同意许可之后,可以进入到登录界面:
登录之后,即可进入到管理界面:
4.1 配置防护应用
雷池可以通过代理的方式防护应用,下面介绍一下如何添加需要防护的应用。
这里我用雷池来防护Jellyfin为例,下面是地址情况:
代理地址:192.168.66.20:3333
Jellyfin地址:192.168.66.4:8096
选择「防护应用」,然后点击「添加应用」:
这里我想要让雷池服务器的3333
端口代理Jellyfin,配置如下:
由于我并没有配置https
,所以把https
删除了。最终配置完如下:
4.2 通过代理访问应用
配置完成之后,可以在浏览器输入http://IP:Port
,其中IP
是部署雷池的服务器IP,Port
是雷池代理的端口,比如我的是http://192.168.66.20:3333
,可以看到确实跳转到了Jellyfin界面:
4.3 统计报表
在通过代理访问之后,可以在「统计报表」中看到流量信息:
在「统计报表」界面,我们可以清晰地看到代理流量的情况,有请求次数、访问次数、独立访客、地理位置、实时QPS、拦截情况等信息。
4.4 CC 防护
雷池支持各种防护功能,如下图所示:
包括:高频访问限制、高频攻击限制、高频错误限制,同时也可以自定义防护规则。
这里我以「高频访问限制」为例:
在高频请求了几次代理地址之后,可以看到拦截记录:
同样,我们也能看到在流量高峰时段的等待流量:
4.5 黑白名单
在「黑白名单」中,我们可以配置规则,来禁止或者允许特定匹配目标的行为,比如允许搜索引擎爬虫请求、禁止某IP访问等等。
同时也可以添加自定义规则:
4.6 人机验证
在人机验证中,可以看到触发过人机验证的请求记录:
也可以切换为「本地验证」:
4.7 身份认证
我们可以在「防护应用」界面开启「身份认证」:
身份认证的方式可以有多种,如账号密码、二步验证等等:
开启之后,再次访问代理地址,就会自动弹出认证界面:
如果认证错误,会在「身份认证」界面显示出记录:
当然,除了上面列举的功能外,雷池还有很多其他强大的功能,大家感兴趣的可以一一探索!
五、总结
SafeLine 作为一款开源的 Web 应用防火墙,凭借其全面的攻击防御能力、丰富的功能特性和广泛的应用实践,为 Web 应用提供了可靠的安全保障。
无论是个人开发者的小型 Web 应用,还是企业级的大型网站,都可以考虑使用 SafeLine 来增强自身的安全防护能力。
如果你正在为 Web 应用的安全问题发愁,不妨尝试一下 SafeLine,它或许能成为你 Web 应用安全防护的得力助手。
同时,SafeLine 拥有活跃的社区支持,你可以通过 Discord 等渠道获取更多信息和帮助,共同推动 Web 应用安全防护技术的发展。