本页内容

  • 先决条件
  • 安装 Redis
  • 使用 Firewalld 保护 Redis
  • 配置 Redis
  • 使用 ACLs(访问控制列表)保护 Redis 禁用默认 Redis 用户 验证用户 alice 验证用户 bob
  • 结论
  • 禁用默认 Redis 用户
  • 验证用户 alice
  • 验证用户 bob

Redis 是一个流行的开源内存键值数据存储。它支持多种不同的数据结构,例如 Hash、Lists、Sets、Strings 等等。Redis 被设计为仅在可信环境中运行,它可以用作数据库、缓存和消息代理。Redis 以其广泛的支持、高性能、高可用性和灵活性而广为人知。

对于小型部署,你可以将 Redis 作为独立实例安装。对于大型部署,它们提供了额外的组件,例如用于高可用的 Redis Sentinel 和用于跨多个 Redis 节点服务器分区数据的 Redis Cluster。

本教程将向你展示如何在 AlmaLinux 9 服务器上安装和配置 Redis。此外,我们还将向你展示如何通过 Redis ACLs(访问控制列表)和 Firewalld 来保护 Redis。

先决条件

要完成本教程,你必须具备以下条件:

  • 一台 AlmaLinux 9 服务器 —— 本示例使用的 AlmaLinux 服务器主机名为 ' alma-linux ',IP 地址为 ' 192.168.5.21' 。
  • 一个具有 sudo/root 管理员权限的非 root 用户。
  • 已配置、已启动并正在运行的 firewalld。

现在,让我们开始吧。

安装 Redis

Redis 是一个高性能的开源数据存储,可用作数据库、缓存、消息代理和流处理引擎。Redis 在大多数 Linux 发行版(包括 AlmaLinux)上都可用。它可以通过默认发行版仓库进行安装。

在安装 Redis 之前,运行以下命令来重建软件包缓存并获取最新的软件包信息。

sudo dnf makecache

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

现在,运行下面的 dnf 命令来安装 Redis。在提示时输入 y,然后按 ENTER 继续。

sudo dnf install redis

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

Redis 安装完成后,运行以下 systemctl 命令来启动并启用 Redis 服务。

sudo systemctl start redis
sudo systemctl enable redis

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

最后,使用下面的命令验证 Redis 服务状态。

sudo systemctl is-enabled redis
sudo systemctl status redis

以下输出确认 Redis 正在运行且已启用,这意味着它将在系统启动时自动运行。

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

使用 Firewalld 保护 Redis

在本节中,你将配置 firewalld 来保护 Redis 安装。实现这一目标的最佳方式是在 firewalld 上创建区域(zone),并允许特定的网络/子网访问该服务。

运行以下命令创建一个名为 ' svcs ' 的新 firewalld 区域,然后将内部网络接口添加到其中。在本示例中,Redis 将在接口 ' enp0s8 ' 下的内部 IP 地址上运行,你必须将你的接口添加到 ' svcs ' 区域。

sudo firewall-cmd --new-zone=svcs --permanent
sudo firewall-cmd --zone=svcs --add-interface=enp0s8 --permanent

现在,运行以下命令允许网络 ' 192.168.5.1/24 ' 访问 ' svcs ' 区域上的端口。

sudo firewall-cmd --zone=svcs --add-source=192.168.5.1/24

之后,将 Redis 端口 ' 6379/tcp ' 添加到 ' svcs ' 区域,然后将更改应用到 firewalld。

sudo firewall-cmd --zone=svcs --add-port=6379/tcp
sudo firewall-cmd --runtime-to-permanent

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

现在,使用以下命令重新加载 firewalld,以确保新更改已应用到 firewalld。

sudo firewall-cmd --reload

最后,运行以下命令检查 firewalld 上活动区域的列表。你应该会看到 ' svcs ' 区域处于活动状态。

sudo firewall-cmd --get-active-zones

现在你可以验证 'svcs' 区域中可用的规则列表。成功时,你应该会在 Ports 部分看到 Redis 端口 ' 6379/tcp ',并在 Source 部分看到子网 ' 192.168.5.1/24 '。

