为什么我从网络访问时端口被关闭?

为什么我从网络访问时端口被关闭?

我读了很多页,尝试了很多方法,但还是卡在这里。

我有一台新安装的 Ubuntu 20.04 服务器。我在其上运行了一个 Django 测试服务器(只是为了试用)。它正在运行并监听端口 8000。

我理解了:

$ sudo netstat -tulpen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name    
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      112        62240      47748/postgres      
tcp        0      0 127.0.0.1:8000          0.0.0.0:*               LISTEN      1000       65495      48618/python        
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      101        23068      755/systemd-resolve 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      0          27689      850/sshd: /usr/sbin 
tcp6       0      0 :::5432                 :::*                    LISTEN      112        62241      47748/postgres      
tcp6       0      0 :::22                   :::*                    LISTEN      0          27691      850/sshd: /usr/sbin 
udp        0      0 127.0.0.53:53           0.0.0.0:*                           101        23067      755/systemd-resolve 
udp        0      0 192.168.0.15:68         0.0.0.0:*                           100        23071      753/systemd-network 
udp6       0      0 fe80::224:e8ff:fe22:546 :::*                                100        23086      753/systemd-network 

并且它响应得很好。我可以在服务器上执行以下操作:

wget localhost:8000

我得到了回复。

因此,现在我转到局域网上的台式机。然后我尝试 wget:

$ wget server.lan:8000
--2020-10-11 11:42:18--  http://server.lan:8000/
Resolving server.lan (server.lan)... 192.168.0.15
Connecting to server.lan (server.lan)|192.168.0.15|:8000... failed: Connection refused.

果然:

$ nmap server.lan
Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-11 22:43 AEDT
Nmap scan report for server.lan (192.168.0.15)
Host is up (0.00025s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
5432/tcp open  postgresql

Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

$ nmap serverlan -p 8000
Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-11 22:44 AEDT
Nmap scan report for server.lan (192.168.0.15)
Host is up (0.00068s latency).

PORT     STATE  SERVICE
8000/tcp closed http-alt

Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds

好的,对服务器进行标准检查:

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:8000

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        

因为我使用以下命令启用了端口 8000:

$ sudo iptables -A INPUT -p tcp --dport 8000 -j ACCEPT

按照此处的说明进行操作:https://www.e2enetworks.com/help/knowledge-base/how-to-open-ports-on-iptables-in-a-linux-server/

和:

$ sudo ufw status verbose
Status: inactive

然而从桌面上看lan端口8000已经关闭了!

我应该注意到端口 22 是打开的(因为我使用 ssh 登录到服务器,并且我也可以在端口 5432 上看到数据库,并且可以从桌面使用 pgadmin4 对其进行管理,所以端口 22 和 5432 是打开的,但我看不到iptables -L它们是打开的。

Ubuntu 20.04 到底有怎样的神秘魔力,我读过的许多页面都没有提到这一点。

我甚至可以 ping 通它:

$ ping arachne.lan
PING arachne.lan (192.168.0.15) 56(84) bytes of data.
64 bytes from 192.168.0.15 (192.168.0.15): icmp_seq=1 ttl=64 time=0.269 ms
64 bytes from 192.168.0.15 (192.168.0.15): icmp_seq=2 ttl=64 time=0.267 ms
64 bytes from 192.168.0.15 (192.168.0.15): icmp_seq=3 ttl=64 time=0.530 ms
64 bytes from 192.168.0.15 (192.168.0.15): icmp_seq=4 ttl=64 time=0.284 ms
64 bytes from 192.168.0.15 (192.168.0.15): icmp_seq=5 ttl=64 time=0.280 ms
64 bytes from 192.168.0.15 (192.168.0.15): icmp_seq=6 ttl=64 time=0.280 ms

因为我喜欢它并且使用它,所以我安装了它cockpit并且它在端口 9090 上运行。它可以在桌面上安装并运行。

现在:

$ netstat -tulpen
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name    
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      112        62240      -                   
tcp        0      0 127.0.0.1:8000          0.0.0.0:*               LISTEN      1000       65495      48618/python        
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      101        23068      -                   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      0          27689      -                   
tcp6       0      0 :::5432                 :::*                    LISTEN      112        62241      -                   
tcp6       0      0 :::9090                 :::*                    LISTEN      0          71091      -                   
tcp6       0      0 :::22                   :::*                    LISTEN      0          27691      -                   
udp        0      0 127.0.0.53:53           0.0.0.0:*                           101        23067      -                   
udp        0      0 192.168.0.15:68         0.0.0.0:*                           100        23071      -                   
udp6       0      0 fe80::224:e8ff:fe22:546 :::*                                100        23086      -  

但 iptables 却无动于衷:

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:8000

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination      

但是从台式机上的 nmap 可以看到它:

$ nmap server.lan
Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-11 22:55 AEDT
Nmap scan report for server.lan (192.168.0.15)
Host is up (0.00024s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
5432/tcp open  postgresql
9090/tcp open  zeus-admin

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

因此,cockpit、postgresql 和 ssh 在安装时都以某种方式管理,以告诉 Ubuntu 20.04 打开一个端口。

因此,在内省 nmap 上查看服务器:

$ nmap localhost
Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-11 11:58 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00021s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
5432/tcp open  postgresql
8000/tcp open  http-alt
9090/tcp open  zeus-admin

Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds

端口 8000 看起来是开放的。

桌面和服务器之间没有防火墙,只有标准的 LAN 交换机。

为什么 cockpit、postgresql 和 ssh 都能实现某些功能,但要弄清楚它们实现了什么以及如何实现这些功能却如此困难?他们iptables似乎没有使用它。也没有ufw。我错过了什么魔法?我如何打开 8000 端口?

答案1

不幸的是,你走错了方向(但是发布了一个经过彻底研究的问题,做得很好!)

问题不在于港口,这是界面您的服务正在监听的,显示在Local Addressnetstat 报告的列中:127.0.0.1是本地主机(或“环回”)接口 - 它只接受来自同一主机的连接。

通常,你可以将服务配置为侦听特定接口或所有外部接口。例如

udp        0      0 192.168.0.15:68         0.0.0.0:*                           100        23071      753/systemd-network     

正在监听分配了 IPv4 地址的任何接口上的 68 端口192.168.0.15,而你的 SSH 服务

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      0          27689      850/sshd: /usr/sbin 

正在监听所有外部接口,如 netstat 的0.0.0.0本地地址值所示。

我对 Django 一无所知,但这个[so]问答建议了一些方法来配置它以监听外部接口:

或者(出于安全意识),您可以让它在环回接口上监听,并为网络流量设置 SSH 隧道。

相关内容