2024年12月

https://www.senra.me/enhance-website-security-via-apache-module-mod-cloudflare/

一.介绍

一般情况下,如果要给没有备案的网站上CDN我们基本上都会选择Cloudflare,免费好用,虽然国内速度可能不够理想,但是也算够用吧。
那么问题来了,我们使用Cloudflare的目的是啥呢

1. 加快访问速度
2. 隐藏网站IP
3. 过滤部分恶意请求
4. 方便HTTPS

二.分析

总结一下,快+安全,然而,其实绝大部分的人都没有考虑完全,其实是可以有办法抓出源站的,而且可以说很容易,特别是没有故意做防范的。
介绍下我常用的方法

1. 如果是有用户系统的网站,直接测试注册,然后抓发件IP
2. 根据开放80和443端口的IP列表扫Host和证书
3. 批量扫子域名
4. 抓可能的框架报错页面看是否有debug输出环境参数

具体怎么搞就不说了,讲下防范

1. 用MailGun或者其他API发件服务(注意sendcloud好像API也会泄露发件IP)或者自建安全的邮件服务器
2. 对IP访问单独绑定vhost
3. 自己在意下就行
4. 用框架开发的程序部署的时候把Debug关掉

三.安装

好了好了,扯远了,这次我主要介绍下mod\_cloudflare这个apache模块

安装的话请参考Cloudflare官方介绍 https://www.cloudflare.com/technical-resources/#mod\_cloudflare

如果你使用的apache是包管理器安装的,那么可以直接使用Cloudflare提供的各平台的软件包来直接安装

但是,如果你用了Oneinstack等脚本编译安装了Apache,那么你可能需要编译一下了
官方教程里也介绍了编译安装的方法,但是,请注意

yum install libtool httpd-devel

yum install libtool httpd-devel

yum install libtool httpd-devel

这儿你可能不需要后面的httpd-devel,因为编译安装自带devel环境,你装这玩意会依赖着装上httpd本体,然后会覆盖掉你编译安装带的启动脚本啥的,很蛋疼

这儿列一下CentOS的命令,其他的自己去看官方页面吧

wget https://raw.githubusercontent.com/cloudflare/mod\_cloudflare/master/mod\_cloudflare.c

如果不存在apxs的话加上完整的路径试试,比如/usr/local/apache/bin/apxs,如果还不行试试把apxs换成apxs2

apxs -a -i -c mod\_cloudflare.c

yum install libtool wget https://raw.githubusercontent.com/cloudflare/mod\_cloudflare/master/mod\_cloudflare.c #如果不存在apxs的话加上完整的路径试试,比如/usr/local/apache/bin/apxs,如果还不行试试把apxs换成apxs2 apxs -a -i -c mod\_cloudflare.c

yum install libtool
wget https://raw.githubusercontent.com/cloudflare/mod_cloudflare/master/mod_cloudflare.c

#如果不存在apxs的话加上完整的路径试试,比如/usr/local/apache/bin/apxs,如果还不行试试把apxs换成apxs2
apxs -a -i -c mod_cloudflare.c

跑完apxs会自动帮你修改配置文件加载模块,这时候已经是可以用了,但是是运行在默认配置下,由于编译没有给你加上配置文件模板,所以你得自己添加了

我建议在 /usr/local/apache/conf/extra/cloudflare.conf 路径放配置文件,内容参照如下

<IfModule mod\_cloudflare.c\>

CloudFlareRemoteIPHeader CF-Connecting-IP

\# 这儿的IP可以参考https://www.cloudflare.com/ips 来自己更新,如果用了自建的Railgun也记得把IP加进去

CloudFlareRemoteIPTrustedProxy 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 104.16.0.0/12 108.162.192.0/18 131.0.72.0/22 141.101.64.0/18 162.158.0.0/15 172.64.0.0/13 173.245.48.0/20 188.114.96.0/20 190.93.240.0/20 197.234.240.0/22 198.41.128.0/17 199.27.128.0/21 2400:cb00::/32 2405:8100::/32 2405:b500::/32 2606:4700::/32 2803:f800::/32 2c0f:f248::/32 2a06:98c0::/29

