Elasticsearch 如何限制特定 IP 地址访问集群安全加固?

文章导读
限制 Elasticsearch 集群访问最稳妥的做法是在网络层防火墙配合集群配置双重控制,适合生产环境防止未授权访问。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 参考来源
A A

限制 Elasticsearch 集群访问最稳妥的做法是在网络层防火墙配合集群配置双重控制,适合生产环境防止未授权访问。

先说结论:单纯依赖 Elasticsearch 配置不够安全,必须结合操作系统防火墙或云安全组进行网络隔离,且开启安全功能后务必初始化密码。

  • 先判断:确认集群当前是否暴露在公网或不可信内网段。
  • 优先做:在防火墙层丢弃非信任 IP 的 9200/9300 端口请求,并备份现有规则。
  • 再验证:从允许和禁止的 IP 分别发起请求,确认连通性符合预期。
  • 注意:开启 xpack.security 后必须执行密码初始化,否则集群不可用。

命令速用版

如果你使用 Linux 防火墙,可参考以下命令快速限制仅允许特定网段访问 9200 端口(操作前请备份规则):

iptables-save > /etc/iptables.rules.bak
iptables -A INPUT -p tcp `--dport` 9200 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp `--dport` 9200 -j DROP

若使用 Elasticsearch 内置 IP 过滤功能(适用于 7.x 及以上版本),需在 elasticsearch.yml 中添加:

xpack.security.enabled: true
xpack.security.ip_filtering.allow:
  - "192.168.1.0/24"
  - "127.0.0.1"
xpack.security.ip_filtering.deny:
  - "0.0.0.0/0"

开启安全功能后,必须初始化密码:

bin/elasticsearch-reset-password -u elastic

为什么会这样

Elasticsearch 默认监听所有网络接口,若未配置认证或防火墙,任何能连通网络的人都可以读取甚至删除数据。网络层防火墙是第一道防线,即使 ES 配置失误,外部流量也无法到达端口。ES 内置的 IP 过滤是第二道防线,用于在应用层进一步细化控制,但前提是已开启 X-Pack 安全功能。

分步处理

步骤 1:检查当前监听状态
在服务器执行 netstat -tlnp | grep 9200,确认监听地址。若显示 0.0.0.0:9200,说明对所有 IP 开放,风险较高。

Elasticsearch 如何限制特定 IP 地址访问集群安全加固?

步骤 2:配置网络层防火墙
优先使用云厂商的安全组或系统防火墙。设置规则仅允许业务服务器 IP 或管理网段访问 9200 和 9300 端口。重要:修改前执行 iptables-save > /tmp/iptables.bak 备份,防止默认策略为 DROP 时阻断 SSH 等管理流量。

步骤 3:配置 Elasticsearch IP 过滤
编辑 elasticsearch.yml,添加 xpack.security.ip_filtering 配置。注意缩进必须正确,否则服务无法启动。若未开启安全功能,需先设置 xpack.security.enabled: true

步骤 4:初始化安全密码
配置安全功能后,进入 ES 安装目录执行 bin/elasticsearch-reset-password -u elastic 初始化超级用户密码,否则集群无法启动或无法连接。

步骤 5:重启服务
修改配置文件后需重启 Elasticsearch 服务。执行 systemctl restart elasticsearch。生产环境建议在维护窗口操作,并准备好回滚配置。

怎么验证是否生效

在允许列表内的机器执行 curl -u elastic http://<ES_IP>:9200,输入密码后应返回集群信息。在禁止列表内的机器执行相同命令,连接应被拒绝或超时。查看 ES 日志文件(通常在 /var/log/elasticsearch/),若配置生效,被拒绝的 IP 尝试连接时可能会有相关安全日志记录。

常见坑

1. 把自己锁在外面:配置防火墙或 IP 过滤时,务必先将当前管理 IP 加入白名单,否则重启后无法远程连接。
2. 忽略 IPv6:若服务器启用 IPv6,需同时配置 IPv6 地址规则,否则可能绕过限制。
3. 配置文件语法错误:YAML 格式对缩进敏感,配置错误会导致 ES 无法启动,修改前务必备份原文件。
4. 仅依赖 ES 配置:若攻击者能直接访问端口,ES 配置可能被绕过或消耗资源,网络层隔离不可省略。
5. 未初始化密码:开启 xpack.security 后忘记重置密码,导致集群无法认证访问。

参考来源

  • Elastic 官方文档,Elasticsearch Reference: Security features, https://www.elastic.co/guide/en/elasticsearch/reference/current/security.html
  • Elastic 官方文档,IP Filtering: Control access by IP address, https://www.elastic.co/guide/en/elasticsearch/reference/current/security-ip-filtering.html