--- title: "远程 Reindex 白名单配置" date: 2026-01-02 lastmod: 2026-01-02 description: "控制远程 Reindex 操作允许访问的远程主机白名单配置说明" tags: ["Reindex", "数据迁移", "安全配置"] summary: "配置项作用 # 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." --- ## 配置项作用 `reindex.remote.whitelist` 配置项用于控制从远程 Easysearch 集群进行 Reindex 操作时,允许访问的远程主机地址白名单。这是一个重要的安全配置,防止未授权的远程数据访问。 Reindex 操作允许用户将数据从一个索引复制到另一个索引。当源数据位于远程集群时,此配置确保只有预授权的远程主机可以被访问,避免潜在的安全风险(如 SSRF 攻击)。 ## 配置项类型 该配置项为**静态配置**,需要在 `easysearch.yml` 配置文件中设置,修改后需要重启节点才能生效。 ## 默认值 ``` [] (空列表,不允许从任何远程主机 Reindex) ``` ## 是否必需 **可选配置项**(有默认值) ## 取值格式 ``` ["host:port", "host:port", ...] ``` 支持通配符匹配: - `*` 匹配任意字符 - `?` 匹配单个字符 ## 配置格式 ```yaml # 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 异常 ``` ## 安全保护 为防止配置错误导致的安全风险,系统会检查白名单配置: ```java // 如果白名单匹配所有地址,将拒绝启动 if (Operations.isTotal(automaton)) { throw new IllegalArgumentException( "Refusing to start because whitelist " + whitelist + " accepts all addresses." ); } ``` **以下配置会被拒绝:** - `["*:*"]` - 匹配所有地址和端口 - `["*:9200"]` - 匹配所有主机的 9200 端口 ## 使用场景 ### 1. 默认配置(最安全) ```yaml reindex.remote.whitelist: [] ``` 禁止所有远程 Reindex 操作,适用于不需要跨集群数据复制的环境。 ### 2. 单集群复制 ```yaml reindex.remote.whitelist: - production.example.com:9200 ``` 允许从指定的生产集群复制数据到开发/测试环境。 ### 3. 多数据中心同步 ```yaml reindex.remote.whitelist: - dc1.example.com:9200 - dc2.example.com:9200 - dc3.example.com:9200 ``` 允许从多个数据中心的数据源进行 Reindex。 ### 4. 内网网段访问 ```yaml reindex.remote.whitelist: - "192.168.1.*:9200" - "10.0.*.*:9200" ``` 允许从内网指定网段的任意主机进行 Reindex。 ## 使用示例 ```bash # 从远程集群 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` 不在白名单中,请求将被拒绝: ```json { "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 操作,及时发现异常行为 ## 配置验证 ```bash # 查看当前配置 GET /_nodes/settings?filter_path=nodes.*.reindex.remote.whitelist # 检查远程连接是否在白名单中 # (尝试发起 Reindex 请求,系统会自动验证) ``` ## 注意事项 1. **静态配置**:此配置修改后需要重启所有节点 2. **所有节点一致**:集群中所有节点的配置应保持一致 3. **端口敏感**:必须同时指定主机名和端口号 4. **不支持正则**:仅支持简单的 `*` 和 `?` 通配符 5. **SSRF 防护**:此配置是防止服务端请求伪造(SSRF)攻击的重要措施