\# Uncomment DenyAllButCloudFlare to return a 403 status to all requests

\# that do not originate from an IP defined in CloudFlareRemoteIPTrustedProxy

\# 取消注释下面这个将会把所有并非来自Cloudflare的请求返回403

CloudFlareRemoteIPHeader CF-Connecting-IP # 这儿的IP可以参考https://www.cloudflare.com/ips 来自己更新,如果用了自建的Railgun也记得把IP加进去 CloudFlareRemoteIPTrustedProxy 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 104.16.0.0/12 108.162.192.0/18 131.0.72.0/22 141.101.64.0/18 162.158.0.0/15 172.64.0.0/13 173.245.48.0/20 188.114.96.0/20 190.93.240.0/20 197.234.240.0/22 198.41.128.0/17 199.27.128.0/21 2400:cb00::/32 2405:8100::/32 2405:b500::/32 2606:4700::/32 2803:f800::/32 2c0f:f248::/32 2a06:98c0::/29 # Uncomment DenyAllButCloudFlare to return a 403 status to all requests # that do not originate from an IP defined in CloudFlareRemoteIPTrustedProxy # 取消注释下面这个将会把所有并非来自Cloudflare的请求返回403 # DenyAllButCloudFlare

<IfModule mod_cloudflare.c>
 CloudFlareRemoteIPHeader CF-Connecting-IP
 # 这儿的IP可以参考https://www.cloudflare.com/ips 来自己更新,如果用了自建的Railgun也记得把IP加进去
 CloudFlareRemoteIPTrustedProxy 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 104.16.0.0/12 108.162.192.0/18 131.0.72.0/22 141.101.64.0/18 162.158.0.0/15 172.64.0.0/13 173.245.48.0/20 188.114.96.0/20 190.93.240.0/20 197.234.240.0/22 198.41.128.0/17 199.27.128.0/21 2400:cb00::/32 2405:8100::/32 2405:b500::/32 2606:4700::/32 2803:f800::/32 2c0f:f248::/32 2a06:98c0::/29
 # Uncomment DenyAllButCloudFlare to return a 403 status to all requests
 # that do not originate from an IP defined in CloudFlareRemoteIPTrustedProxy
 # 取消注释下面这个将会把所有并非来自Cloudflare的请求返回403
 # DenyAllButCloudFlare
</IfModule>

然后在你的httpd.conf中添加如下一行

Include conf/extra/cloudflare.conf

Include conf/extra/cloudflare.conf

Include conf/extra/cloudflare.conf

之后重启下Apache就行了

那个 DenyAllButCloudFlare 我强烈建议开启,因为这个就是阻止扫IP最好的方法,但是建议你先把该配的配完,因为开了这个你直接访问IP(默认的default网站)都是403,包括IP下的PhpMyAdmin啥的,除非你把它也丢到绑了域名套了CF的目录下

除了这个以外这个模块的主要功能是把CF的IP换成访客的真实IP,从而方便统计访客和封禁恶意访问的IP

https://www.guozeyu.com/2023/04/s3-nextcloud-lightsail/

如果你有大量的数据——大于 2TB 的数据,需要非常安全可靠的存储,同时这些文件的访问频率低于一年两次,那么最佳的选择是什么呢?本文将介绍我结合 AWS Lightsail,使用 S3 Glacier Deep Archive 存储的方案,实现了最低 $0.99/TB/月的低价云存储。

