如何在Centos7上安装和保护Redis

・15 分钟阅读

介绍

Redis是一个开放源码的内存数据结构存储,擅长缓存,非关系数据库,redis因它灵活性,性能,可扩展性和广泛的语言支持而闻名。

步骤1-安装Redis

必须先将企业Linux (EPEL )存储库的额外软件包添加到服务器列表中,然后才能安装Redis ,EPEL是一个软件包存储库,其中包含许多开源附加软件包,其中大多数由Fedora Project维护。

我们可以使用yum安装EPEL :


sudo yum install epel-release

一旦EPEL安装完成,你就可以安装Redis,再次使用yum


sudo yum install redis -y

这可能需要几分钟才能完成,安装完成后,启动Redis服务:


sudo systemctl start redis.service

如果你希望Redis开机时启动,你可以使用enable命令启用它:


sudo systemctl enable redis

通过运行以下命令来检查Redis的状态:


sudo systemctl status redis.service


Output● redis.service - Redis persistent key-value database
 Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)
 Drop-In: /etc/systemd/system/redis.service.d
 └─limit.conf
 Active: active (running) since Thu 2018-03-01 15:50:38 UTC; 7s ago
 Main PID: 3962 (redis-server)
 CGroup: /system.slice/redis.service
 └─3962 /usr/bin/redis-server 127.0.0.1:6379

确认Redis确实正在运行之后,使用以下命令测试安装程序:


redis-cli ping

这应该打印PONG作为响应,如果是这样,就意味着你现在已经在服务器上运行Redis了,我们可以开始配置它来增强它的安全性。

步骤2-绑定Redis并使用防火墙保护它

保护Redis的一种有效方法是保护它正在运行的服务器,通过确保tmodel只绑定到localhost或私有IP地址,服务器有防火墙,并且运行。

然而,如果你选择使用本教程来设置,那么你将更新配置文件,以允许从地方连接。

要解决此问题,请打开要编辑的Redis配置文件:


sudo vi /etc/redis.conf

找到以bind开头的行,并确保它未注释:

/etc/redis.conf
 
bind 127.0.0.1

 

如果你需要绑定到另一个IP地址(在某些情况下,你将从单独的主机访问Redis),我们强烈建议你将它绑定到私有IP地址,

/etc/redis.conf

bind your_private_ip

但是,如果你计划从其他主机访问Redis,则需要使用firewall-cmd命令对防火墙配置进行一些更改,同样,你只需使用它私有IP地址来限制服务公开的主机数量,即可从主机访问你的Redis服务器。

首先,将专用的Redis区域添加到防火墙策略中:


sudo firewall-cmd --permanent --new-zone=redis

然后,指定要打开的端口,Redis默认情况下使用端口6397


sudo firewall-cmd --permanent --zone=redis --add-port=6379/tcp

接下来,指定应该允许通过防火墙,并且访问Redis的专用IP地址:


sudo firewall-cmd --permanent --zone=redis --add-source=client_server_private_IP

运行这些命令后,重新加载防火墙以实现新规则:


sudo firewall-cmd --reload

如果你选择了使用Iptables设置防火墙,你将需要授予你的辅助主机访问以下命令所使用的端口::


sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp -s client_servers_private_IP/32 --dport 6397 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -P INPUT DROP

在下一步中,我们把Redis配置为只能使用安全密码访问。

步骤3 -配置Redis密码

如果使用如何在CentOS 7上配置Redis集群教程安装了Redis,则应该为它配置密码,如果还没有设置密码,本节中的说明将显示如何设置数据库服务器密码。


sudo vi /etc/redis.conf

滚动到SECURITY部分,并且查找:

/etc/redis.conf

# requirepass foobared

删除#,并将foobared更改为你选择的非常强的密码,你可以使用apgpwgen这样的工具生成一个密码,而不是自己组成密码,如果你不想安装应用程序只是为了生成密码,尽管如此,你可以使用以下命令。


echo"digital-ocean" | sha256sum

复制并粘贴该命令的输出作为requirepass的新值后,应读取:

/etc/redis.conf

requirepass password_copied_from_output

如果你想要更短的密码,请使用下面命令的输出,


echo"digital-ocean" | sha1sum

设置密码后,保存并关闭文件,然后重新启动Redis :


sudo systemctl restart redis.service

要测试密码是否有效,请访问Redis命令行:


redis-cli

