nginx反向代理停止端口覆盖

时间:2016-02-09 16:58:44

标签: nginx reverse-proxy

我目前正在使用nginx在一个vps上运行两个节点应用程序。然而,它从任一URL工作,如果我手动输入另一个端口,它将运行另一个应用程序,即转到mydomain1.com和mydomain2.com正确路由到在端口1337和1338上运行的节点应用程序。但是,我可以做mydomain1.com:1337或mydomain1.com:1338我可以访问任一应用程序,这似乎没有问题。我是否可以阻止将端口附加到跨访问应用程序?

以下是我在etc / nginx / conf.d,mydomain1.conf和mydomain2.conf中的文件:

mydomain1.conf

    server {
        listen 80;

        server_name mydomain1.com;

        location / {
            proxy_pass http://localhost:1337;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }

mydomain2.conf

    server {
        listen 80;

        server_name mydomain2.com;

        location / {
            proxy_pass http://localhost:1338;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }

我还添加了一个/etc/nginx/nginx.conf文件,其中包含以下内容:

    server_names_hash_bucket_size 64;

3 个答案:

答案 0 :(得分:2)

这似乎更像是防火墙问题?域名只会让您进入计算机,如果节点服务器在“公开”端口上运行,那么您可以访问它们。您应该锁定暴露的端口,并可能在应用程序路由中强制执行域重定向。

Web服务器可能只需要公开端口80用于http,443用于https,22用于ssh,可能25用于ftp

答案 1 :(得分:1)

像这样设置防火墙很明智,并且显然提供了解决方案。

如果您有兴趣,可访问节点应用程序的实际原因是,除非将它们绑定到IP,否则它们将监听所有网络接口上的流量,因此将响应您的公共IP上的请求。

将您的节点应用程序(或计算机上运行的任何服务器)绑定到127.0.0.1,它将仅响应内部请求,包括Nginx代理的请求,而不响应外部请求。

答案 2 :(得分:0)

我在自己的问题中添加了一个答案,我接受了一个让我朝着正确的方向前进的答案。这个答案可能对于那些在线上打这个线程的人有用。

肯定有更强大的方法,但对我来说使用linux iptables,以下只允许端口80和端口22(对于我的ssh会话),因此用户无法输入mydomain1:1337或mydomain1:1338,它还包括一些基本的攻击保护:

冲洗

    iptables -F

阻止空包

    iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

同步洪水攻击保护

    iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

XMAS数据包保护

    iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

允许本地主机

    iptables -A INPUT -i lo -p all -j ACCEPT

现在我们可以允许网络服务器流量:

    iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
    iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

允许相关的,已建立的

    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT