当前位置:  开发笔记 > 后端 > 正文

限制直接访问端口,但允许在Nginx中进行端口转发

如何解决《限制直接访问端口,但允许在Nginx中进行端口转发》经验,为你挑选了1个好方法。

我试图限制端口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冲突.

必须有办法做到这一点!但我想不出来.

编辑:

我根据评论编辑并总结了问题:

我想锁定:9200,基本上只允许通过端口5001(在HTTP Auth后面)进行访问.5001应代理到127.0.0.1:9200,以便只能通过5001访问elasticsearch.所有其他访问应该是404(或301等).



1> cfrick..:

在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)上运行其集群通信,而恶意的实施者可能只是在那里连接.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有