我试图限制端口9200上对elasticsearch的直接访问,但允许Nginx代理传递给它.
这是我目前的配置:
server { listen 80; return 301; } server { listen *:5001; location / { auth_basic "Restricted"; auth_basic_user_file /var/data/nginx-elastic/.htpasswd; proxy_pass http://127.0.0.1:9200; proxy_read_timeout 90; } }
这几乎与我想要的一样.我可以在端口5001上访问我的服务器以访问elasticsearch,并且必须按预期输入凭据.
但是,我仍然可以点击:9200并避免HTTP身份验证,这会失败.如何在不限制nginx的情况下阻止访问此端口?我试过这个:
server { listen *:9200; return 404; }
但我得到:
nginx: [emerg] bind() to 0.0.0.0:9200 failed (98: Address already in use)
因为它与elasticsearch冲突.
必须有办法做到这一点!但我想不出来.
编辑:
我根据评论编辑并总结了问题:
我想锁定
在ES配置中添加此项以确保它仅绑定到localhost
network.host: 127.0.0.1 http.host: 127.0.0.1
那么ES只能从localhost而不是全世界访问.
确保您的操作系统工具确实如此.例如在unix上:
$ netstat -an | grep -i 9200 tcp4 0 0 127.0.0.1.9200 *.* LISTEN
在任何情况下,我都会使用操作系统防火墙锁定机器,实际上只允许所需的端口,而不仅仅依赖于正确的绑定.为什么这很重要?因为ES还在另一个端口(9300)上运行其集群通信,而恶意的实施者可能只是在那里连接.