配置项作用 #
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 段通配符简化配置 |
安全最佳实践 #
- 最小权限原则:仅添加必要的远程主机地址
- 使用精确地址:避免过度使用通配符
- 定期审查:定期清理不再需要的白名单条目
- 结合认证:远程 Reindex 应配合用户名密码或证书认证
- 网络隔离:确保白名单中的主机在网络层面也是受控的
- 监控日志:监控远程 Reindex 操作,及时发现异常行为
配置验证 #
# 查看当前配置
GET /_nodes/settings?filter_path=nodes.*.reindex.remote.whitelist
# 检查远程连接是否在白名单中
# (尝试发起 Reindex 请求,系统会自动验证)
注意事项 #
- 静态配置:此配置修改后需要重启所有节点
- 所有节点一致:集群中所有节点的配置应保持一致
- 端口敏感:必须同时指定主机名和端口号
- 不支持正则:仅支持简单的
*和?通配符 - SSRF 防护:此配置是防止服务端请求伪造(SSRF)攻击的重要措施





