Lucky访问控制列表:IP、UserAgent与Referer过滤,精细化权限管理

【免费下载链接】lucky 软硬路由公网神器,ipv6/ipv4 端口转发,反向代理,DDNS,WOL,ipv4 stun内网穿透,cron,acme,阿里云盘,ftp,webdav,filebrowser 【免费下载链接】lucky 项目地址: https://gitcode.com/GitHub_Trending/luc/lucky

在网络安全防护中,访问控制是抵御未授权访问的第一道防线。Lucky作为软硬路由公网神器,提供了完善的访问控制列表(ACL)功能,通过IP黑白名单、UserAgent过滤和Referer验证等多层防护机制,帮助用户构建精细化的权限管理体系。本文将从功能原理、配置方法和实战场景三个维度,全面解析Lucky访问控制体系的实现与应用。

访问控制核心模块架构

Lucky的访问控制功能基于黑白名单双机制设计,核心实现分散在配置模块与安全模块中。配置层负责规则存储与管理,安全层实现实时过滤逻辑,Web层提供可视化操作界面,三者协同构成完整的访问控制闭环。

模块文件结构

访问控制功能主要通过以下核心文件实现:

数据结构设计

白名单配置采用IP/网段+有效期的复合结构,在config/whitelist.go中定义为:

type WhiteListItem struct {
    IP            string     `json:"IP"`           // 支持单IP(192.168.1.1)或CIDR网段(192.168.1.0/24)
    EffectiveTime string     `json:"Effectivetime"`// 有效期,格式为"2006-01-02 15:04:05"
    NetIP         net.IP     `json:"-"`            // 内部缓存的IP对象
    Cidr          *net.IPNet `json:"-"`            // 内部缓存的网段对象
}

黑名单实现与白名单类似,但在config/blacklist.go中采用独立的BlackListItem结构,区别在于黑名单默认有效期更长(666666小时),且优先级低于白名单(白名单允许的IP会跳过黑名单检查)。

IP黑白名单配置实战

Lucky提供直观的Web界面配置IP访问规则,支持单IP、CIDR网段和临时授权三种模式。配置流程包括规则添加、有效期管理和实时生效三个步骤,无需重启服务即可完成防护策略更新。

白名单配置界面

白名单管理界面(web/adminviews/src/components/WhiteLists.vue)采用表格布局展示已配置规则,包含IP地址、有效期和操作按钮三列。界面底部固定显示"白名单添加"按钮,点击后弹出配置对话框:

白名单管理界面

添加白名单时需指定两个参数:

  • IP地址:支持IPv4/IPv6单IP或CIDR网段(如192.168.1.0/24)
  • 有效时间:以小时为单位,范围1-999999,默认24小时

规则管理API调用流程

当在Web界面点击"添加"按钮时,前端通过apiFlushWhiteList接口调用后端服务:

// 前端代码片段 from WhiteLists.vue
const addWhiteList = () => {
  apiFlushWhiteList(addWhiteListForm.value.IP, addWhiteListForm.value.Life)
    .then((res) => {
      if (res.ret == 0) {
        let item = { IP: addWhiteListForm.value.IP, Effectivetime: res.data }
        whitelist.value.push(item)
        addWhiteListDialogVisible.value = false
      }
    })
}

后端处理流程在module/safe/whitelist.go中实现,核心逻辑包括:

  1. IP格式验证(支持CIDR解析)
  2. 规则冲突检查(避免重复添加)
  3. 有效期计算(当前时间+指定小时数)
  4. 配置持久化(调用config.Save()保存到文件)

黑名单自动过期机制

黑名单实现了自动过期清理功能,config/blacklist.go中的BlackListFlush函数会定期检查规则有效性:

// 黑名单过期清理逻辑
func BlackListFlush(lock bool) error {
    // 加锁控制(可选)
    // ...
    
CONTINUECHECK:
    removeIndex := -1
    for i, ipr := range programConfigure.BlackListConfigure.BlackList {
        ipat, err := time.ParseInLocation("2006-01-02 15:04:05", ipr.EffectiveTime, time.Local)
        if err != nil || time.Since(ipat) > 0 { // 时间格式错误或已过期
            removeIndex = i
            break
        }
    }
    
    if removeIndex >= 0 {
        programConfigure.BlackListConfigure.BlackList = DeleteBlackListlice(...)
        goto CONTINUECHECK // 继续检查是否还有过期规则
    }
    // ...
}

系统会定期调用此函数(默认每小时),自动移除过期规则,无需人工干预。

高级过滤:UserAgent与Referer验证

除IP级控制外,Lucky还支持HTTP头部过滤,通过验证UserAgent和Referer字段实现应用层访问控制。该功能特别适用于Web服务防护,可有效阻止爬虫抓取和未授权嵌入。

功能实现位置

UserAgent与Referer过滤功能在module/safe/safecheck.go中实现,核心函数CheckHTTPRequest接收http.Request对象,返回是否允许访问的布尔值:

