У меня есть приложение node.js, работающее на сервере Ubuntu. я мог -X SSH
in и убедитесь, что он правильно работает с firefox на localhost: 4000.
Затем я добавляю новое правило безопасности для входящего трафика с портала 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
Правило безопасности:
Вы упомянули, что 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-адреса, который у вас есть.
На ум приходят 3 вещи:
netstat -anep | grep -w 4000
и убедитесь, что он прослушивает 0.0.0.0 или IP-адрес сетевого интерфейса, который вы используете (будь то eth0 или что-то еще). Если он слушает 127.0.0.1, то он не будет доступен из внешнего мираiptables -L
. Чтобы отобразить их все, используйте: iptables -vL -t filter
, iptables -vL -t nat
, iptables -vL -t mangle
, iptables -vL -t raw
, iptables -vL -t security