配置 CentOS 6 iptables 以使用端口 80 来运行在端口 3000 上的 NodeJS 应用程序

配置 CentOS 6 iptables 以使用端口 80 来运行在端口 3000 上的 NodeJS 应用程序

我正在运行一个新的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

您还可以尝试通过在防火墙中打开端口 3000 但仍然保持其处于活动状态来查看是否确实是 iptables 困扰着您:

sudo iptables -I INPUT 1 -p tcp --dport 3000 -j ACCEPT

相关内容