2.2 其他组件安全
2.2.1 Redis安全
Redis是一个完全开源免费的、遵守BSD协议的高性能key-value数据库,几乎所有互联网公司都会使用,而其出现过的最严重的漏洞为未授权访问,获取信息设置可以写入后门,这里介绍一下关于Redis的一些安全配置建议。
1.账号与认证
如上面所说,Redis最严重的漏洞便是未授权访问,因此对Redis配置认证是非常重要的。为Redis设置访问密码,在redis.conf中找到requirepass字段,去掉其注释,并在后面填上需要的密码(Redis客户端也需要使用此密码来访问Redis服务)。
例如,打开/etc/redis/redis.conf配置文件:
requirepass xxx (xxx为要改的密码)
确保密码的复杂度满足账号密码的长度、强度和定期更新的要求(大小写+数字+字母+特殊字符+长度8位以上),配置完毕后重启服务即可生效。
2.服务运行权限最小化
修改Redis服务运行账号,强烈建议不要使用root账号运行Redis,一旦Redis被入侵,攻击者可能会获取root权限,所以需要以较低权限的账号运行Redis服务,并禁用该账号的登录权限。以下操作创建了一个无home目录权限,且无法登录的普通账号:
useradd -M -s /sbin/nologin [username]
注意,该操作需要重启Redis才能生效。
3.设置访问控制
为了安全起见,建议使用iptables控制允许访问的IP,提高安全性。
4.修改默认端口
Redis的默认端口为6379,建议修改成其他端口,防止针对默认端口的扫描。
2.2.2 Elasticsearch安全
Elasticsearch是一个基于Lucene的搜索服务器,提供了一个分布式多用户能力的全文搜索引擎,基于RESTful Web接口,在互联网企业也是应用非常广泛的一个系统,而近些年,出现的很多信息泄露事件都是Elasticsearch配置不当所致。下面介绍几个安全方面的建议。
1.配置Elasticsearch认证机制
Elasticsearch认证需要启用X-pack功能,而以前X-pack的功能是需要认证的,可能官方注意到因Elasticsearch未认证而导致的信息泄露事件太多,于是在6.8及7.1版本开始免费提供了认证功能,因此笔者建议,一定不能让Elasticsearch继续“裸奔”下去。
配置步骤如下。
1)启用安全模式。修改elasticsearch.yml,添加如下配置:
xpack.security.enabled: true xpack.security.transport.ssl.enabled: true
2)配置TLS/SSL。
执行命令bin/elasticsearch-certutil ca,生成elastic-stack-ca.p12文件。
执行命令bin/elasticsearch-certutil cert--ca elastic-stack-ca.p12,生成elastic-certificates.p12和elastic-stack-ca.p12文件。
移动生成的两个文件到合适的地方,如:/home/elasticsearch/elasticsearch-7.5.1/config/certs。
在elasticsearch.yml中添加如下配置(注意配置路径为当前目录):
3)Elasticsearch内置用户设置的密码。执行命令bin/elasticsearch-setup-passwords interactive:
4)重启Elasticsearch。此时,访问9200端口,便会提示需要认证信息,如图2-6所示。
图2-6 出现认证信息
2.Elasticsearch漏洞
Elasticsearch至今出现过如下严重漏洞:
·CVE-2014-3120命令执行。
·CVE-2015-3337目录遍历漏洞。
·CVE-2015-1427 Groovy沙盒绕过和代码执行漏洞。
因此需要针对这些漏洞升级到安全版本或更新补丁。
2.2.3 其他相关组件:Kafka、MySQL、Oracle等
针对上述组件的安全性,笔者有以下几点建议:
·设置认证体系,不能出现空口令、弱口令等情况,防止未授权访问。
·最小化运行权限,尽量不使用root运行。
·尽量通过配置文件、iptables、ACL控制访问源,如非必要,尽量不要开放到公网。
·注意这些组件的相关漏洞,如果出现严重漏洞,需要进行补丁修复。
·注意配置文件的安全性,尽量不将明文写入配置文件中,可以采用隐藏密码或代理技术。
·对于日志文件和操作记录,建议单独存放。
·尽量避免危险操作,可以识别一些高风险操作,例如,不带where的删除语句,keys*等。