func CheckHTTPRequest(r *http.Request) bool {
    // 1. 先检查IP白名单,命中则直接允许
    // 2. 检查IP黑名单,命中则拒绝
    // 3. UserAgent过滤检查
    if !CheckUserAgent(r.UserAgent()) {
        return false
    }
    // 4. Referer验证检查
    if !CheckReferer(r.Referer()) {
        return false
    }
    return true
}

配置方法

目前UserAgent与Referer规则需通过配置文件手动添加,配置项位于config/safecheck.go的SafeCheckConfigure结构中:

type SafeCheckConfigure struct {
    EnableUserAgentFilter bool     `json:"EnableUserAgentFilter"` // 是否启用UserAgent过滤
    AllowedUserAgents     []string `json:"AllowedUserAgents"`     // 允许的UserAgent列表
    EnableRefererCheck    bool     `json:"EnableRefererCheck"`    // 是否启用Referer检查
    AllowedReferers       []string `json:"AllowedReferers"`       // 允许的Referer前缀列表
}

配置示例(仅允许特定浏览器和域名访问):

{
  "EnableUserAgentFilter": true,
  "AllowedUserAgents": ["Mozilla/5.0", "Chrome/"],
  "EnableRefererCheck": true,
  "AllowedReferers": ["https://example.com/", "https://admin.example.com/"]
}

访问控制策略最佳实践

基于Lucky的访问控制能力,结合网络架构特点设计合理的防护策略,可在安全性与可用性之间取得平衡。以下是企业与家庭场景的典型配置方案,以及常见攻击的防御策略。

典型应用场景

家庭网络场景

家庭用户可采用"白名单为主,黑名单为辅"的策略:

  1. 将常用设备IP加入白名单(如192.168.1.100-192.168.1.110)
  2. 对临时访客开放24小时临时授权
  3. 启用UserAgent过滤阻止异常请求

配置示例(通过config/whitelist.go实现):

// 添加家庭网段白名单,长期有效
WhiteListAdd("192.168.1.0/24", 999999)
// 添加手机临时授权,24小时有效
WhiteListAdd("113.207.xxx.xxx", 24)
企业服务器场景

企业环境建议采用更严格的控制策略:

  1. 仅开放办公网段白名单
  2. 启用Referer验证防止API被第三方调用
  3. 定期自动清理过期规则

防御CC攻击配置

针对CC攻击,可组合使用以下策略:

  1. 动态黑名单:将短时间内请求超过阈值的IP自动加入黑名单
  2. UserAgent过滤:只允许常见浏览器标识
  3. 频率限制:结合Lucky的端口转发功能设置连接速率限制

相关实现可参考module/safe/safecheck.go中的流量统计功能,通过记录IP请求次数并与阈值比较,触发自动拉黑机制。

配置备份与迁移

为确保访问控制策略的连续性,Lucky支持配置文件导出与导入功能,可通过Web界面或文件操作两种方式实现配置迁移。

配置文件位置

访问控制相关配置存储在主配置文件中,通过config/config.go中的ProgramConfigure结构组织:

type ProgramConfigure struct {
    BlackListConfigure BlackListConfigure `json:"BlackListConfigure"`
    WhiteListConfigure WhiteListConfigure `json:"WhiteListConfigure"`
    SafeCheckConfigure SafeCheckConfigure `json:"SafeCheckConfigure"`
    // 其他配置项...
}

实际配置文件通常位于程序运行目录下的config.json,可直接备份此文件实现配置迁移。

批量操作技巧

通过修改配置文件可实现批量规则管理,例如添加多个IP段:

{
  "WhiteListConfigure": {
    "WhiteList": [
      {"IP": "192.168.1.0/24", "Effectivetime": "2025-12-31 23:59:59"},
      {"IP": "10.0.0.0/8", "Effectivetime": "2025-12-31 23:59:59"}
    ]
  }
}

修改完成后通过Web界面的"配置重载"功能使更改生效,无需重启服务。

总结与展望

Lucky的访问控制功能通过多层次防护机制,为软硬路由环境提供了企业级的安全防护能力。从IP黑白名单到应用层HTTP头部过滤,从临时授权到自动过期,全方位满足不同场景的权限管理需求。

功能演进路线

根据config/safecheck.go中的预留接口,未来版本可能新增以下功能:

  • 地理位置过滤:基于IP所属地区进行访问控制
  • 多因素认证:结合Web界面实现二次验证
  • 日志审计:详细记录访问控制事件,支持合规审计

社区支持与资源

如需获取更多帮助,可参考以下资源:

  • 官方文档:项目根目录下的README.md
  • Web管理界面:部署Lucky后访问默认端口(通常8080)
  • 源码示例:module/safe/目录下的测试用例

通过合理配置Lucky访问控制列表,用户可构建起纵深防御体系,有效抵御未授权访问和恶意攻击,为家庭和企业网络提供可靠的安全保障。

【免费下载链接】lucky 软硬路由公网神器,ipv6/ipv4 端口转发,反向代理,DDNS,WOL,ipv4 stun内网穿透,cron,acme,阿里云盘,ftp,webdav,filebrowser 【免费下载链接】lucky 项目地址: https://gitcode.com/GitHub_Trending/luc/lucky

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