2025年5月25日更新

用上雷池之后有一个比较麻烦的问题就是,当我在文章中存在一些linux的命令,那么就会被它判断为命令注入,从而导致无法保存文章,辛辛苦苦写下的内容一点都不剩。必须去雷池后台的攻击防护->语义分析模块中将命令注入检测修改为仅观察,等保存完之后再修改回来。


防御速度赶不上攻击速度,之前的招数已经稍显落后了。这几天流量又被干没了,一个10G的共享流量包刷刷两下就归零。
手动添加IP黑名单已经扩大到几百行了,而且误杀漏杀的概率极高,最要命的是一不留神就把谷歌和必应这些带流量的爬虫给挡在门外。
都说可以上WAF,但阿里云收费太高,对小站长而言完全承担不起。还有说用Cloudfare的,只是配置上会比较复杂(比如国内国外的CDN,子域名等问题)。最后还是尝试用雷池的个人版先顶一阵,毕竟在github上收获了不少的星星。

一、雷池的安装

关于安装,官方文档上算是讲解得比较清楚的,也没有什么太大的技术难点。新手的话一条命令就搞定了。

bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/manager.sh)"

因为使用的是Docker技术,所以即便是手动安装或者是离线安装基本上也大同小异,这里就不赘述了。具体参考官方的安装文档
第一次是将雷池安装在网站所在的服务器上,过程倒是很顺利,但因为配置的关系而弃用了(下面具体讲)。
之后在京东云上买了一台最便宜的轻量云主机单独配置雷池。最初使用的是Debian系统,用一键脚本安装时提示不符合雷池的安装条件,主要是因为Docker的安装有问题。
切换至专属的Docker镜像,结果发现还是没用,在运行docker compose up -d命令时提示“unknown shorthand flag: 'd' in -d”错误信息。网上的结果大多是说版本太低,大于19就可以。问题是京东云提供的已经是20以上版本了,懒得研究直接放弃了。
最后又尝试将镜像换成Rocky,一键脚本依然是不符合安装条件。没办法,只能手动安装docker。
首先,安装yum-utils,以及使用yum-config-manager设置Docker仓库。

sudo yum install -y yum-utils

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

然后安装docker-ce及其依赖,安装过程中需要输入y确认并继续安装。

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

安装完毕后启动Docker服务。

sudo systemctl start docker

之后再执行一键脚本,雷池安装成功。屏幕中会显示生成的管理员密码,后面登录时会用到。
在开始配置和使用前一定记得将默认的9443端口放行,每家服务器厂商的设置都大同小异。
服务器安全规则设置.png

二、雷池的配置

这部分可能整个过程中最麻烦的,因为网上的教程几乎都是一模一样照搬了官方文档的。
登录雷池的管理页面,打开浏览器访问https://<safeline-ip>:9443/,输入用户名(admin)和密码,进入管理界面。如果忘了保存管理员密码,可以通过以下命令生成:

docker exec safeline-mgt resetadmin

命令执行完成后会随机重置 admin 账户的密码,输出结果如下:

[SafeLine] Initial username:admin
[SafeLine] Initial password:**********
[SafeLine] Done

登录雷池控制台后, 进入防护应用->应用管理页面, 点击右上角的添加应用按钮就可以进行配置了。
首先说一下如果安装在同一台服务器上的情况,因为雷池需要占用80和443端口,而已运行的网站本来就占用了这两个端口,所以在配置过程中会出现端口被占用的提示信息进而无法完成配置。
如果仍要坚持在同一服务器上运行,那么必须将原有的nginx配置进行修改,比如监听的80和443端口改成8080和8443(可以根据自己的喜好进行修改)并且在防火墙中将这两个端口放行。然后在上游服务器的文本框中填写https://127.0.0.1:8443添加应用。
这样修改后的结果是,每次打开网页就变成了https://wiki.mindseed.cn:8443/首页,无论是观感还是网站的设置都会有一定的影响,即便是在nginx中进行调整(比如将对域名wiki.mindseed.cn的全部请求转发到实际服务器地址https://wiki.mindseed.cn:8443中,从而实现直接域名访问),能否保证系统不出现问题也很难说,毕竟MediaWiki本身就存在一堆莫名其妙的bug,这无形中又给排查增加了难度和工作量。
简单测试之后,发现雷池确实将之前手工添加到黑名单中的IP挡在了门外。那么接下去最好还是另寻一台服务器单独运行雷池。
既然雷池对系统性能要求很低,那就只管找个便宜的服务器就成。京东云28元一年的轻主机正好用来测试,即便失败损失也不大。
简单记录一下配置过程中碰到的几个问题。

