New

The executive guide to generative AI

Read more

使用 IP 过滤限制连接

编辑

您可以将 IP 过滤应用于应用程序客户端、节点客户端或传输客户端、远程集群客户端,以及尝试加入集群的其他节点。

如果节点的 IP 地址在拒绝列表中,Elasticsearch 安全功能允许连接到 Elasticsearch,但会立即断开连接,并且不会处理任何请求。

Elasticsearch 安装并非设计为可通过互联网公开访问。IP 过滤和 Elasticsearch 安全功能的其他功能不会改变这种情况。

启用 IP 过滤

编辑

Elasticsearch 安全功能包含一个访问控制功能,允许或拒绝主机、域或子网。如果启用了操作员权限功能,则只有操作员用户才能更新这些设置。

您可以通过在 elasticsearch.yml 中指定 xpack.security.transport.filter.allowxpack.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_,而不是更改配置文件并重新启动节点。例如

resp = client.cluster.put_settings(
    persistent={
        "xpack.security.transport.filter.allow": "172.16.0.0/24"
    },
)
print(resp)
response = client.cluster.put_settings(
  body: {
    persistent: {
      'xpack.security.transport.filter.allow' => '172.16.0.0/24'
    }
  }
)
puts response
const response = await client.cluster.putSettings({
  persistent: {
    "xpack.security.transport.filter.allow": "172.16.0.0/24",
  },
});
console.log(response);
PUT /_cluster/settings
{
  "persistent" : {
    "xpack.security.transport.filter.allow" : "172.16.0.0/24"
  }
}

您还可以动态地完全禁用过滤

resp = client.cluster.put_settings(
    persistent={
        "xpack.security.transport.filter.enabled": False
    },
)
print(resp)
response = client.cluster.put_settings(
  body: {
    persistent: {
      'xpack.security.transport.filter.enabled' => false
    }
  }
)
puts response
const response = await client.cluster.putSettings({
  persistent: {
    "xpack.security.transport.filter.enabled": false,
  },
});
console.log(response);
PUT /_cluster/settings
{
  "persistent" : {
    "xpack.security.transport.filter.enabled" : false
  }
}

为了避免将自己锁定在集群之外,永远不会拒绝默认绑定的传输地址。这意味着您始终可以通过 SSH 进入系统并使用 curl 应用更改。

Was this helpful?
Feedback