📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

配置项作用 #

reindex.remote.whitelist 配置项用于控制从远程 Easysearch 集群进行 Reindex 操作时,允许访问的远程主机地址白名单。这是一个重要的安全配置,防止未授权的远程数据访问。

Reindex 操作允许用户将数据从一个索引复制到另一个索引。当源数据位于远程集群时,此配置确保只有预授权的远程主机可以被访问,避免潜在的安全风险(如 SSRF 攻击)。

配置项类型 #

该配置项为静态配置,需要在 easysearch.yml 配置文件中设置,修改后需要重启节点才能生效。

默认值 #

[] (空列表,不允许从任何远程主机 Reindex)

是否必需 #

可选配置项(有默认值)

取值格式 #

["host:port", "host:port", ...]

支持通配符匹配:

  • * 匹配任意字符
  • ? 匹配单个字符

配置格式 #

# easysearch.yml

# 单个主机
reindex.remote.whitelist:
  - 192.168.1.100:9200

# 多个主机
reindex.remote.whitelist:
  - 192.168.1.100:9200
  - 192.168.1.101:9200
  - example.com:9200

# 使用通配符匹配子域名
reindex.remote.whitelist:
  - "*.example.com:9200"

# 使用通配符匹配端口
reindex.remote.whitelist:
  - "192.168.1.*:9200"

# 使用通配符匹配整个网段
reindex.remote.whitelist:
  - "192.168.*:92*"

工作原理 #

┌─────────────────────────────────────────────────────────────────┐
│                   远程 Reindex 白名单验证流程                    │
└─────────────────────────────────────────────────────────────────┘

用户发起远程 Reindex 请求
        │
        ▼
    检查远程地址
        │
        ├── 白名单为空
        │   │
        │   └── 拒绝请求
        │
        ├── 远程地址匹配白名单
        │   │
        │   └── 允许请求
        │
        └── 远程地址不在白名单
            │
            └── 抛出 IllegalArgumentException 异常

安全保护 #

为防止配置错误导致的安全风险,系统会检查白名单配置:

// 如果白名单匹配所有地址,将拒绝启动
if (Operations.isTotal(automaton)) {
    throw new IllegalArgumentException(
        "Refusing to start because whitelist " + whitelist +
        " accepts all addresses."
    );
}

以下配置会被拒绝:

  • ["*:*"] - 匹配所有地址和端口
  • ["*:9200"] - 匹配所有主机的 9200 端口

使用场景 #

1. 默认配置(最安全) #

reindex.remote.whitelist: []

禁止所有远程 Reindex 操作,适用于不需要跨集群数据复制的环境。

2. 单集群复制 #

reindex.remote.whitelist:
  - production.example.com:9200

允许从指定的生产集群复制数据到开发/测试环境。

3. 多数据中心同步 #

reindex.remote.whitelist:
  - dc1.example.com:9200
  - dc2.example.com:9200
  - dc3.example.com:9200

允许从多个数据中心的数据源进行 Reindex。

4. 内网网段访问 #

reindex.remote.whitelist:
  - "192.168.1.*:9200"
  - "10.0.*.*:9200"

允许从内网指定网段的任意主机进行 Reindex。

使用示例 #

# 从远程集群 Reindex 数据
POST /_reindex
{
  "source": {
    "remote": {
      "host": "https://production.example.com:9200",
      "username": "user",
      "password": "pass"
    },
    "index": "source_index"
  },
  "dest": {
    "index": "target_index"
  }
}

如果 production.example.com:9200 不在白名单中,请求将被拒绝:

{
  "error": {
    "type": "illegal_argument_exception",
    "reason": "[production.example.com:9200] not whitelisted in reindex.remote.whitelist"
  }
}

推荐设置建议 #

环境类型推荐配置说明
生产环境[] 或指定精确地址默认禁用,或仅允许必要的远程地址
开发环境指定开发集群地址允许从生产环境复制测试数据
多集群架构列出所有集群地址明确列出所有需要互联的集群
内网环境使用网段通配符可以使用 IP 段通配符简化配置

安全最佳实践 #

  1. 最小权限原则:仅添加必要的远程主机地址
  2. 使用精确地址:避免过度使用通配符
  3. 定期审查:定期清理不再需要的白名单条目
  4. 结合认证:远程 Reindex 应配合用户名密码或证书认证
  5. 网络隔离:确保白名单中的主机在网络层面也是受控的
  6. 监控日志:监控远程 Reindex 操作,及时发现异常行为

配置验证 #

# 查看当前配置
GET /_nodes/settings?filter_path=nodes.*.reindex.remote.whitelist

# 检查远程连接是否在白名单中
# (尝试发起 Reindex 请求,系统会自动验证)

注意事项 #

  1. 静态配置:此配置修改后需要重启所有节点
  2. 所有节点一致:集群中所有节点的配置应保持一致
  3. 端口敏感:必须同时指定主机名和端口号
  4. 不支持正则:仅支持简单的 *? 通配符
  5. SSRF 防护:此配置是防止服务端请求伪造(SSRF)攻击的重要措施