排查 Azure 入站安全规则问题

排查 Azure 入站安全规则问题

我在 Ubuntu 服务器上运行了一个 node.js 应用程序。我能够-X SSH使用 localhost:4000 上的 Firefox 进入并检查它是否正常运行。

然后,我从 Azure 门户添加新的入站安全规则。

该网站仍然无法从服务器外部访问。我从我的桌面运行以下命令:

telnet 104.99.99.99 4000

我的连接超时了。

由于。。。导致的结果sudo iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

安全规则:

在此处输入图片描述

答案1

我想到三件事:

  • 您的应用程序监听 localhost:4000,这不是您的网络接口 IP,因此尽管 Azure 防火墙设置正确,但仍然无法从服务器本身以外的任何地方访问它。检查netstat -anep | grep -w 4000并确保它正在监听 0.0.0.0 或您使用的网络接口的 IP(无论是 eth0 还是其他任何 IP)。如果它正在监听 127.0.0.1,那么它将无法从外部世界访问
  • 来自您的服务器:4000 的传出流量被 Azure 防火墙阻止。可能性不大,但请尝试创建另一条防火墙规则,以允许您的服务器从端口 4000 传出的流量,以 100% 确保它不是阻止程序
  • 附加 iptables 过滤器无法通过 看到iptables -L。要显示所有过滤器,请使用:iptables -vL -t filter, iptables -vL -t nat, iptables -vL -t mangle, iptables -vL -t raw,iptables -vL -t security

答案2

您曾提到 NodeJS 正在监听 localhost:4000。

这意味着它只能从您自己的服务器内部访问。NodeJS 服务必须监听 0.0.0.0:4000(对于任何接口)或 your.private.ip.address:4000 的特定接口,例如:

var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(4000, "0.0.0.0");
console.log('Server running at http://0.0.0.0:4000/');

上述代码片段将在 0.0.0.0:4000 启动服务器,因此您可以从外部通过 104.99.99.99:4000 或任何您拥有的公共 IP 地址访问它。

相关内容