互联网安全建设从0到1
上QQ阅读APP看书,第一时间看更新

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*等。