我正在尝试安装一个 nodejs 服务器来监听我用 iptable 打开的端口 8080,但是当我运行 nmap 或 web 工具时,我总是收到端口已关闭的消息。我在 Ubuntu vps 上。
首先,确保 nodejs 确实在监听这个端口:
sudo netstat -tpln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:60613 0.0.0.0:* LISTEN 1097/sshd
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1215/mysqld
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 18843/nodejs
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1375/master
tcp6 0 0 :::60613 :::* LISTEN 1097/sshd
tcp6 0 0 :::80 :::* LISTEN 1454/apache2
tcp6 0 0 :::25 :::* LISTEN 1375/master
tcp6 0 0 :::443 :::* LISTEN 1454/apache2
iptables:
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 60613 -m state --state NEW -m recent --set
sudo iptables -A INPUT -p tcp --dport 60613 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
sudo iptables -A INPUT -p tcp -m tcp --dport 60613 -j ACCEPT
我们来检查一下 iptable:
sudo iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
3945 766K ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
67404 17M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
3057 179K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
32 1488 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080
888 51392 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
3 180 tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:60613 state NEW recent: SET name: DEFAULT side: source mask: 255.255.255.255
0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:60613 state NEW recent: UPDATE seconds: 60 hit_count: 4 name: DEFAULT side: source mask: 255.255.255.255
3 180 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:60613
7106 318K DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 71509 packets, 60M bytes)
pkts bytes target prot opt in out source destination
但是端口 8080 仍然关闭:
sudo nmap MYSITE.org
Starting Nmap 6.40 ( http://nmap.org ) at 2015-04-26 18:17 CEST
Nmap scan report for MYSITE.org (XXX.XXX.XXX.XXX)
Host is up (0.041s latency).
rDNS record for XXX.XXX.XXX.XXX: MYSITE
Not shown: 997 filtered ports
PORT STATE SERVICE
80/tcp open http
443/tcp open https
8080/tcp closed http-proxy
Nmap done: 1 IP address (1 host up) scanned in 85.14 seconds
我认为问题出在我的防火墙上,但我也尝试了其他服务器和你得到信号但该港口确实已关闭。
答案1
注意 netstat 输出中的行...
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 18843/nodejs
具体来说就是 的本地地址127.0.0.1:8080
。这意味着 nodejs 只监听该localhost
地址,因此只接受来自同一台机器的连接。我不知道(一时想不出来)如何配置 nodejs 来监听来自其他机器的连接,但通常通过设置要绑定的接口来控制。
从阅读 Hameedullah Khan 的回答 在 Ubuntu 上无法从外部 IP 访问 Node.js看来,解决办法是将参数更改为listen
类似的值listen(8080, "0.0.0.0")
。