如何禁用Elasticsearch“主页”(“您知道,用于搜索”)

时间:2019-09-01 07:26:29

标签: elasticsearch

我无法找到有关此信息。因此,我不得不问。

当导航到节点的“主页”(例如curl http://127.0.0.1:9300)时,Elastic将显示有关集群的一些数据。例如:

{
  "name" : "SCGrEKO",
  "cluster_name" : "bob",
  "cluster_uuid" : "krk-OsDUR1Gt7m9qcJkWJg",
  "version" : {
    "number" : "6.5.4",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "d2ef93d",
    "build_date" : "2018-12-17T21:17:40.758843Z",
    "build_snapshot" : false,
    "lucene_version" : "7.5.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

是否可以禁用此功能?或至少放一张空白页。

3 个答案:

答案 0 :(得分:2)

仅启用身份验证无法解决问题,因为爬虫或更糟糕的是恶意端口扫描程序仍会推断{"error":{"root_cause":[{"type":"security_exception...",是Elasticsearch集群的响应,并且仍然可以利用知名的{{3} }。

如果要创建一个恶意端口扫描程序,我不仅要查询/,还要查询众所周知的Elasticsearch security vulnerabilities

因此,为了实现所需的功能,您需要同时满足以下条件:

  • 身份验证:防止任何人自由访问您的集群并对数据造成任何损害
  • 反向代理解决方案:返回任何您想胜过试图与您的集群建立联系的弹性不可知响应内容

答案 1 :(得分:1)

虽然像nginx或HAproxy这样的代理是可能的解决方案,但为什么不解决更大的问题:身份验证。如果您没有正确保护群集,则/端点是您的后顾之忧-它仅显示群集的版本,而其他端点可用于提取,更改,添加或删除数据

使用release of 6.8.0 and 7.1.0 the default distribution of Elasticsearch provides free security。如果启用了安全性,则任何未经身份验证的请求都将被拒绝(401响应代码):

curl -XGET <URL>:9200/                                                                                    
{"error":{"root_cause":[{"type":"security_exception",
    "reason":"action [cluster:monitor/main] requires
    authentication","header":{"WWW-Authenticate":
    ["Bearer realm=\"security\"","ApiKey","Basic realm=
    \"security\" charset=\"UTF-8\""]}}],
 "type":"security_exception",
    "reason":"action [cluster:monitor/main] requires
    authentication","header":{"WWW-Authenticate":
    ["Bearer realm=\"security\"","ApiKey","Basic realm=
    \"security\" charset=\"UTF-8\""]}},"status":401}

PS:我认为您输入的端口错误。默认情况下,9200是REST API,而9300是用于传输(群集内部或已弃用的Java传输客户端)。

答案 2 :(得分:0)

第一个问题:

我不知道您可以更改节点根URL的响应正文。

第二个问题:

是的,您可以通过使用HTTP动词 HEAD 而不是 GET 来避免获取通常的json元素作为响应。 请注意,默认情况下,如果您未指定其他内容,curl会将 GET 用作HTTP动词。如HTTP规范中所述,GET将在可能的情况下返回响应主体。另一面的 HEAD 无需进行响应即可执行GET。 (请参见W3 Method Definitions for HTTP/1.1

为了使事情更加清楚,这里是通过邮递员使用GET和HEAD访问的节点的响应:

获取 enter image description here

enter image description here

总而言之,您可以使用HTTP HEAD而不是GET访问URL,从而获得一个“空白页”(如您所述)。

我希望我能回答你的问题。如果没有,请提供有关问题/用例/所需输出的更多信息。