千家信息网

如何构建基于WAF的s3cmd安全体系

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要讲解了"如何构建基于WAF的s3cmd安全体系",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何构建基于WAF的s3cmd安全体系"吧!需
千家信息网最后更新 2026年11月01日如何构建基于WAF的s3cmd安全体系

这篇文章主要讲解了"如何构建基于WAF的s3cmd安全体系",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何构建基于WAF的s3cmd安全体系"吧!

需求描述

有线上项目需要对RGW的bucket的访问进行白名单控制,只允许白名单内的IP去访问指定的bucket,简单写了个demo,基本思路是通过openresty写一个WAF模块,去实现设置bucket、IP白名单设置。

基本原理

OpenResty 处理一个请求,它的处理流程请参考下图(从 Request start 开始):

几个关键阶段的简介如下

set_by_lua*: 流程分支处理判断变量初始化

rewrite_by_lua*: 转发、重定向、缓存等功能(例如特定请求代理到外网)

access_by_lua*: IP 准入、接口权限等情况集中处理(例如配合 iptable 完成简单防火墙)

content_by_lua*: 内容生成

header_filter_by_lua*: 响应头部过滤处理(例如添加头部信息)

body_filter_by_lua*: 响应体过滤处理(例如完成应答内容统一成大写)

log_by_lua*: 会话完成后本地异步完成日志记录(日志可以记录在本地,还可以同步到其他机器)

本文的原理非常简单:通过设置bucket和IP的白名单,在access_by_lua阶段对request里面的host和uri等字段进行规则匹配再决定是否放行。

nginx配置

配置文件路径 /etc/nginx/conf.d/default.conf

upstream zone_write {    server 10.63.48.18:7480 weight=13;#对应后端RGW civetweb节点    keepalive 30;}server {    listen       80;    server_name s3.ceph.work *.s3.ceph.work; #endpoint对应的域名    location  / {    proxy_ignore_client_abort on ;    proxy_http_version 1.1; #指定http版本,减少低版本带来的安全隐患    proxy_set_header Host $host;    proxy_set_header X-Forwarded-For $remote_addr;    access_by_lua_file /etc/nginx/conf.d/access.lua; #WAF脚本    proxy_pass http://zone_write;    }}

WAF脚本

脚本路径 /etc/nginx/conf.d/access.lua

local uri = ngx.var.urilocal client_ip = ngx.var.remote_addrlocal host = ngx.var.hostlocal endpoint = 's3.ceph.work' #endpoint地址local white_ip_list = {["127.0.0.1"]=true} #IP白名单local bucket_list = {["bucket1"]=true,["bucket2"]=true} #bucket白名单function get_bucketname(host,uri,endpoint)    local bucket_name = string.match(host, '^[%w-]+.' .. tostring(endpoint) .. '$')    if (string.match(host, '^' .. tostring(endpoint) .. '$')) then        if (string.match(uri,'^/$')) then            return        end        local bucket_name = string.match(uri, '^/[%w-]+/')        return string.sub(bucket_name,2,string.len(bucket_name)-1)    elseif bucket_name then        return string.sub(bucket_name,1,string.len(bucket_name)-string.len(endpoint)-1)    else        return    endendif true == bucket_list[get_bucketname(host,uri,endpoint)] then    if true ~= white_ip_list[client_ip] then        ngx.log(ngx.ERR,"Forbidden:",client_ip)        ngx.exit(ngx.HTTP_FORBIDDEN)    endend

功能验证

在一个IP白名单以外的机器访问

curl bucket1.s3.ceph.work/asdasd #virtual hosted style 方式403 Forbidden

403 Forbidden


nginx
curl s3.ceph.work/bucket2/1233 #path-style 方式403 Forbidden

403 Forbidden


nginx

对应的nginx日志

2017/09/21 14:05:42 [error] 30725#0: *28 [lua] access.lua:29: forbidden:10.xx.xx.xx, client: 10.xx.xx.xx, server: s3.ceph.work, request: "GET /asdasd HTTP/1.1", host: "bucket1.s3.ceph.work"2017/09/21 14:02:47 [error] 30725#0: *22 [lua] access.lua:29: forbidden:10.xx.xx.xx, client: 10.xx.xx.xx, server: s3.ceph.work, request: "GET /bucket2/1233 HTTP/1.1", host: "s3.ceph.work"

感谢各位的阅读,以上就是"如何构建基于WAF的s3cmd安全体系"的内容了,经过本文的学习后,相信大家对如何构建基于WAF的s3cmd安全体系这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

名单 处理 安全 体系 内容 日志 脚本 学习 功能 原理 头部 思路 情况 方式 机器 流程 版本 路径 阶段 配置 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云南咖啡 互联网科技公司简介 中国互联网科技工作委员会毛军 科技与互联网发展 互联网金融 科技金融 广州互联网络科技有限公司 互联网 新科技 卓越科技互联网 招聘 互联网科技公司招聘 深圳前海聚择互联网科技有限公司 阿里互联网科技公司 速维有品互联网信息科技(苏州)有限公司 西安小鹰速贷互联网科技有限公司 中科明德北京互联网科技 合肥互联网科技公司公章图片 启辰互联网科技 互联网科技快讯热点 萌小萌互联网科技河南有限公司 福建互联网展示科技馆设计 河南商务圈互联网科技有限公司 互联网科技工作委员会毛军 无线互联网科技 唐信互联网科技 大连 上海电发互联网科技有限公司 苏州五指互联网络科技有限 科技互联网的核心竞争力 上海乐五互联网科技有限公司 互联网高科技行业有哪些企业 互联网大会出现的黑科技 山东亿川互联网科技有限责任公司
0