sudo firewall-cmd --list-all --zone=svcs

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

配置 Redis

在本节中,你将通过修改默认的 Redis 配置文件 ' /etc/redis/redis.conf ' 来配置 Redis 安装。

使用下面的 nano 编辑器命令打开 Redis 配置文件 ' /etc/redis/redis.conf '。

sudo nano /etc/redis/redis.conf

将 ' bind ' 参数的值更改为服务器的内部 IP 地址。在本示例中,Redis 将运行在本地 IP 地址 ' 192.168.5.21 ' 上。

bind 192.168.5.21

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

现在,通过将参数值更改为 ' no ' 来禁用 ' protected-mode '。要允许你的应用程序远程连接到 Redis 服务器,你必须禁用 'protected-mode'。

protected-mode no

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

在 AlmaLinux 上,默认的服务管理器是 'systemd'。取消注释 ' supervised ' 参数,并将默认值更改为 ' systemd ',以启用 Redis 与 systemd 的集成。

supervised systemd

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

最后,取消注释 ' aclfile ' 参数,以通过文件启用 Redis 的 ACLs(访问控制列表)。自 Redis v6 起,使用 ACLs 是保护 Redis 的推荐方式,且 Redis 支持不同的 ACLs 使用方法,你可以通过 Redis shell 或定义 ACLs 文件来创建 ACLs。本示例将使用通过文件的 ACLs。

aclfile /etc/redis/users.acl

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

完成后保存并关闭文件。

现在,运行以下命令创建 ACLs 文件 '/etc/redis/users.acl' 。

touch /etc/redis/users.acl

之后,运行以下命令重启 Redis 服务并应用你所做的更改。

sudo systemctl restart redis

至此,redis 将以新配置启动并运行。你接下来要做的步骤是通过 Redis CLI 验证你的 Redis 配置。

使用下面的 'redis-cli' 命令连接到 Redis 服务器。在本示例中,你将指定 Redis 服务器的 IP 地址。

redis-cli -h 192.168.5.21

登录后,运行以下命令以确保连接成功。连接成功时,你应该会看到输出 ' test redis '。

PING "test redis"

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

接下来,运行以下查询以获取当前的 Redis 配置。在本示例中,你将检查 ' bind '、' supervised ' 和 protected-mode ' 设置。

CONFIG GET bind
CONFIG GET supervised
CONFIG GET protected-mode

成功时,你应该会得到与之前所做设置相匹配的配置。

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

最后,运行下面的 ACL 查询以获取 Redis 上可用的 ACLs 列表。

ACL LIST

你应该会看到类似如下的输出 —— 默认的 Redis 安装附带 ACL 用户 ' default ',其认证方式为 ' nopass '(即无需密码登录),权限为 ' +@all ',该权限允许 ' default ' 用户执行任何 Redis 查询。

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

至此,你已经完成了 Redis 的基本配置。在下一步中,你将深入了解用于保护 Redis 安装的 Redis ACLs(访问控制列表)配置。

使用 ACLs(访问控制列表)保护 Redis

自 Redis 6.x 起,保护 Redis 的最佳方式是实施 ACLs(访问控制列表)。这允许你在 Redis 服务器上设置用户和权限,并且可以使旧版 Redis 中的 'requirepass' 和 'rename-command' 参数过时。

你可以通过两种不同的方法在 Redis 上设置 ACLs:

  • 通过 ACL 命令设置 ACLs
  • 通过外部 ACL 文件设置 ACLs

使用你已经配置好的 Redis 服务器,你将通过外部 ACL 文件来设置 Redis ACLs。

首先,使用以下 nano 编辑器命令打开 ACL 文件 '/etc/redis/users.acl'。

sudo nano /etc/redis/users.acl

插入以下配置,为 Redis 创建两个用户。

user alice on -DEBUG +@all ~* >AliceP4ssw0rd
user bob on +@all -@dangerous ~* >BobP4ssw0rd

完成后保存文件并退出编辑器。

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

