在反向代理模式下阻止通过http端口访问robot.chat

时间:2019-01-15 12:10:04

标签: http ssl nginx reverse-proxy rocket.chat

我在rocket.chat上安装了0.72.3版本CentOS 7.6作为本地团队的私人聊天。

然后用于配置反向代理以强制rocket.chat使用SSL协议,我安装了nginx版本1.12.2,并按照此链接https://rocket.chat/docs/developer-guides/mobile-apps/supporting-ssl/nginx配置为反向代理。

配置成功后,我有两个url都指向我的rocket.chat应用程序(http://localhost:3000https://localhost:443)。我的意思是rocket.chat在这两个链接下都是可访问的,而http访问是多余的。

如何禁用通过rocket.chathttp://localhost:3000的访问?

2 个答案:

答案 0 :(得分:1)

您需要1)仅将火箭聊天服务绑定到localhost接口,并且2)让nginx监听公共接口并充当代理(您可能已经做过)。

因此,首先打开rocketchat.service文件(可能在/lib/systemd/system/rocketchat.service中,但这取决于您如何配置火箭聊天服务),然后在[Service]部分中添加以下行:

[Service]
Environment=BIND_IP=127.0.0.1

请放心,您已经有一个(或一些)Environment条目,这些条目是聚合的(就我而言,每个变量只有一个Environement条目)。

然后打开您的nginx配置(可能为/etc/nginx/sites-enabled/default,但这可能有所不同),并确保server块仅在端口443上侦听并执行其代理工作。我的Nginx相关条目如下所示:

# Upstreams
upstream backend {
    server 127.0.0.1:3000;
}

server {
    listen 443;
    server_name mydomain.com;
    error_log /var/log/nginx/rocketchat.access.log;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    location / {
            proxy_pass http://127.0.0.1:3000/;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forward-Proto http;
            proxy_set_header X-Nginx-Proxy true;

            proxy_redirect off;
    }
}

您可能需要重新加载/重新启动Nginx和火箭聊天服务并重新加载配置发布

$ sudo systemctl daemon-reload

命令。

对我来说,它完美无缺。

答案 1 :(得分:0)

我通过阻止与localhost的外部连接并允许使用localhostiptables的内部连接解决了此问题:

iptables -A INPUT -p tcp --dport 3000 -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 3000 -j DROP

但是我仍然想知道是否没有与nginx相关的配置来解决问题?