关于 Memurai :Memurai 是 Windows 平台上的 Redis 兼容实现,提供与 Redis 相同的命令和功能。配置文件为
memurai.conf,服务名为Memurai。可以使用memurai-cli或redis-cli连接 Memurai。
目录
- [一、Memurai IP 访问限制配置](#一、Memurai IP 访问限制配置 "#%E4%B8%80memurai-ip-%E8%AE%BF%E9%97%AE%E9%99%90%E5%88%B6%E9%85%8D%E7%BD%AE")
- [1.5 用户访问控制(ACL 用户管理)](#1.5 用户访问控制(ACL 用户管理) "#15-%E7%94%A8%E6%88%B7%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6acl-%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86")
- 二、配置文件位置与创建
- 三、配置文件内容详解
- 四、验证配置是否生效
- 五、关键配置字段详解
- 六、远程连接检查清单
- 七、安全配置建议
- 八、扩展内容
一、Memurai IP 访问限制配置
1.1 核心概念
Memurai 的 IP 访问控制通过 bind 和 protected-mode 配置项实现:
bind:指定 Memurai 监听哪个 IP 地址protected-mode:保护模式,当未设置密码且只允许本地访问时启用
不限制 IP = 允许远程访问 = 配置 bind 0.0.0.0 并设置密码
1.2 允许远程访问(不限制 IP)
步骤 1:找到 Memurai 配置文件
Windows 下常见位置:
makefile
C:\Program Files\Memurai\memurai.conf
C:\ProgramData\Memurai\memurai.conf
C:\memurai\memurai.conf
查找方法:
- 查看 Memurai 服务配置
- 查看安装目录
- 使用
memurai-cli CONFIG GET dir查看配置目录 - 检查服务启动参数:
sc qc Memurai
步骤 2:修改配置文件
打开 Memurai 配置文件(memurai.conf),找到并修改以下配置项:
conf
# 允许所有 IP 连接(不限制 IP)
bind 0.0.0.0
# 关闭保护模式(如果设置了密码,可以关闭)
protected-mode no
# 设置密码(强烈推荐)
requirepass your_strong_password_123
步骤 3:重启 Memurai 服务
Windows 服务方式:
bash
# 停止服务
net stop Memurai
# 启动服务
net start Memurai
或者使用服务管理器:
- Win + R →
services.msc→ 找到 Memurai 服务 → 重启
步骤 4:验证配置
bash
# 连接 Memurai(使用 memurai-cli 或 redis-cli)
memurai-cli
# 如果设置了密码,需要先认证
AUTH your_strong_password_123
# 查看 bind 配置
CONFIG GET bind
# 查看 protected-mode 配置
CONFIG GET protected-mode
预期结果:
arduino
1) "bind"
2) "0.0.0.0"
1) "protected-mode"
2) "no"
1.3 限制 IP 访问(仅允许特定 IP)
方法一:仅允许本地访问(最安全)
conf
# 仅允许本地连接
bind 127.0.0.1
# 启用保护模式
protected-mode yes
方法二:允许特定 IP 访问
conf
# 允许本地和特定 IP
bind 127.0.0.1 192.168.1.100
# 启用保护模式
protected-mode yes
# 设置密码(推荐)
requirepass your_strong_password_123
方法三:允许网段访问
conf
# 允许本地和整个网段
bind 127.0.0.1 192.168.1.0/24
# 注意:Redis 不支持 CIDR 格式,需要列出具体 IP 或使用防火墙
注意 :Redis 的
bind不支持 CIDR 网段格式,如需限制网段,建议使用防火墙规则。
1.4 完整配置示例
示例 1:开发环境(允许远程访问)
conf
# 网络配置
bind 0.0.0.0
port 6379
protected-mode no
# 安全配置
requirepass dev_password_123
# 其他配置
timeout 0
tcp-keepalive 300
示例 2:生产环境(限制访问)
conf
# 网络配置
bind 127.0.0.1 192.168.1.100
port 6379
protected-mode yes
# 安全配置
requirepass Strong_Password_123!@#
# 其他配置
timeout 0
tcp-keepalive 300
maxmemory 2gb
maxmemory-policy allkeys-lru
1.5 用户访问控制(ACL 用户管理)
Memurai(兼容 Redis 6.0+)支持 ACL(Access Control List)用户管理系统,可以创建多个用户并设置不同的权限。
1.5.1 ACL 用户管理概述
ACL 系统特点:
- 支持创建多个用户
- 每个用户可以设置独立的密码
- 可以为用户分配不同的命令权限
- 可以限制用户访问的键(key)模式
- 支持只读用户、只写用户等不同角色
ACL vs requirepass:
requirepass:单一密码,所有连接使用同一个密码ACL:多用户系统,每个用户有独立的密码和权限
1.5.2 启用 ACL 功能
方法一:在配置文件中启用(推荐)
在 memurai.conf 中添加:
conf
# 启用 ACL
aclfile "C:\Program Files\Memurai\users.acl"
# 或者直接在配置文件中定义用户
user default on nopass ~* &* +@all
方法二:使用命令行启用
bash
memurai-server --aclfile "C:\Program Files\Memurai\users.acl"
1.5.3 创建用户
基本语法:
bash
ACL SETUSER username [rule [rule ...]]
创建用户示例:
bash
# 连接 Memurai
memurai-cli
# 或
redis-cli
# 如果设置了默认密码,先认证
AUTH default_password
# 创建用户并设置密码
ACL SETUSER app_user on >app_password_123 ~* &* +@all
# 创建只读用户
ACL SETUSER readonly_user on >readonly_pass_123 ~* &* +@read +@keyspace
# 创建仅允许访问特定键前缀的用户
ACL SETUSER api_user on >api_pass_123 ~api:* &* +@all -@dangerous
参数说明:
on:启用用户off:禁用用户>password:设置用户密码~pattern:允许访问的键模式(~*表示所有键)&pattern:允许访问的发布/订阅频道模式(&*表示所有频道)+@category:允许的命令类别-@category:禁止的命令类别+command:允许特定命令-command:禁止特定命令
1.5.4 用户权限类别
常用命令类别:
| 类别 | 说明 | 包含的命令 |
|---|---|---|
@all |
所有命令 | 所有可用命令 |
@read |
只读命令 | GET, HGET, LRANGE, SMEMBERS 等 |
@write |
写入命令 | SET, HSET, LPUSH, SADD 等 |
@keyspace |
键空间命令 | DEL, EXISTS, EXPIRE, TTL 等 |
@string |
字符串命令 | GET, SET, APPEND, INCR 等 |
@list |
列表命令 | LPUSH, RPUSH, LPOP, RPOP 等 |
@hash |
哈希命令 | HGET, HSET, HGETALL 等 |
@set |
集合命令 | SADD, SMEMBERS, SINTER 等 |
@sortedset |
有序集合命令 | ZADD, ZRANGE, ZSCORE 等 |
@stream |
流命令 | XADD, XREAD, XRANGE 等 |
@pubsub |
发布订阅命令 | PUBLISH, SUBSCRIBE, PSUBSCRIBE 等 |
@admin |
管理命令 | CONFIG, INFO, SHUTDOWN 等 |
@dangerous |
危险命令 | FLUSHALL, FLUSHDB, KEYS 等 |
1.5.5 用户管理完整案例
案例 1:创建管理员用户(所有权限)
bash
# 创建管理员用户
ACL SETUSER admin on >admin_strong_password_123 ~* &* +@all
# 验证用户
ACL GETUSER admin
案例 2:创建应用用户(读写权限,禁止危险命令)
bash
# 创建应用用户,允许所有键的读写,禁止危险命令
ACL SETUSER app_user on >app_password_123 ~* &* +@all -@dangerous -FLUSHALL -FLUSHDB -KEYS
# 验证用户
ACL GETUSER app_user
案例 3:创建只读用户
bash
# 创建只读用户
ACL SETUSER readonly_user on >readonly_pass_123 ~* &* +@read +@keyspace
# 验证用户
ACL GETUSER readonly_user
案例 4:创建受限用户(仅访问特定键前缀)
bash
# 创建仅能访问 api:* 键的用户
ACL SETUSER api_user on >api_pass_123 ~api:* &* +@all -@dangerous
# 验证用户
ACL GETUSER api_user
案例 5:创建缓存用户(仅字符串操作)
bash
# 创建仅能进行字符串操作的用户
ACL SETUSER cache_user on >cache_pass_123 ~cache:* &* +@string +@keyspace
# 验证用户
ACL GETUSER cache_user
1.5.6 用户管理命令
查看所有用户:
bash
ACL LIST
查看特定用户信息:
bash
ACL GETUSER username
查看当前用户:
bash
ACL WHOAMI
删除用户:
bash
ACL DELUSER username
修改用户密码:
bash
# 方法 1:重新设置密码
ACL SETUSER username >new_password
# 方法 2:清除密码
ACL SETUSER username nopass
启用/禁用用户:
bash
# 启用用户
ACL SETUSER username on
# 禁用用户
ACL SETUSER username off
保存 ACL 配置到文件:
bash
ACL SAVE
1.5.7 使用用户连接
使用特定用户连接:
bash
# 方式 1:连接时指定用户和密码
memurai-cli --user app_user --pass app_password_123
# 或
redis-cli --user app_user --pass app_password_123
# 方式 2:连接后认证
memurai-cli
AUTH app_user app_password_123
# 方式 3:URL 格式
memurai-cli -u redis://app_user:app_password_123@host:port
验证当前用户:
bash
ACL WHOAMI
1.5.8 在配置文件中定义用户
在 memurai.conf 中可以直接定义用户:
conf
# 定义默认用户(无密码,所有权限)
user default on nopass ~* &* +@all
# 定义管理员用户
user admin on >admin_password_123 ~* &* +@all
# 定义应用用户
user app_user on >app_password_123 ~* &* +@all -@dangerous
# 定义只读用户
user readonly_user on >readonly_pass_123 ~* &* +@read +@keyspace
# 定义受限用户(仅访问特定键)
user api_user on >api_pass_123 ~api:* &* +@all -@dangerous
加载配置文件后,用户会自动创建。
1.5.9 ACL 文件管理
ACL 文件格式:
sql
user default on nopass ~* &* +@all
user admin on >admin_password_123 ~* &* +@all
user app_user on >app_password_123 ~* &* +@all -@dangerous
在配置文件中指定 ACL 文件:
conf
aclfile "C:\Program Files\Memurai\users.acl"
保存当前 ACL 配置到文件:
bash
ACL SAVE
从文件加载 ACL 配置:
bash
ACL LOAD
1.5.10 用户权限验证
测试用户权限:
bash
# 使用只读用户连接
memurai-cli --user readonly_user --pass readonly_pass_123
# 尝试读取(应该成功)
GET mykey
# 尝试写入(应该失败)
SET mykey value
# 错误:(error) NOPERM this user has no permissions to run the 'set' command
查看用户权限详情:
bash
ACL GETUSER readonly_user
1.5.11 与传统 requirepass 的对比
| 特性 | requirepass | ACL 用户系统 |
|---|---|---|
| 用户数量 | 单一密码 | 多个用户 |
| 权限控制 | 无(所有用户相同权限) | 细粒度权限控制 |
| 适用场景 | 简单场景 | 生产环境、多应用 |
| Redis 版本 | 所有版本 | Redis 6.0+ / Memurai |
| 配置复杂度 | 简单 | 较复杂 |
建议:
- 开发/测试环境 :可以使用
requirepass(简单) - 生产环境:推荐使用 ACL 用户系统(更安全、更灵活)
二、配置文件位置与创建
2.1 查找 Memurai 配置文件位置
方法 1:查看 Memurai 服务配置
Windows 服务管理器:
- Win + R →
services.msc - 找到 Memurai 服务
- 右键 → 属性 → 查看"可执行文件的路径"
命令行方式:
bash
sc qc Memurai
方法 2:使用 Memurai CLI 查询
bash
memurai-cli
# 或使用 redis-cli(Memurai 兼容 Redis 命令)
# 查看配置目录
CONFIG GET dir
# 查看所有配置
CONFIG GET "*"
方法 3:查看安装目录
常见安装位置:
makefile
C:\Program Files\Memurai\
C:\ProgramData\Memurai\
C:\memurai\
配置文件名称:
memurai.conf(Memurai 主配置文件)
2.2 创建或修改配置文件
步骤 1:找到配置文件
根据上述方法找到配置文件位置。
步骤 2:备份原配置文件(重要)
bash
# 复制配置文件作为备份
copy "C:\Program Files\Memurai\memurai.conf" "C:\Program Files\Memurai\memurai.conf.bak"
步骤 3:编辑配置文件
使用文本编辑器(如 Notepad++、VS Code)打开 memurai.conf 文件。
注意:确保使用 UTF-8 编码保存。
步骤 4:重启 Memurai 服务
bash
net stop Memurai
net start Memurai
2.3 配置文件查找顺序
Memurai 启动时按以下顺序查找配置文件:
- 命令行参数
--config-file指定的文件 - 服务配置中指定的配置文件路径
- 默认配置文件(安装目录下的
memurai.conf)
三、配置文件内容详解
3.1 网络相关配置
bind
作用:指定 Redis 监听哪个 IP 地址
语法:
conf
bind ip1 ip2 ip3
常用值:
| 值 | 含义 | 说明 |
|---|---|---|
127.0.0.1 |
仅本地访问 | 最安全,不允许远程连接 |
0.0.0.0 |
所有 IP | 允许任何 IP 连接(不限制 IP) |
192.168.1.100 |
指定 IP | 仅允许该 IP 连接 |
127.0.0.1 192.168.1.100 |
多个 IP | 允许本地和指定 IP |
示例:
conf
# 允许所有 IP 连接
bind 0.0.0.0
# 仅允许本地连接
bind 127.0.0.1
# 允许本地和特定 IP
bind 127.0.0.1 192.168.1.100
port
作用:指定 Redis 监听端口
默认值 :6379
示例:
conf
port 6379
protected-mode
作用:保护模式,当未设置密码且只允许本地访问时启用
值:
yes:启用保护模式(默认)no:关闭保护模式
说明:
- 当
protected-mode yes且未设置密码时,只允许本地连接 - 当设置了密码或
bind 0.0.0.0时,建议protected-mode no
示例:
conf
# 允许远程访问时
protected-mode no
# 仅本地访问时
protected-mode yes
timeout
作用:客户端空闲超时时间(秒)
默认值 :0(不超时)
示例:
conf
timeout 300 # 300 秒无操作自动断开
tcp-keepalive
作用:TCP 保活时间(秒)
默认值 :300
示例:
conf
tcp-keepalive 300
3.2 安全相关配置
requirepass
作用:设置 Redis 访问密码
语法:
conf
requirepass your_password
重要提示:
- 生产环境必须设置强密码
- 密码不要包含特殊字符(如
#、空格),可能导致解析错误 - 建议使用字母、数字、下划线组合
示例:
conf
requirepass Redis_Password_123
使用密码连接:
bash
# 方式 1:连接时指定密码
redis-cli -a your_password
# 方式 2:连接后认证
redis-cli
AUTH your_password
rename-command
作用:重命名危险命令,提高安全性
示例:
conf
# 禁用 FLUSHALL 命令
rename-command FLUSHALL ""
# 重命名 FLUSHDB 命令
rename-command FLUSHDB "FLUSHDB_SECRET_KEY"
# 重命名 CONFIG 命令
rename-command CONFIG "CONFIG_SECRET_KEY"
3.3 完整配置模板
开发环境配置
conf
################################## NETWORK #####################################
# 允许所有 IP 连接
bind 0.0.0.0
# 端口
port 6379
# 关闭保护模式(已设置密码)
protected-mode no
# 超时设置
timeout 0
tcp-keepalive 300
################################# SECURITY #####################################
# 设置密码
requirepass dev_password_123
################################# GENERAL #####################################
# 守护进程模式(Windows 下无效)
# daemonize yes
# 日志级别
loglevel notice
# 日志文件
logfile ""
# 数据库数量
databases 16
################################# SNAPSHOTTING ################################
# RDB 持久化配置
save 900 1
save 300 10
save 60 10000
# RDB 文件名
dbfilename dump.rdb
# 工作目录
dir ./
生产环境配置
conf
################################## NETWORK #####################################
# 仅允许本地和特定 IP
bind 127.0.0.1 192.168.1.100
# 端口
port 6379
# 启用保护模式
protected-mode yes
# 超时设置
timeout 300
tcp-keepalive 60
################################# SECURITY #####################################
# 强密码
requirepass Strong_Password_123!@#
# 重命名危险命令
rename-command FLUSHALL ""
rename-command FLUSHDB "FLUSHDB_SECRET"
rename-command CONFIG "CONFIG_SECRET"
rename-command SHUTDOWN "SHUTDOWN_SECRET"
################################# MEMORY #####################################
# 最大内存
maxmemory 2gb
# 内存淘汰策略
maxmemory-policy allkeys-lru
################################# PERSISTENCE ################################
# AOF 持久化
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
# RDB 持久化
save 900 1
save 300 10
save 60 10000
四、验证配置是否生效
4.1 方法一:使用 Memurai CLI 查看配置(最常用)
bash
# 连接 Memurai(可以使用 memurai-cli 或 redis-cli)
memurai-cli
# 或
redis-cli
# 如果设置了密码,先认证
AUTH your_password
# 查看 bind 配置
CONFIG GET bind
# 查看 protected-mode 配置
CONFIG GET protected-mode
# 查看 port 配置
CONFIG GET port
# 查看所有配置
CONFIG GET "*"
预期结果(允许远程访问):
arduino
1) "bind"
2) "0.0.0.0"
1) "protected-mode"
2) "no"
1) "port"
2) "6379"
4.2 方法二:测试远程连接
在另一台机器或本机模拟远程连接:
bash
# 方式 1:指定 IP 和密码(使用 memurai-cli 或 redis-cli)
memurai-cli -h 服务器IP -p 6379 -a your_password
# 或
redis-cli -h 服务器IP -p 6379 -a your_password
# 方式 2:分步连接
memurai-cli -h 服务器IP -p 6379
# 或
redis-cli -h 服务器IP -p 6379
AUTH your_password
成功标志:
makefile
服务器IP:6379> PING
PONG
失败情况:
Connection refused:bind 配置错误或防火墙阻止NOAUTH Authentication required:需要密码认证(error) ERR invalid password:密码错误
4.3 方法三:查看 Memurai 日志
Windows 下查看日志:
bash
# 查看 Memurai 服务日志
# 通常在安装目录下或 Windows 事件查看器中
# 事件查看器
eventvwr.msc
# 应用程序和服务日志 → Memurai
日志中查找:
markdown
* Ready to accept connections
* Server initialized
4.4 方法四:使用 netstat 查看监听端口
bash
# 查看 Memurai 端口监听情况
netstat -an | findstr 6379
预期输出(允许远程访问):
TCP 0.0.0.0:6379 0.0.0.0:0 LISTENING
仅本地访问:
TCP 127.0.0.1:6379 0.0.0.0:0 LISTENING
4.5 常见问题排查
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
| 远程连接被拒绝 | bind 127.0.0.1 |
改为 bind 0.0.0.0 |
| 需要密码认证 | 未设置密码或密码错误 | 使用 AUTH password 或 -a password |
| 保护模式错误 | protected-mode yes 且无密码 |
设置密码或 protected-mode no |
| 配置不生效 | 未重启服务 | 执行 net stop Memurai 和 net start Memurai |
| 防火墙阻止 | Windows 防火墙未放行 | 添加防火墙规则 |
五、关键配置字段详解
5.1 bind 详解
核心概念
bind 决定 Memurai 服务监听哪个本地 IP 地址。
重要区分:
bind:控制 Memurai 监听哪(服务层)- 防火墙:控制 谁能连(网络层)
- 密码:控制 谁能用(应用层)
常见配置及含义
| 配置 | 含义 | 适用场景 |
|---|---|---|
bind 127.0.0.1 |
仅监听本机 | 最安全,单机应用 |
bind 0.0.0.0 |
监听所有 IPv4 网卡 | 允许远程访问(不限制 IP) |
bind 192.168.1.100 |
仅监听指定 IP | 生产环境,更安全 |
bind 127.0.0.1 192.168.1.100 |
监听多个 IP | 允许本地和特定 IP |
配置文件写法(最佳实践)
允许远程访问:
conf
bind 0.0.0.0
protected-mode no
requirepass your_strong_password
仅本地访问:
conf
bind 127.0.0.1
protected-mode yes
允许特定 IP:
conf
bind 127.0.0.1 192.168.1.100
protected-mode yes
requirepass your_strong_password
5.2 protected-mode 详解
核心概念
protected-mode 是 Memurai(兼容 Redis 3.2+)的安全特性。
工作原理:
- 当
protected-mode yes时:- 如果未设置密码,只允许本地连接(
127.0.0.1) - 如果设置了密码,允许远程连接
- 如果未设置密码,只允许本地连接(
- 当
protected-mode no时:- 允许所有连接(需要配合密码使用)
配置建议
| 场景 | protected-mode | requirepass | bind |
|---|---|---|---|
| 仅本地,无密码 | yes |
不设置 | 127.0.0.1 |
| 仅本地,有密码 | yes |
设置 | 127.0.0.1 |
| 远程访问,有密码 | no |
设置 | 0.0.0.0 |
| 远程访问,无密码 | no |
不设置 | 0.0.0.0 ⚠️ 不安全 |
重要 :生产环境必须 设置密码,即使
protected-mode no。
5.3 requirepass 详解
设置密码
conf
requirepass your_password_here
使用密码连接
方式 1:命令行参数
bash
memurai-cli -a your_password
# 或
redis-cli -a your_password
方式 2:连接后认证
bash
memurai-cli
# 或
redis-cli
AUTH your_password
方式 3:URL 格式
bash
memurai-cli -u redis://:your_password@host:port
# 或
redis-cli -u redis://:your_password@host:port
修改密码
bash
# 连接 Memurai
memurai-cli
# 或
redis-cli
# 认证
AUTH old_password
# 修改密码
CONFIG SET requirepass new_password
# 保存配置(可选)
CONFIG REWRITE
取消密码
bash
CONFIG SET requirepass ""
注意 :取消密码后,如果
protected-mode yes,将只允许本地连接。
5.4 配置优先级
Memurai 配置的优先级(从高到低):
- 运行时配置 :
CONFIG SET命令 - 命令行参数 :
memurai-server --bind 0.0.0.0 - 配置文件 :
memurai.conf中的配置 - 默认值:Memurai 内置默认值
查看当前生效配置:
bash
CONFIG GET bind
CONFIG GET protected-mode
六、远程连接检查清单
6.1 检查项列表
✅ 1. bind 配置为 0.0.0.0 或包含目标 IP
bash
redis-cli
CONFIG GET bind
预期结果:
bash
1) "bind"
2) "0.0.0.0" # 或包含你的 IP
✅ 2. protected-mode 配置正确
bash
CONFIG GET protected-mode
预期结果(允许远程访问):
bash
1) "protected-mode"
2) "no" # 如果设置了密码
✅ 3. 已设置密码(推荐)
bash
CONFIG GET requirepass
预期结果:
bash
1) "requirepass"
2) "your_password" # 或空字符串(不推荐)
✅ 4. Windows 防火墙放行 6379 端口
在管理员 CMD 中执行:
bash
netsh advfirewall firewall add rule name="Redis 6379" dir=in action=allow protocol=TCP localport=6379
验证防火墙规则:
bash
netsh advfirewall firewall show rule name="Redis 6379"
✅ 5. Memurai 服务正在运行
bash
# 检查服务状态
sc query Memurai
# 或查看端口监听
netstat -an | findstr 6379
6.2 测试远程连接
在另一台机器或本机模拟远程连接:
bash
# 方式 1:指定密码(使用 memurai-cli 或 redis-cli)
memurai-cli -h 服务器IP -p 6379 -a your_password
# 或
redis-cli -h 服务器IP -p 6379 -a your_password
# 方式 2:分步连接
memurai-cli -h 服务器IP -p 6379
# 或
redis-cli -h 服务器IP -p 6379
AUTH your_password
成功标志:
makefile
服务器IP:6379> PING
PONG
服务器IP:6379> INFO server
# Server
redis_version:7.0.0
memurai_version:...
...
6.3 开发环境 vs 生产环境
开发环境标准配置
conf
bind 0.0.0.0
protected-mode no
requirepass dev_password
port 6379
特点:
- ✅ 允许远程连接
- ✅ 密码简单 OK
- ✅ 关闭保护模式
生产环境标准配置
conf
bind 127.0.0.1 192.168.1.100
protected-mode yes
requirepass Strong_Password_123!@#
port 6379
timeout 300
maxmemory 2gb
maxmemory-policy allkeys-lru
特点:
- ✅ 限制访问 IP
- ✅ 强密码
- ✅ 启用保护模式
- ✅ 内存限制和淘汰策略
七、安全配置建议
7.1 密码安全
强密码要求
- 长度至少 16 位
- 包含大小写字母、数字、特殊字符
- 避免使用字典词汇
- 定期更换密码
设置强密码示例
conf
requirepass R3d!s_Str0ng_P@ssw0rd_2024
密码管理
bash
# 查看当前密码配置(不会显示密码值)
CONFIG GET requirepass
# 修改密码
CONFIG SET requirepass new_strong_password
# 保存到配置文件
CONFIG REWRITE
7.2 网络安全
限制访问 IP
conf
# 仅允许特定 IP
bind 127.0.0.1 192.168.1.100 192.168.1.101
使用防火墙
即使 bind 0.0.0.0,也可以通过防火墙限制访问:
bash
# 仅允许特定 IP 访问 6379 端口
netsh advfirewall firewall add rule name="Redis 6379" dir=in action=allow protocol=TCP localport=6379 remoteip=192.168.1.100
修改默认端口
conf
port 6380 # 改为非默认端口
7.3 命令安全
禁用危险命令
conf
# 禁用 FLUSHALL(清空所有数据库)
rename-command FLUSHALL ""
# 禁用 FLUSHDB(清空当前数据库)
rename-command FLUSHDB ""
# 禁用 CONFIG(防止配置被修改)
rename-command CONFIG ""
# 禁用 SHUTDOWN(防止服务被关闭)
rename-command SHUTDOWN ""
重命名命令
conf
# 重命名为复杂名称
rename-command FLUSHALL "FLUSHALL_SECRET_KEY_123"
rename-command CONFIG "CONFIG_SECRET_KEY_456"
7.4 其他安全建议
1. 启用 AOF 持久化
conf
appendonly yes
appendfsync everysec
2. 设置内存限制
conf
maxmemory 2gb
maxmemory-policy allkeys-lru
3. 限制客户端连接数
conf
maxclients 1000
4. 启用 TLS/SSL(Redis 6.0+)
conf
# 需要证书文件
port 0
tls-port 6380
tls-cert-file redis.crt
tls-key-file redis.key
tls-ca-cert-file ca.crt
5. 定期备份
bash
# 手动备份 RDB
redis-cli --rdb /path/to/backup.rdb
# 或复制 RDB 文件
copy dump.rdb backup_20240101.rdb
7.5 用户访问控制建议
使用 ACL 用户系统(推荐)
生产环境建议:
- ✅ 使用 ACL 替代单一
requirepass - ✅ 为不同应用创建独立用户
- ✅ 遵循最小权限原则
- ✅ 定期审查用户权限
用户角色建议:
- 管理员用户 :
+@all(仅用于管理) - 应用用户 :
+@all -@dangerous(读写权限,禁止危险命令) - 只读用户 :
+@read +@keyspace(仅查询) - 受限用户 :限制键访问模式(如
~api:*)
示例配置:
conf
# 在 memurai.conf 中定义用户
user admin on >admin_strong_pass ~* &* +@all
user app_user on >app_pass ~* &* +@all -@dangerous
user readonly_user on >readonly_pass ~* &* +@read +@keyspace
7.6 安全配置检查清单
- 已设置强密码或启用 ACL 用户系统
-
bind配置合理(生产环境不推荐0.0.0.0) -
protected-mode已启用(生产环境) - 已创建 ACL 用户并设置最小权限(推荐)
- 已禁用或重命名危险命令
- 已设置内存限制
- 已启用持久化(AOF 或 RDB)
- 防火墙规则已配置
- 使用非默认端口(可选)
- 定期更新 Memurai 版本
- 监控和日志已配置
- 定期审查用户权限
八、扩展内容
8.1 Memurai 配置文件查找顺序
Memurai 启动时按以下顺序查找配置文件:
- 命令行参数 :
memurai-server --config-file /path/to/memurai.conf - 服务配置:Windows 服务中指定的配置文件路径
- 默认位置 :安装目录下的
memurai.conf
查看当前使用的配置文件:
bash
# 启动 Memurai 时的日志会显示配置文件路径
# 或查看服务配置
sc qc Memurai
8.2 Windows 下 Memurai 安装方式
方式 1:Memurai 官方安装
- 下载地址:www.memurai.com/
- 配置文件:
memurai.conf - 服务名:
Memurai - 特点:Windows 原生 Redis 兼容实现,性能优化
方式 2:查看 Memurai 安装位置
bash
# 查看服务配置
sc qc Memurai
# 查看安装目录
dir "C:\Program Files\Memurai\"
8.3 常见问题 FAQ
Q1: 为什么修改了配置文件但配置不生效?
A: 最常见原因是忘记重启 Memurai 服务。修改配置文件后必须重启服务:
bash
net stop Memurai
net start Memurai
Q2: bind 0.0.0.0 后仍然无法远程连接?
A: 检查以下 3 项:
protected-mode是否为no或已设置密码- Windows 防火墙是否放行 6379 端口
- Memurai 服务是否已重启
Q3: protected-mode 的作用是什么?
A: protected-mode 是 Memurai(兼容 Redis)的安全机制:
yes:未设置密码时只允许本地连接no:允许远程连接(建议配合密码使用)
Q4: 如何查看 Memurai 当前配置?
A: 使用以下命令:
bash
memurai-cli
# 或
redis-cli
CONFIG GET "*" # 查看所有配置
CONFIG GET bind # 查看特定配置
Q5: 如何在不重启的情况下修改配置?
A: 使用 CONFIG SET 命令:
bash
CONFIG SET bind 0.0.0.0
CONFIG SET protected-mode no
注意 :这种方式修改的是运行时配置,重启后会恢复配置文件中的值。要永久生效,需要修改配置文件并执行
CONFIG REWRITE。
Q6: Memurai 密码包含特殊字符怎么办?
A: 避免在密码中使用以下字符:
#(注释符号)- 空格
- 引号
如果必须使用,可以在配置文件中用引号包裹:
conf
requirepass "password with spaces"
Q7: 如何限制 Memurai 只能特定 IP 访问?
A: 有两种方法:
-
bind 配置 (推荐):
confbind 127.0.0.1 192.168.1.100 -
防火墙规则 :
bashnetsh advfirewall firewall add rule name="Memurai" dir=in action=allow protocol=TCP localport=6379 remoteip=192.168.1.100
Q8: Memurai 默认端口可以修改吗?
A: 可以,修改配置文件 memurai.conf 中的 port 项:
conf
port 6380
然后重启服务,连接时指定新端口:
bash
memurai-cli -p 6380
# 或
redis-cli -p 6380
Q9: 如何创建多个用户并设置不同权限?
A: 使用 ACL 用户系统(Memurai 兼容 Redis 6.0+):
bash
# 创建管理员用户
ACL SETUSER admin on >admin_pass ~* &* +@all
# 创建应用用户(禁止危险命令)
ACL SETUSER app_user on >app_pass ~* &* +@all -@dangerous
# 创建只读用户
ACL SETUSER readonly_user on >readonly_pass ~* &* +@read +@keyspace
# 查看所有用户
ACL LIST
# 在配置文件中定义用户
user app_user on >app_pass ~* &* +@all -@dangerous
Q10: requirepass 和 ACL 用户系统有什么区别?
A:
- requirepass:单一密码,所有连接使用同一个密码,所有用户权限相同
- ACL 用户系统:多用户系统,每个用户有独立的密码和权限,更灵活、更安全
建议:
- 开发/测试环境:可以使用
requirepass(简单) - 生产环境:推荐使用 ACL 用户系统(更安全、更灵活)
8.4 性能优化建议
1. 内存优化
conf
# 设置最大内存
maxmemory 2gb
# 设置淘汰策略
maxmemory-policy allkeys-lru
2. 持久化优化
conf
# AOF 持久化
appendonly yes
appendfsync everysec # 平衡性能和数据安全
3. 网络优化
conf
# TCP 保活
tcp-keepalive 300
# 客户端超时
timeout 0 # 0 表示不超时
8.5 监控和日志
启用日志
conf
# 日志级别
loglevel notice # debug, verbose, notice, warning
# 日志文件
logfile "C:/redis/logs/redis.log"
查看 Memurai 信息
bash
# 服务器信息
INFO server
# 内存信息
INFO memory
# 客户端信息
INFO clients
# 所有信息
INFO
总结
快速参考
允许远程访问(不限制 IP):
conf
bind 0.0.0.0
protected-mode no
requirepass your_password
port 6379
仅本地访问:
conf
bind 127.0.0.1
protected-mode yes
port 6379
允许特定 IP 访问:
conf
bind 127.0.0.1 192.168.1.100
protected-mode yes
requirepass your_password
port 6379
验证配置生效:
bash
memurai-cli
# 或
redis-cli
CONFIG GET bind # 应显示 0.0.0.0 或配置的 IP
CONFIG GET protected-mode
用户访问控制(ACL):
bash
# 创建用户
ACL SETUSER app_user on >app_password ~* &* +@all -@dangerous
# 查看用户
ACL GETUSER app_user
# 使用用户连接
memurai-cli --user app_user --pass app_password
# 在配置文件中定义用户
user app_user on >app_password ~* &* +@all -@dangerous
远程连接检查:
- bind =
0.0.0.0或包含目标 IP ✅ - protected-mode =
no或已设置密码 ✅ - 防火墙放行 6379 ✅
- 密码正确或 ACL 用户已配置 ✅
用户访问检查:
- 已创建 ACL 用户(推荐)或已设置 requirepass ✅
- 用户权限符合最小权限原则 ✅
- 已禁用危险命令或限制用户权限 ✅
本文档基于 Windows Memurai 实际配置经验整理,Memurai 是 Redis 兼容的 Windows 原生实现。