以下是用于测试Redis密码是否正常工作的命令序列,第一个命令试图在身份验证之前设置一个值。


set key1 10

因为我们还没有经过认证,这将无法工作,所以Redis返回一个错误。


Output(error) NOAUTH Authentication required.

以下命令使用在Redis配置文件中指定的密码进行身份验证。


auth your_redis_password

Redis会确认我们已经验证过了:


OutputOK

然后,再次运行前面的命令应该是成功的:


set key1 10


OutputOK

get key1命令查询Redis以获取新键的值。


get key1


Output"10"

最后一个命令退出redis-cli ,你还可以使用exit


quit

接下来,我们讨论如何重命名Redis命令以进一步保护Redis免受恶意角色的攻击。

步骤4 - 重命名危险的命令

已知危险的命令包括:

FLUSHDBFLUSHALLKEYSPEXPIREDELCONFIGSHUTDOWNBGREWRITEAOFBGSAVESAVESPOPSREMRENAMEDEBUG

身份验证密码类似,在/etc/redis.conf文件的SECURITY部分中配置了重命名或禁用命令,要启用或禁用Redis命令,请打开配置文件以再次编辑:


sudo vi /etc/redis.conf

要禁用或终止命令,只需将它重命名为空字符串,如下所示:

/etc/redis.conf

# It is also possible to completely kill a command by renaming it into
# an empty string:
#
rename-command FLUSHDB""
rename-command FLUSHALL""
rename-command DEBUG""

要重命名命令,请给它另一个名称,如下面的例子,

/etc/redis.conf

rename-command CONFIG""
rename-command SHUTDOWN SHUTDOWN_MENOT
rename-command CONFIG ASC12_CONFIG

保存更改,并且关闭文件,然后通过重新启动Redis应用更改:


sudo service redis-server restart

要测试新命令,请输入Redis命令行:


redis-cli

使用你先前定义的密码验证自己:


auth your_redis_password


OutputOK

假设将配置命令重命名为ASC12_CONFIG,那么尝试使用CONFIG命令应该会失败。


config get requirepass


Output(error) ERR unknown command 'config'

调用重命名的命令应该是成功的(不区分大小写):


asc12_config get requirepass


Output1)"requirepass"
2)"your_redis_password"

最后,你可以从redis-cli退出:


exit

注意,如果已经使用了Redis命令行然后,重启Redis,那么你需要进行认证,否则,如果键入命令,则会出现此错误:


OutputNOAUTH Authentication required.

关于重命名命令,在/etc/redis.conf文件的SECURITY部分的末尾有一条警告语句:

Please note that changing the name of commands that are logged into the AOF file or transmitted to slaves may cause problems.

这意味着,如果重命名的命令不在AOF文件中,或者如果该重命名的命令尚未将AOF文件传输到从属设备,则应该没有问题。

步骤5-设置数据目录所有权和文件权限

在此步骤中,我们将考虑对所有权和权限进行几处更改,以改善Redis安装的安全性配置文件。这包括确保只有需要访问Redis的用户才有读取它数据的权限,在默认情况下,该用户是redis。

通过grep -ing对它父目录列表中的Redis数据目录进行验证,下面给出了命令及其输出。


ls -l /var/lib | grep redis


Outputdrwxr-xr-x 2 redis redis 4096 Aug 6 09:32 redis

你会看到Redis数据目录归redis用户所有,并为redis组授予了辅助访问权限。此所有权设置是安全的,但是文件夹(设置为755 )的权限不是,为确保只有Redis用户有权访问该文件夹及它内容,请将权限设置更改为770 :


sudo chmod 770 /var/lib/redis

你应该改变的另一个权限是Redis配置文件,默认情况下,它有644文件权限,并由root拥有,由root组拥有次级所有权:


ls -l /etc/redis.conf


Output-rw-r--r-- 1 root root 30176 Jan 14 2014 /etc/redis.conf

要执行这个操作,请运行以下命令:


sudo chown redis:redis /etc/redis.conf

然后更改权限,以便只有文件的所有者才能读取和/或写入该权限:


sudo chmod 660 /etc/redis.conf

你可以使用以下方法验证新的所有权和权限:


ls -l /etc/redis.conf


Outputtotal 40
-rw------- 1 redis redis 29716 Sep 22 18:32 /etc/redis.conf

最后,重启Redis :


sudo service redis-server restart

恭喜你,你的Redis安装现在应该更安全了!

Yangchunyan110 profile image