Устранение неполадок правила безопасности входящей почты Azure

У меня есть приложение node.js, работающее на сервере Ubuntu. я мог -X SSH и проверьте, что он работает правильно с 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   

Правило безопасности:

2 ответа

Решение

3 вещи приходят мне на ум:

  • ваше приложение прослушивает localhost:4000, который не является IP-адресом сетевого интерфейса, поэтому, несмотря на правильные настройки брандмауэра Azure, он по-прежнему недоступен ни от кого, кроме самого сервера. Проверьте netstat -anep | grep -w 4000 и убедитесь, что он прослушивает либо 0.0.0.0, либо IP-адрес используемого вами сетевого интерфейса (будь то eth0 или что-то еще). Если он слушает 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

Вы упомянули, что 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-адресом, который у вас есть.

Другие вопросы по тегам