通过此配置,你将创建两个用户:

  • 用户 alice,密码为 ' AliceP4ssw0rd ',允许执行除 DEBUG ' -DEBUG ' 之外的所有查询 ' +@all ',并且还允许对所有可用的键值 ' ~* ' 运行查询。
  • 用户 bob,密码为 ' BobP4ssw0rd ',允许用户 bob 执行除 ' -@dangerous ' 之外的所有查询 ' +@all '。命令类别 ' -@dangerous ' 包括 FLUSHALL、MIGRATE、RESTORE、SORT、KEYS、CLIENT、DEBUG、INFO、CONFIG、SAVE、REPLICAOF 等等。此外,该用户被允许对 Redis 服务器上所有可用的键值进行查询。

获取 Redis 上命令类别的完整列表。

现在,运行以下 systemctl 命令重启 Redis 服务并应用更改。

sudo systemctl restart redis

Redis 重启后,使用下面的 redis-cli 命令连接到 Redis 服务器。

redis-cli -h 192.168.5.21

登录后,运行以下 ACL 查询以检查 Redis 上可用用户的列表。

ACL LIST

至此,你应该会看到三个用户:alice、bob 和 default。

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

你也可以使用以下查询来验证 Redis 上的详细用户信息。

ACL GETUSER alice
ACL GETUSER bob

你应该会看到用户 alice 被允许在 Redis 上执行所有可用命令,命令组为 ' +@all '。

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

至于用户 bob,你可以看到允许执行的命令 ' +@all ',但同时命令组 ' dangerous ' 已被禁用。

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

禁用默认 Redis 用户

在创建了新用户 alice 和 bob 之后,你必须使用以下查询禁用 ' default ' 用户。

ACL SETUSER default OFF

然后,使用以下命令再次检查 Redis 上可用用户的列表。

ACL LIST

你应该会看到用户 ' default ' 的状态为 off(即已禁用),如下所示:

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

按 Ctrl+d 退出 Redis shell。

之后,使用以下命令再次登录 Redis。

redis-cli -h 192.168.5.21

然后,输入以下 PING 查询以验证当前连接。

PING

在 Redis 的 " default " 用户被禁用后,你应该会收到类似如下的错误 —— 你必须是通过身份验证的用户才能运行查询。

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

验证用户 alice

接下来,你将验证你创建的新的 Redis 用户 alice 和 bob。

运行以下命令以用户 'alice' 身份进行身份验证。如果成功,你应该会得到输出 'OK'。

AUTH alice AliceP4ssw0rd

现在运行以下查询,以确保你已通过用户 alice 向 Redis 进行了身份验证。

PING
ACL WHOAMI

你应该会看到消息 PONG,并已通过用户 alice 身份验证。

现在,运行以下查询,以确保用户 alice 能够执行所有可用的查询,包括相关的 Redis 管理操作。

CONFIG GET bind
CONFIG GET supervised

成功时,你应该会得到参数 bind 和 supervised 的当前 Redis 配置输出。

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

验证用户 bob

运行以下查询以用户 bob 身份登录并进行身份验证。

AUTH bob BobP4ssw0rd

身份验证后,运行下面的 PING 查询。如果成功,你应该会收到消息 PONG 。

PING

接下来,在 Redis ACL 文件中,用户 bob 的命令类别 ' -@dangerous ' 会阻止该用户在 Redis 服务器上执行某些危险命令,例如 FLUSHALL、CONFIG 等等。

如果你以用户 bob 身份运行以下查询,你应该会得到类似 'NOPERM' 的输出,这意味着用户 bob 没有执行该命令的权限。

FLUSHALL
CONFIG GET bind
SAVE

在 AlmaLinux 9 系统上安装并配置 Redis 键值缓存数据库

至此,你已通过 ACL 文件成功使用 ACLs(访问控制列表)保护了 Redis。

结论

恭喜!你已成功在 AlmaLinux 9 上安装了 Redis。你还学习了如何通过 ACL 文件设置 ACLs(访问控制列表)来保护 Redis 安装。此外,你还通过为 Redis 服务创建特定区域,使用 firewalld 保护了 Redis。