ElasticSearch 提供了安全功能,可以使用密码保护你的数据,或者更高级的安全措施,如加密通信,基于角色的访问控制,IP过滤和审计。
1. 确认使用了带有安全功能的许可证
2.安全功能提供三十天免费试用,之后想要继续使用需要购买许可证。
3.需要在同一集群中的每个节点上设置安全选项,默认为false,开启是true
4.为节点间通信配置传输层安全性(TLS / SSL)
·为每个 Elasticsearch 节点生成节点证书。
·在每个 Elasticsearch 节点上启用TLS。
5.如果尚未运行,请启动 Elasticsearch
6.为所有内建用户设置密码
·Elasticsearch 安全功能提供内置用户来帮助您启动和运行。 elasticsearch-setup-passwords 命令是第一次设置内置用户密码的最简单方法。
·您可以在“interactive”模式下运行该命令,该模式会提示您输入elastic,kibana,beats_system,logstash_system和apm_system用户的新密码:
bin/elastibin/elasticsearch-setup-passwords interactive
·这条命令成功运行后就会失效,无法再次运行,相当于设置初始密码
7.可以通过七种方式来进行用户认证
·Configure an Active Directory realm.
·Configure a file realm.
·Configure an LDAP realm.
·Configure a native realm.
·Configure a PKI realm.
·Configure a SAML realm.
·Configure a Kerberos realm.
8.设置角色和用户来控制对 Elasticsearch 的访问
9.允许审计跟踪尝试和成功的与 Elasticsearch 集群的交互
Enable auditing to keep track of attempted and successful interactions with your Elasticsearch cluster:
·将以下设置添加到集群中所有节点上的 elasticsearch.yml
xpack.security.audit.enabled: true
·重启 ElasticSearch
默认情况下,事件将记录到 ES_HOME / logs 中的专用 elasticsearch-access.log 文件中,还可以将事件存储在 Elasticsearch 索引中,以便于分析和控制记录的事件
Elastic Stack 安全功能可以加密来自 Elasticsearch 集群的流量。使用传输层安全性(TLS / SSL)保护连接。
1.要启用加密,需要在集群中的每个节点上执行以下步骤:
·验证 xpackage .security。启用设置为 true
·生成私钥和X.509证书。
·将每个节点配置为:
必需:在传输层上启用TLS。
建议:在HTTP层上启用TLS。
·如果使用 Active Directory 用户身份验证,请加密 Elasticsearch 和Active Directory 服务器之间的通信。
·如果使用 LDAP 用户身份验证,请加密 Elasticsearch 和LDAP 服务器之间的通信。
2.生成节点的CA证书
·通过这样做,当节点被添加到集群时,它们只需要使用由相同 CA 签名的证书,节点就可以自动加入集群。通过这样做,当节点被添加到集群时,它们只需要使用由相同 CA 签名的证书,节点就可以自动加入集群。
3.加密集群中节点间的通信
·传输网络层用于集群中节点之间的内部通信。启用安全功能后,必须使用 TLS 确保节点之间的通信已加密。
4.加密HTTP 客户端通信
·可以选择使用 TLS 来确保 HTTP 客户机和集群之间的通信是加密的。
5.加密 Elasticsearch 和 LDAP(Lightweight Directory Access Protocol轻量目录访问协议)之间的通信。
·为了保护在 LDAP 域中发送身份验证的用户凭证,强烈建议加密 Elasticsearch 和 LDAP 服务器之间的通信。通过SSL/TLS连接可以确保在 Elasticsearch 传输用户凭证和加密连接内容之前验证 LDAP 服务器的身份。通过TLS连接到LDAP服务器的客户机和节点需要将 LDAP 服务器的证书或服务器的根CA证书安装在它们的密钥存储库或信任存储库中。
6.为强加密使用密码套件
·TLS和SSL协议使用一个密码套件来确定用于保护数据的加密强度
7.分离节点到节点和客户端流量编辑
·Elasticsearch 具有所谓TCP传输配置文件的特性,允许它绑定到多个端口和地址。Elasticsearch安全特性扩展了这一功能,通过将节点到节点的传输流量与客户端传输流量分离来增强集群的安全性。如果客户机传输流量不受信任,并且可能是恶意的,那么这一点非常重要。将节点到节点的流量与客户端流量分离
如果单独的网络不可用,则可以启用IP过滤来限制对概要文件的访问。
默认情况下,当您拥有基本许可证或试用许可证时,Elasticsearch的安全功能将被禁用。要启用安全特性,请使用xpackage .security。设置启用。
xpack.security.enabled
默认密码安全设置
xpack.security.authc.accept_default_password
在elasticsearch。将此设置为false以禁用对默认“changeme”密码的支持。
密码哈希算法设置
xpack.security.authc.password_hashing.algorithm
指定用于安全用户凭据存储的散列算法。见表3,“密码哈希算法”。默认为bcrypt。
匿名访问设置
可以在elasticsearch.yml中配置以下匿名访问设置。
xpack.security.authc.password_hashing.algorithm
匿名用户的用户名(主体)设置。默认为_es_anonymous_user。
xpack.security.authc.password_hashing.algorithm
与匿名用户关联的角色设置(必选)
xpack.security.authc.password_hashing.algorithm
当为true时,如果匿名用户没有请求操作的适当权限,则返回HTTP 403响应。不会提示用户提供访问所请求资源的凭据。当设置为false时,将返回HTTP 401响应,用户可以提供具有适当权限的凭据来获得访问权限。默认值为true。
自动机设置
在安全特性接受通配符模式(例如角色中的索引模式、角色映射API中的组匹配)的地方,每个模式都被编译成一个自动机。以下设置可用于控制此行为。
xpack.security.automata.max_determinized_states
一个模式可以创建多少自动机状态的上限设置。这可以防止过于困难的(例如指数难度)模式。默认为100000。
xpack.security.automata.cache.enabled
是否缓存编译后的自动机设置。编译自动机可能会占用大量的CPU,并且可能会减慢一些操作。缓存减少了需要编译自动机的频率。默认值为true。
xpack.security.automata.cache.size
要保留在自动机缓存中的项目的最大数量设置。默认为10000。
xpack.security.automata.cache.ttl
在自动机缓存中的项目中保留的时间长度设置(根据最近的使用情况)。默认为48h(48小时)。
upstream es.sojson.com{
server 127.0.0.1:9981 weight=1 max_fails=2;
server 127.0.0.1:9982 weight=1 max_fails=2;
server 127.0.0.1:9983 weight=1 max_fails=2;
server 127.0.0.1:9984 weight=1 max_fails=2;
server 127.0.0.1:9985 weight=1 max_fails=2;
}
location ~* / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
if ($host ~* es\.sojson\.com) {
proxy_pass http://es.sojson.com;
}
}
文件和区域安全设置
在elasticsearch.yml中设置以下文档和字段级安全设置。
xpack.security.dls_fls.enabled
设置为false以防止配置文档级和字段级安全性。默认值为true
令牌服务设置
xpack.security.authc.token.enabled
设置为false以禁用内置令牌服务。
xpack.security.authc.token.timeout
令牌有效的时间长度。默认情况下,该值为20m或20分钟。最大值是1小时。
Nginx Http-basic 方案
1.选择一个域名,配置转发
upstream es.sojson.com{
server 127.0.0.1:9981 weight=1 max_fails=2;
server 127.0.0.1:9982 weight=1 max_fails=2;
server 127.0.0.1:9983 weight=1 max_fails=2;
server 127.0.0.1:9984 weight=1 max_fails=2;
server 127.0.0.1:9985 weight=1 max_fails=2;
}
location ~* / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
if ($host ~* es\.sojson\.com) {
proxy_pass http://es.sojson.com;
}
}
2.配置帐号密码访问方式。
location ~* / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
#关键点,配置帐号密码
auth_basic "login";#提示信息
auth_basic_user_file /usr/local/nginx/conf/vhosts/password/es; #密码文件(注意最好别图省事,直接写绝对路径,别相对路径)
autoindex on;
if ($host ~* es\.sojson\.com) {
proxy_pass http://es.sojson.com;
}
}
3.配置密码帐号文件
上面第二点配置中有一个auth_basic_user_file
选项,这个选项就是配置的密码访问规则。密码是采用Crypt (all Unix servers)
方式密的,生成工具:http://www.sojson.com/htpasswd.html
然后把生成的内容复制到上面配置的路径文件中/usr/local/nginx/conf/vhosts/password/es
然后把生成的admin:PJdMvp0Utzclm
插入进去,保存之前看前面有没有丢了字母。保存退出重启 Nginx 即可。
4.测试访问
访问之前配置好的域名es.sojson.com
。输入配置好的帐号密码(明文)测试通过。
5.关闭外网访问
elasticsearch$ vi config/elasticsearch.yml
#打开之后
#network.publish_host: 0.0.0.0
#networt.bind_host: 0.0.0.0
#network.host: 0.0.0.0
#只要配置这个即可
network.host: 127.0.0.1
#network.publish_host: 127.0.0.1
重启 ElasticSearch 。想要更安全一点,可以再加上防火墙规则 ,然后再加上访问频率限制,防止暴力破解