如何保护Digital Ocean Elasticsearch集群?

Pet*_*uer 5 elasticsearch digital-ocean

我需要将我的ES集群公开给全世界,并通过Nginx使用代理*:9201 - > localhost:9200(正常)来保护它.

但是,为了形成一个集群,我试图在DigitalOcean上使用专用网络来让节点相互通信.

如何在不安全的私有网络接口上公开节点 - 节点传输,同时不向世界公开端口9200?

我正在尝试类似的东西

network.publish_host: 10.128.97.184
http.port: 9200
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: 10.128.97.184,10.128.97.185
Run Code Online (Sandbox Code Playgroud)

elasticsearch.yml但它不工作,可能是因为端口9300也可能nginx的保护?

我的nginx文件看起来像

root@els-node-1:~# cat /etc/nginx/sites-enabled/elasticsearch 
server {
  listen                *:9201;
  access_log            /var/log/nginx/elasticsearch.access.log;

  location / {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/htpasswd;
    proxy_pass http://localhost:9200;
    proxy_read_timeout 90;
  }

}
Run Code Online (Sandbox Code Playgroud)

我能够组建集群,但我看不到如何保护外部9200(除了127.0.0.1之外的所有内容都禁用它)并保持内部接口为10.xxx这样的加密打开

感谢帮助!

Oli*_*ver 3

即使您使用专用网络,您的 ES 集群也不安全,因为同一 Digital Ocean 专用网络中的任何人仍然可以通过开放端口 9200 和 9300(以及可能的其他服务)访问您的节点。最好的选择是通过 iptables 保护您的设备,并且仅将您知道是您自己的服务器的 IP 列入白名单。删除所有传入和转发的包,并仅为集群中的其他节点添加显式规则。另外,使用network.bind_host代替network.publish_host并另外将 ES 设置为仅使用 eth1 接口,请查看ES 网络文档以了解详细信息。