1、 关于证书

第一次在网站服务器上安装雷池时,申请免费证书能够成功。切换到独立服务器后就无法自动申请了,手动上传了之前的证书也能用,就是太麻烦。每三个月就得重新上传(貌似网上有教程,通过api实现自动更新证书,之后可以尝试一下)。
申请其他几个子站同样如此,得到的信息应该跟acme有关,之前网站已经自动申请了。只是不明白为什么第一次能成功。
另外,对于雷池自身,我们也可以使用自签证书来实现HTTPS的“安全效果”(关于自签名证书的生成见《Nginx禁止IP访问,只能通过域名访问》一文)。在通用设置->控制台管理->雷池控制台证书中选择添加新证书,然后上传生成的自签名证书。回到刚刚的界面中,在雷池控制台证书中选择新增的证书并保存。

2、域名解析更改

这个坑只能怪我看教程不仔细,所以换到独立服务器之后忘了将域名的DNS改为雷池的IP,结果流量照样从原来的站点进出。数据明显和安装在同一服务器上的差很多,然后才意识到问题。

3、nginx配置

域名解析更改完之后,打开网站提示502 Bad Gateway,红艳艳的页面还怪吓人的。
雷池502 Bad Gateway.png
检查结果就是之前反爬时直接关闭了所有http 1.1的访问(见本站《只允许以HTTP2.0访问的情况下,如何让个别网站以HTTP1.1的方式通过》一文),并且设定了仅有特定IP才能访问。将这部分设置删除后,错误消失。
当时正好群里有网友也在问这个问题,他同样是将自己的ip给挡了,至于具体怎么挡法只能具体问题具体分析了,至少说明不是个案。

4、源站

如果nginx配置修改正确,按照官方文档添加源站应该没什么问题。访问正常的话,系统会确认并显示一个勾,而如果有问题则显示警告标志。
开启了ssl的情况下,记得使用https,至于端口号若非特殊的可写可不写(保险起见还是写上的好)。
雷池应用配置.png

5、服务器配置

在购买独立服务器之前还在技术群里问了一下,因为只看到对服务器的CPU、内存和硬盘空间有要求,并没有提示带宽,结果在某篇技术文档中提到最好和上游服务器保持一致的带宽。结果这台廉价的京东云主机才1M带宽。实际可能够用,但心理多少有点不爽,早知道贴点钱买个58的云主机,好歹也3M。

6、雷池的自我保护

作为雷池管理端的默认端口,9443端口也很容易就遭到恶意扫描和攻击并且还不为所知,所以官方给出的方案是通过雷池将9443端口给保护起来。
具体步骤就是修改新的外部访问端口,比如19443(借官网的图片一用):
修改雷池默认访问端口.png
如果需要实现HTTPS的话,记得勾选SSL并选择自签名证书。
回到服务器的网路安全设置中,将9443端口的规则删除,并增加新的19443端口(如果有修改功能也可以将端口号直接由9443改为19443,参考前面的设置图)。

三、雷池的运行效果

对于像我这种既不精通技术又没有多少流量的个人网站用户而言,雷池的效果还是很明显的。
雷池防护效果.png
看了一下专业版的价格,要是有这钱我直接上阿里云的WAF了,也没必要自己折腾。算了,满足基本要求就成。

四、最后

因为心种子的站点已经运行了很多年,一直一来都是没有任何防护也没有隐藏IP,所以就算是使用了雷池,还是存在一定数量直接攻击网站IP的情况,最终只能升级弹性IP,将原有的IP地址更换了。幸好这个过程并不复杂。

其他参考资料:
如何利用雷池保护9443的管理端

最后修改:2025 年 05 月 25 日
如果觉得我的文章对你有用,请随意赞赏