我正在尝试安装一个 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
iptable:
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
我在我的防火墙上解决了一个问题,但我也在其他服务器和yougetsignal上尝试过,但端口最终被关闭。
请注意您的 netstat 输出中的行...
特别是本地地址
127.0.0.1:8080
。这意味着 nodejs 只监听localhost
地址,因此只会接受来自同一台机器的连接。我不知道(不知道)如何配置 nodejs 以侦听来自其他机器的连接,但它通常通过设置要绑定的接口来控制。从阅读 Hameedullah Khan 对 Node.js 的回答 无法从 Ubuntu 上的外部 IP 访问,似乎解决方法是将参数更改
listen
为类似listen(8080, "0.0.0.0")
.