Centos
將 CentOS 6 iptables 配置為在埠 3000 上執行的 NodeJS 應用程序使用埠 80
我正在使用 AWS執行CentOS 6的新實例。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
記住也要向世界開放 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