使用 IP 过滤限制连接
编辑使用 IP 过滤限制连接编辑
除了尝试加入集群的其他节点之外,您还可以对应用程序客户端、节点客户端或传输客户端、远程集群客户端应用 IP 过滤。
如果节点的 IP 地址在拒绝列表中,则 Elasticsearch 安全功能允许连接到 Elasticsearch,但会立即断开连接,并且不会处理任何请求。
Elasticsearch 安装并非设计为可通过 Internet 公开访问。IP 过滤和 Elasticsearch 安全功能的其他功能不会改变这种情况。
启用 IP 过滤编辑
Elasticsearch 安全功能包含一个访问控制功能,可以允许或拒绝主机、域或子网。如果操作员权限功能已启用,则只有操作员用户才能更新这些设置。
您可以通过在 elasticsearch.yml
中指定 xpack.security.transport.filter.allow
和 xpack.security.transport.filter.deny
设置来配置 IP 过滤。允许规则优先于拒绝规则。
除非明确指定,否则 xpack.security.http.filter.*
和 xpack.security.remote_cluster.filter.*
设置默认为相应的 xpack.security.transport.filter.*
设置的值。
xpack.security.transport.filter.allow: "192.168.0.1" xpack.security.transport.filter.deny: "192.168.0.0/24"
可以使用 _all
关键字拒绝所有未明确允许的连接。
xpack.security.transport.filter.allow: [ "192.168.0.1", "192.168.0.2", "192.168.0.3", "192.168.0.4" ] xpack.security.transport.filter.deny: _all
IP 过滤配置也支持 IPv6 地址。
xpack.security.transport.filter.allow: "2001:0db8:1234::/48" xpack.security.transport.filter.deny: "1234:0db8:85a3:0000:0000:8a2e:0370:7334"
当 DNS 查找可用时,您也可以按主机名过滤。
xpack.security.transport.filter.allow: localhost xpack.security.transport.filter.deny: '*.google.com'
禁用 IP 过滤编辑
在某些情况下,禁用 IP 过滤可以稍微提高性能。要完全禁用 IP 过滤,请将 elasticsearch.yml
配置文件中 xpack.security.transport.filter.enabled
设置的值设置为 false
。
xpack.security.transport.filter.enabled: false
您也可以为传输协议禁用 IP 过滤,但仅为 HTTP 启用它。
xpack.security.transport.filter.enabled: false xpack.security.http.filter.enabled: true
指定 TCP 传输配置文件编辑
TCP 传输配置文件使 Elasticsearch 能够绑定到多个主机。Elasticsearch 安全功能使您能够在不同的配置文件上应用不同的 IP 过滤。
xpack.security.transport.filter.allow: 172.16.0.0/24 xpack.security.transport.filter.deny: _all transport.profiles.client.xpack.security.filter.allow: 192.168.0.0/24 transport.profiles.client.xpack.security.filter.deny: _all
当您未指定配置文件时,将自动使用 default
。
HTTP 过滤编辑
您可能希望对传输和 HTTP 协议使用不同的 IP 过滤。
xpack.security.transport.filter.allow: localhost xpack.security.transport.filter.deny: '*.google.com' xpack.security.http.filter.allow: 172.16.0.0/16 xpack.security.http.filter.deny: _all
远程集群(基于 API 密钥的模型)过滤编辑
如果其他集群使用 API 密钥身份验证连接以进行跨集群搜索或跨集群复制,您可能希望对远程集群服务器接口使用不同的 IP 过滤。
xpack.security.remote_cluster.filter.allow: 192.168.1.0/8 xpack.security.remote_cluster.filter.deny: 192.168.0.0/16 xpack.security.transport.filter.allow: localhost xpack.security.transport.filter.deny: '*.google.com' xpack.security.http.filter.allow: 172.16.0.0/16 xpack.security.http.filter.deny: _all
是否启用远程集群的 IP 过滤也由 xpack.security.transport.filter.enabled
控制。这意味着必须同时启用或禁用远程集群和传输接口的过滤。但是,它们之间的确切允许和拒绝列表可能不同。
动态更新 IP 过滤器设置编辑
如果在 IP 地址高度动态的环境中运行(如基于云的托管),则在配置机器时很难预先知道 IP 地址。您可以使用*集群更新设置 API*,而不是更改配置文件并重新启动节点。例如
response = client.cluster.put_settings( body: { persistent: { 'xpack.security.transport.filter.allow' => '172.16.0.0/24' } } ) puts response
PUT /_cluster/settings { "persistent" : { "xpack.security.transport.filter.allow" : "172.16.0.0/24" } }
您还可以动态地完全禁用过滤
response = client.cluster.put_settings( body: { persistent: { 'xpack.security.transport.filter.enabled' => false } } ) puts response
PUT /_cluster/settings { "persistent" : { "xpack.security.transport.filter.enabled" : false } }
为了避免将自己锁定在集群之外,永远不会拒绝默认绑定的传输地址。这意味着您始终可以通过 SSH 连接到系统并使用 curl 应用更改。