[](#市面云存储价格对比 "市面云存储价格对比")市面云存储价格对比

TL;DR 考虑到成本和最大容量问题,我使用 iCloud 作为小数据的 “热备份”,使用 S3 作为大文件的 “冷备份”

在进入正题前,我们来对比一下目前市面上的几个存储方案,这里只对比面向个人的存储方案;你也可以直接跳到 Nextcloud 章节。Google Workspace、Apple Business 等面向企业的存储方案往往溢价更高,这里不再做对比。这里所展示的价格为美国区不含税的价格。一些服务会对其他国家有价格歧视 (低价区),这不是本文所讨论的范围。

提供商容量价格 (美元)单价 (美元/TB/月)
iCloud50GB0.9919.80
200GB2.9914.95
2TB9.995.00
6TB29.995.00
12TB59.995.00
Google Drive 1100G1.9919.90
200G2.9914.95
2TB9.995.00
OneDrive 1100GB1.9919.90
1TB6.996.99
6TB 29.991.67
Dropbox2TB11.996.00
3TB19.996.66
Mega400GB 35.4113.53
2TB 310.845.42
8TB 321.682.71
16TB 332.532.03
Pay-as-you-go 316.27/3TB 起2.71
Adobe Creative Cloud 42TB9.995.00
4TB19.995.00
10TB49.995.00
20TB99.995.00
  1. 使用年费方案,Google Drive 和 OneDrive 会更便宜一些,详情参见官网。
  2. OneDrive 并不提供 6TB 的个人套餐。该套餐为家庭套餐,可供 6 个账户使用,每个账户提供 1TB 存储空间。
  3. Mega 的流量是有所限制的,详情参见官网
  4. Adobe 需要配合其他订阅 (至少 $9.99/月) 才可以购买空间

[](#价格分析 "价格分析")价格分析

苹果和谷歌都提供了 $9.99/2TB/月 的存储方案,2TB 对于绝大多数人已经够用,甚至还有点多。苹果和谷歌的更高级的套餐可以与包含自己在内的 6 个人进行共享。微软提供了 $6.99/1TB/月的存储方案,该方案还包含了 Office 套件。相比之下,微软的家庭版套餐提供更高的总容量,但每人限制 1TB 而非 6TB 共享,使得其不是那么的灵活。

根据自己的使用习惯,苹果、谷歌和微软可能也没有多少选择。如果全家都是苹果全家桶用户,那么就直接苹果的 2TB 家人共享就很合适。如果是 Windows 用户,同时是 Office 使用者,那微软的方案是最合适的。如果是 Google Photos 的用户,或者经常使用 Google Workspace 来写文档,那么选择谷歌是更好的。

此外,苹果最新的系统中可以开启 iCloud 端到端加密,开启后所有文件、照片都是端到端加密的。而上述其他的服务商则可能不提供端到端加密,或者是只有部分文件夹是端到端加密。

Dropbox 的跨平台做的不错,我用过它的 Mac 和 Windows 客户端,都非常高效好用。我曾经在 Mac 上使用微软的 OneDrive,体验就极其糟糕。

Google Workspace、Dropbox Teams 则提供了所谓 “无限容量” 的套餐,但所谓无限容量,其实是价格不透明。当使用量足够大的时候,不排除被限制的情况。因此本文只对比有明确标明容量和价格的套餐。

如果需要更大的套餐 (>2TB),那么可以将目光转向 Mega。Mega 提供单位价格更低的网盘服务,同时支持完整的端到端加密。

值得一提的是,Mega 最近也推出了 Pro Flexi 套餐,起价 €15.00/3TB/月,在此基础上 €2.50/TB(流量也是 €2.50/TB),最高可以用到 10,000TB。

如果你使用 Lightroom CC 管理照片,且你的照片是存储大户;或者使用 Premiere Rush 剪辑视频,并且视频是存储大户,那可以选择 Adobe Creative Cloud 的存储空间,最高可以存储 20TB。

[](#我的选择 "我的选择")我的选择

如果 2TB 对你而言足够,且在可预见的未来也不会很快超过 2TB 的存储需求,那么直接选苹果、谷歌、微软、Dropbox 中的一个就行了。如果有大量的 RAW 照片需要存储,那么 Adobe Lightroom CC 则是不错的选择,$9.99/月的 Lightroom 就包含了 1TB 存储空间,加到 $19.99/月就可以有 3TB 存储空间,能随时随地访问到整个图库还是很方便的。

我就有在用苹果的 2TB 套餐,用 iCloud 同步一些小,但经常访问的文件还是很方便的。我也用 iCloud Photos 来同步 iPhone 拍摄的照片和视频,以及导出的全尺寸的 JPEG 和剪辑后的视频。此外,我还用 iCloud 对我的 iOS 设备进行备份。iCloud 是我的 “热备份”

此时我还需要备份相机录制的 MP4、RAW 视频和 RAW 图片,这些文件有数 TB,并且每年还会以几百 GB 的速度增长。这些文件通常不需要随时访问,此时就需要 “冷备份” 了。我体验过一年 1TB 的 Lightroom CC,1TB 的容量对我而言虽然够用,但我的存储量还是会持续增长,不想将来不停的升级到越来越贵的套餐。因此最近又换成了同样价格的 Photography Plan,少了 1TB 的云存储,但多了 Photoshop。

我没有怎么体验过 Mega,但 Mega 确实也曾在我的考虑范围内。最终我没有选择 Mega 的原因是因为它不够便宜。的确,$2.03/TB/月的 16TB 套餐是很便宜了,但如果你只需要用 9TB 呢?此时还是得订阅 16TB 的套餐。而且哪怕用到 16TB,它还是比 S3 Glacier Deep Archive 贵了一倍多。

因此我选择了部署在 Lightsail 上的 Nextcloud 作为冷备份的系统,S3 作为存储后端。同时通过 S3 桶生命周期,实现智能调整文件的存储级别,实现了最低 $0.99/TB/月的云存储。Nextcloud 可以选择开启试验性功能 “Virtual File Support”,可以有选择性的同步文件。(Mac 上需要修改 ~/Library/Preferences/Nextcloud/nextcloud.cfg,在 [General] 下增加 showExperimentalOptions=true

我使用的图像编辑软件是 Adobe Lightroom Classic,我的所有 RAW 照片都是用 Lightroom 管理,原图存储在 Nextcloud 同步的文件夹中。我使用 Lightroom 对所有图像生成了 Smart Preview。在本地空间不足,Nextcloud 清除了老文件时,仍可以使用 Smart Preview 预览和编辑图片,并导出小尺寸的图片。Lightroom Classic 也可以通过 Adobe Creative Cloud,将 Smart Preview 同步到支持移动端的 Lightroom CC 上。这部分的 Smart Preview 是不占用 Adobe 的云空间的。Lightroom Catalog 我存放在本地的默认位置,但其备份存储在 iCloud。

视频剪辑软件我使用的是 Final Cut Pro,我的相机产生的所有视频都使用 Final Cut Pro 管理。Final Cut Pro 可以配置资料库中媒体的存放位置,我将其设置为 Nextcloud 的文件夹。这也是主要占空间的文件。Final Cut Pro 的资料库我存放在本地,其备份存储在 iCloud。

[](#为什么不用-NAS? "为什么不用 NAS?")为什么不用 NAS?

前年的时候,我在Mac mini 有什么用?组建家庭服务器! 里提到我使用 Mac mini 作为 NAS 使用。但当时我只是用它来进行备份,而非云存储。如果用自建 NAS 做云存储的话,出门在外访问则很成问题:最主要的就是受到 NAS 所在网络的上传速度限制,从而体验很差。在我的印象里,哪怕是成熟的 NAS 解决方案,也没有一个 NAS 能提供像 Dropbox 这样好用的全平台客户端。此外,单个的 NAS 并不可靠,因为它没有在物理上跨区域。NAS 中的硬盘也有购置成本,硬盘老化后也有更换成本,自己维护起来还有时间成本,最终未必划算。

如今,我把我的所有文件都放到了云存储,不再需要备份,因此也不再需要用 NAS 再备份一遍云存储中的东西了,只用来做 Mac 的 Time Machine。

[](#Nextcloud "Nextcloud")Nextcloud

Nextcloud 是一整套自建云存储的开源解决方案,从服务端到客户端均有,并仍在持续更新中。跟它极为相近的还有 ownCloud 也是可选的方案。本文将简单介绍我选择的 Nextcloud。不过既然使用 S3 了,为什么还需要服务端?为什么不在本地直接使用 S3 备份工具/挂载工具?因为我是想自建一个类似 Dropbox 的云存储,可多个设备本地实时的同步,没有额外服务端是实现不了或者很难实现的。

为 Nextcloud 选择一个服务器尤为重要。这里我选择 Lightsail 的原因是,Lightsail 可以与 S3 在同一个区域 (Region),之间的延迟很低,并且 Lightsail 与同可用区的 S3 之间的流量是免费的。此外,Lightsail 的很便宜的套餐也有很多的流量可以使用。

我在云服务推荐及选择指南这个文章中也列举了一些其他服务商,他们也可以作为替代 Lightsail 的选择。虽然他们并没有连接 S3 的优势,但一些服务商有提供自己的对象存储解决方案(比如 BuyVM 提供 Block Storage Slab,Google Cloud 提供 Cloud Storage 等)。

[](#对象存储对比 "对象存储对比")对象存储对比

除了亚马逊的 S3 外,微软 Azure、谷歌云也提供与 S3 类似的对象存储。微软 Azure 的 Archive 与 S3 Glacier Deep Archive 在功能和价格上都十分相似,在此不再额外介绍 Azure 的对象存储。谷歌云则有些不一样,我在这里对比一下价格。这里以最便宜的区域为例:

冷存储S3 GlacierS3 GlacierGoogleGoogle
级别名称Deep ArchiveInstant RetrievalArchiveColdline
单价 (美元/TB/月)0.994.001.204.00
最短存储周期(天)1809036590
立即取回价格(美元/TB)不支持205020
12 小时取回价格(美元/TB)20不支持不支持不支持
48 小时取回价格(美元/TB)2.5不支持不支持不支持
流量传输到公网费用(美元/TB)909012011201
  1. 传输到中国大陆地区为 $230/TB,传输到澳洲为 $190/TB。下面计算费用是以其他地区的 $120/TB 计算的。

假设需要存储 10 TB 的文件 10 年,S3 Glacier Deep Archive 的总费用为 $0.99 x 12 x 10 = $118.8;Google Archive 的总费用为 $1.20 x 12 x 10 = $144;S3 Glacier Instant Retrieval 或 Google Coldline 的总费用为 $4.00 x 12 x 10 = $480。

  • 需要立即下载一个 1TB 的文件在我的电脑上,S3 Glacier Deep Archive 是不支持的,S3 Glacier Instant Retrieval 需要 $20 + $90 = $110,Google Coldline 需要 $20 + $120 = $140,Google Archive 需要 $50 + $120 = $170。
  • 如果可以接受在 12 小时后下载一个 1TB 的文件在我的电脑上,S3 需要 $20 + $90 = $110。对于不需要立即访问的数据,Deep Archive 之外的没有优惠。
  • 如果可以接受在 48 小时后下载一个 1TB 的文件在我的电脑上,S3 需要 $2.5 + $90 = $92.5。

所以,对于不需要立即访问的文件,S3 Glacier Deep Archive有着绝对价格优势。但如果有立即访问的需求,S3 的 Glacier Deep Archive 是不支持的,Glacier Instant Retrieval 存储费用相比 Google 更贵,但取回费用相比 Google 更便宜。

由于 S3 的 Glacier Deep Archive 更加便宜,因此我最终选择了 S3。

[](#Lightsail-与-Nextcloud-服务器配置 "Lightsail 与 Nextcloud 服务器配置")Lightsail 与 Nextcloud 服务器配置

Lightsail 我选择了 $5/月的套餐,这个套餐是最具性价比的,包含了 2TB 的流量,同时 CPU 基线也来到了 10%。我这几天实际体验下来,Nextcloud 在不间断上传文件时 CPU 占用在 15-20% 左右,其他时候保持同步占用仅为 1%。也就是说每天可以有 12 小时的上传文件。

Nextcloud 的安装参考 Nextcloud 官网即可。我使用的是 Ubuntu 22.04,官网上给出了这个发行版的安装指南。安装完成后,可以参考 Server tuning 进行优化。我配置了 Redis 和 APCu,开启了 JIT 等,减少 CPU 负载。

Nextcloud 可以选择将 S3 作为 Primary Storage。我不推荐这种做法,因为 S3 作为 Primary Storage 时,S3 存储桶里只保存文件本身,不包含文件的元数据 (包括文件名、目录,因为此时元数据只存在于数据库中),也就是说这时的 S3 的桶是不能直接访问的,只能通过 Nextcloud 访问文件。此外,将 S3 作为 Primary Storage 还会导致性能下降,因为 Nextcloud 会将分段上传的临时文件和 App data 也存在 S3 中,分段上传大文件 CPU 占用极大,且经常出现超时 (已经提优化 issue,欢迎点赞支持)。

Nextcloud 还提供 External Storage 功能,安装完毕后,通过 External Storage 挂载的 S3,其文件结构是保留的,也就是说此时 S3 的存储桶是可以直接访问的。我觉得这个还是很重要的,省去了我备份 Nextcloud 数据库的烦恼。此时就算 Nextcloud 整个实例挂了,我的所有文件都可以在 S3 存储桶里访问。如果将 External Storage 的挂载点配置为 /,那么根目录下所有文件和文件夹都是和 S3 同步的,十分方便。

Nextcloud External Storage 挂载配置

Nextcloud External Storage 挂载配置

此外,我会关闭 Nextcloud 的 Deleted Files 功能,并通过 S3 Versioning 实现版本管理。因为 Deleted Files 开启后,删除文件时,Nextcloud 会将 External Storage 中的文件移动到本地,这样会费时、费钱且占用本地空间。

[](#本地-SSD-空间不够 "本地 SSD 空间不够")本地 SSD 空间不够

尽管已经通过 External Storage 将所有文件存储在 S3,但 Nextcloud 仍会将分段上传的视频存储在本地的 /var/www/nextcloud/data 中,此外 PHP 也会将上传的文件临时存储在 /tmp,除非另行配置。因此,当上传的文件很大时 (比如同时上传多个十几 G 的文件),会超出 Lightsail 本地 SSD 的限制,导致本地 SSD 空间不够。

升级 Lightsail 的配置,或者在 Lightsail 上挂载 SSD 都是增加固定的存储容量,这并不划算。因此,推荐使用 EFS,将网络存储挂载到本机,修改 Nextcloud 的 data 目录到挂载点。参考 AWS 指南 How to Use Amazon EFS with Amazon Lightsail。EFS 是根据使用量按量计费的。只有存在尚未完成的分段上传时,Nextcloud 的 data 目录才会有大文件在,因此 EFS 按量计费十分划算。

EFS 使用 Burst、One Zone 模式即可,这也是最便宜的方式。实测 EFS 的性能比 s3fs 挂载 S3 好很多。

[](#S3-生命周期 "S3 生命周期")S3 生命周期

更多内容待补充,如有问题欢迎在下方评论

电脑已经安装了Office2019的情况下安装Visio2019\_64位,支持正版,请安装正版软件。
安装环境:windows11

Office镜像文件

找到电脑安装Office时候的镜像文件(.iso文件),确保电脑有了镜像文件后右键管理员运行,此电脑中会显示驱动器挂载:

Office部署工具下载

官网下载地址:https://www.microsoft.com/en-us/download/confirmation.aspx?id=49117

我的安装路径为"H:\005-电脑相关\安装包\office"(路径根据自己的需要选择),下载好之后打开文件夹,会有一个setup.exe和一些xml文件,如图:

任意选择一个xml文件,打开方式选择记事本,删除文件中已有的所有内容,粘贴以下xml文件中的内容并保存:
链接:https://pan.baidu.com/s/1yktI902uVnQPIVvftJzWKg?pwd=o5j3
提取码:o5j3

已经转存

安装VISIO

这里以修改configuration-Office2019Enterprise.xml为例,快捷键win+X选择Windows终端(管理员),依次输入下面的命令:

cd H:\005-电脑相关\安装包\office 
.\setup.exe /configure configuration-Office2019Enterprise.xml
12

“H:\005-电脑相关\安装包\office”为Office部署工具下载文件夹,“configuration-Office2019Enterprise.xml”为你所修改的xml文件。

等待安装完成,电脑中就有Visio了