Настройка CentOS 6 iptables для использования порта 80 для приложения NodeJS, работающего на порту 3000
Я запускаю свежий экземпляр CentOS 6 с использованием AWS. В iptables есть что-то, что блокирует мое приложение nodejs.
Вот мое приложение nodejs:
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World!');
});
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});
Следуя этому руководству, я попытался добавить запись для своего приложения с помощью следующей команды:
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
Когда я запускаю приложение node.js и пытаюсь получить к нему доступ в своем браузере, перейдите в ec2-XXX-XXX-XXX-XXX.YYY.compute.amazonaws.com
Мой браузер просто зависает.
Я подтвердил, что iptables не делает то, что я хочу, потому что всякий раз, когда я запускаю команду service iptables stop
и перейдите по адресу ec2-XXX-XXX-XXX-XXX.YYY.compute.amazonaws.com:3000
приложение обслуживается. Тем не менее, я предполагаю, что не стоит запускать iptables.
Node.js работает и слушает, вот вывод netstat -tulpn
:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 1364/node
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN -
tcp 0 0 :::22 :::* LISTEN -
tcp 0 0 ::1:25 :::* LISTEN -
udp 0 0 0.0.0.0:68 0.0.0.0:* -
И вот что я получаю, когда запускаю команду iptables -L
:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
1 ответ
Не забудьте на самом деле открыть порт 80 для мира тоже.
Полный список необходимых команд:
sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
Не забудьте также сохранить конфигурацию iptables. Это должно быть сделано с помощью следующей команды:
sudo iptables-save > /etc/sysconfig/iptables
Вы также можете попытаться проверить, действительно ли iptables вызывает у вас проблемы, открыв порт 3000 в брандмауэре, но при этом оставив его активным:
sudo iptables -I INPUT 1 -p tcp --dport 3000 -j ACCEPT