普通网友 2025-12-04 02:50 采纳率: 97.8%
浏览 1
已采纳

Redis 6379端口开放如何防止未授权访问?

Redis 6379端口默认对外开放且无身份验证时,极易遭受未授权访问攻击,攻击者可写入恶意数据、执行远程命令甚至获取服务器控制权。常见问题:在公网暴露的Redis实例未配置密码认证或未启用防火墙限制,导致被扫描工具快速发现并利用。如何通过配置绑定IP、设置强密码、启用防火墙及关闭高危命令等方式有效防止未授权访问?
  • 写回答

1条回答 默认 最新

  • 杜肉 2025-12-04 09:04
    关注

    1. Redis 6379端口未授权访问攻击的背景与原理

    Redis 默认监听在 0.0.0.0:6379,这意味着它接受来自任意 IP 地址的连接请求。当未配置身份验证(requirepass)且未限制绑定 IP 时,任何能够访问该端口的攻击者均可直接操作 Redis 实例。

    攻击者常利用公网扫描工具(如 Shodan、ZoomEye)快速发现暴露的 Redis 服务,并通过以下方式实施攻击:

    • 写入恶意数据到数据库,篡改业务逻辑
    • 利用 CONFIG SET dir /root/.sshSAVE 命令生成 SSH 公钥文件,实现远程命令执行
    • 清空数据库或执行主从切换,造成拒绝服务

    此类攻击本质上是由于默认安全配置缺失导致的“低级但致命”的漏洞暴露。

    2. 深度防御策略:从网络层到应用层的逐层加固

    防护层级技术手段对应风险缓解
    网络层绑定内网IP、配置防火墙规则阻止外部扫描和非法连接
    传输层启用 TLS 加密(Redis 6+)防止中间人窃听
    认证层设置强密码(requirepass)杜绝无凭证访问
    命令控制层重命名或禁用高危命令(flushall, config, eval)限制攻击者横向移动能力
    运行环境层以非 root 用户运行 Redis 进程降低权限提升风险

    3. 关键配置项详解与代码示例

    # redis.conf 配置片段(推荐生产环境使用)
    bind 192.168.1.100  # 绑定至内网特定IP,禁止公网直连
    port 6379
    protected-mode yes  # 启用保护模式(若未设密码则仅允许本地访问)
    requirepass YourStrong!Passw0rd@2025  # 设置高强度密码
    rename-command FLUSHALL ""
    rename-command CONFIG "RANDOM_CONFIG_9a8b7c"
    rename-command EVAL "SECURE_EVAL_1f2e3d"
    daemonize yes
    user default on ~* &* +@all -shutdown -debug  # ACL 控制(Redis 6+)
    

    上述配置实现了最小权限原则:仅允许可信 IP 访问、强制身份验证、隐藏关键命令接口。

    4. 防火墙规则配置实践(以 iptables 为例)

    1. 限制仅允许指定管理主机访问 6379 端口:
    2. iptables -A INPUT -p tcp --dport 6379 ! -s 10.0.0.5 -j DROP
    3. 记录异常连接尝试以便审计:
    4. iptables -A INPUT -p tcp --dport 6379 -j LOG --log-prefix "REDIS_ATTEMPT: "
    5. 结合 fail2ban 实现自动封禁机制:
    6. 创建自定义 filter 匹配日志关键字 "REDIS_ATTEMPT"
    7. 触发条件后自动加入 DROP 规则链
    8. 定期审查规则有效性并优化白名单策略
    9. 考虑使用云平台安全组替代传统防火墙(如 AWS Security Group)
    10. 确保规则持久化保存(service iptables save)

    5. 攻击模拟与检测流程图

    graph TD
        A[公网扫描发现6379开放] --> B{是否存在密码?}
        B -- 无认证 --> C[尝试CONFIG GET dir]
        C --> D[写入SSH公钥至authorized_keys]
        D --> E[通过SSH登录服务器]
        E --> F[完全控制系统]
        B -- 有密码 --> G[爆破或社会工程获取凭据]
        G --> H[执行恶意Lua脚本]
        H --> I[提权或数据泄露]
    

    该流程揭示了攻击路径的阶段性特征,也为防御提供了切入点:任一环节阻断即可中断攻击链。

    6. 安全加固最佳实践清单

    • ✅ 禁止 bind 0.0.0.0,改为具体内网 IP
    • ✅ 强制 requirepass 配置,密码长度 ≥12 位,含大小写、数字、特殊字符
    • ✅ 使用 Redis 6+ 的 ACL 功能细化用户权限
    • ✅ 禁用或重命名 flushall、config、debug、eval 等危险命令
    • ✅ 开启 protected-mode 防止意外暴露
    • ✅ 日志审计:记录所有客户端命令执行历史(需注意性能影响)
    • ✅ 定期进行渗透测试,验证防护有效性
    • ✅ 部署 WAF 或专用数据库防火墙监控异常行为
    • ✅ 使用 systemd 或 supervisord 管理进程,避免手动启动遗漏配置
    • ✅ 建立变更管理流程,禁止未经审批的配置修改
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 12月5日
  • 创建了问题 12月4日