即使使用 iptable 打开并且 nodejs 正在监听端口 8080,它仍然保持关闭状态

即使使用 iptable 打开并且 nodejs 正在监听端口 8080,它仍然保持关闭状态

我正在尝试安装一个 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")

相关内容