阿里云 OSS 被盗刷流量
编辑前言
重新搭建好博客到现在已经过去半年了,由于工作太忙,一直没时间输出博客😅
但是没想到搭建的环境还没有用起来,反倒是先被攻击了🤦♂️
遭受攻击
早上收到阿里云的邮件提示余额不足,登上控制台一看,好家伙,PicGo 图床搭建一文中利用阿里云 OSS 搭建的图床,2 天内被恶意刷了 400 GB 的流量,直接导致欠费停机了😅
为了备份文件并关闭服务,竟然要先启动服务(充钱)😅
好吧,充值!服务恢复后,快速将文件取回本地并关闭服务,这段时间里又消费了 35 😅
当初使用这个方案的时候,的确考虑过这个问题,所以在上传图片时,使用年/月/日
作为存储路径,时-分-秒-哈希值
作为图片名称,而且获取文件列表也需要鉴权,所以理论上除非在博客中主动分享,图片的链接应该是私密的。
在此之前,博客总共 3 篇文章,11 张图片,硬是靠着这几张图片,2 天请求了 250 万次😅
让我来问问 ChatGPT 需要怎么办?
为了防止阿里云OSS(对象存储服务)遭受分布式拒绝服务(DDoS)攻击,您可以采取以下几项安全措施:
防火墙和访问控制策略:在阿里云控制台或使用API配置网络访问控制,限制只允许受信任的IP地址或IP地址段访问您的OSS存储桶。这样可以降低未经授权的访问和恶意请求的风险。
DDoS防护服务:阿里云提供DDoS防护服务,可帮助抵御DDoS攻击。您可以在阿里云控制台开启DDoS防护功能,并根据实际需求选择合适的防护方案,如高级防护、流量清洗等。
访问频率限制:根据正常使用情况,限制对OSS的访问频率。您可以设置合理的访问频率限制,以防止异常高的访问流量。
内容分发网络(CDN):使用阿里云CDN服务将OSS与CDN结合,通过分发节点分担流量负载,提高响应速度,并通过CDN的防护机制来抵御一定程度的DDoS攻击。
监控和日志分析:定期监控和分析OSS的访问日志,及时发现异常访问和攻击行为。阿里云提供了日志服务和安全运营中心等工具,可用于监测和分析日志数据。
更新安全策略:及时关注阿里云的安全通知和更新,确保您的OSS服务和相关组件都是最新版本,以获取最新的安全补丁和增强功能。
强化访问控制:合理使用阿里云的访问控制策略,为OSS资源设置合适的权限和访问策略。使用RAM(资源访问管理)服务,按照最小权限原则,为不同的用户和角色分配最低必要的权限,避免意外的数据泄露或篡改。
安全备份和容灾:定期备份OSS中的重要数据,并将数据复制到不同的地理位置和存储设备上,以便在发生攻击或故障时能够快速恢复数据并保持业务连续性。
这些措施可以帮助您增强阿里云OSS的安全性,减少DDoS攻击的影响。建议您根据实际需求和安全风险评估,选择合适的安全措施来保护您的OSS服务。
说的很对,但是我选择放弃(不想额外支出了)。
然而没有了图床,又回到了老问题上,纯静态博客放图片太不方便了。那就找一个带后端的博客系统,把图片直接放服务器上吧。曾经体验过 Halo 1.x 版本,感觉挺不错的,今年年初的时候出了 Halo 2.x,支持安装插件,就决定是你了。
切换博客
整体来说,全部都有现成的 Docker,部署非常简单,启动后剩下的内容在页面配置即可。
Halo 本体
参考官方文档使用 Docker Compose 部署:
version: "3"
services:
halo:
image: halohub/halo:2.5
container_name: halo
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./:/root/.halo2
ports:
- "8090:8090"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
command:
- --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
- --spring.r2dbc.username=halo
# PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致。
- --spring.r2dbc.password=openpostgresql
- --spring.sql.init.platform=postgresql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=http://localhost:8090/
# 初始化的超级管理员用户名
- --halo.security.initializer.superadminusername=admin
# 初始化的超级管理员密码
- --halo.security.initializer.superadminpassword=P@88w0rd
halodb:
image: postgres:latest
container_name: halodb
restart: on-failure:3
networks:
halo_network:
volumes:
- ./db:/var/lib/postgresql/data
ports:
- "5432:5432"
healthcheck:
test: [ "CMD", "pg_isready" ]
interval: 10s
timeout: 5s
retries: 5
environment:
- POSTGRES_PASSWORD=openpostgresql
- POSTGRES_USER=halo
- POSTGRES_DB=halo
- PGUSER=halo
networks:
halo_network:
Web 服务器
反向代理依旧使用 Caddy 2:
www.yourdomain.com
encode gzip
reverse_proxy 127.0.0.1:8090
后记
后续有时间了再考虑其他的防御手段吧🤦♂️
- 2
-
分享