限制 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 开放,风险较高。
步骤 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