我是一名在 CentOS7 服务器上工作的开发人员。今天我想检查服务器所有端口的状态。
首先我执行命令:firewall-cmd --zone=public --list-ports
然后我得到了这个:
110/tcp 443/tcp 80/tcp 995/tcp 143/tcp 3306/tcp 993/tcp
以上所有端口均由我打开,因此一切正常。
然后我用另外一台Linux PC来nc
扫描服务器的端口(假设服务器的ip是aaaa):
nc -v -z -w2 a.a.a.a 1-4000
我得到了相同的结果。
之后,我使用nc
UDP 扫描端口:
nc -v -z -w2 -u a.a.a.a 1-4000
令我惊讶的是,似乎所有端口都已打开,因为我得到的结果如下:
Connection to a.a.a.a port 1 [udp/tcpmux] succeeded!
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif (null)
src b.b.b.b port 62086
dst a.a.a.a port 2
rank info not available
Connection to a.a.a.a port 2 [udp/compressnet] succeeded!
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif (null)
src b.b.b.b port 60795
dst a.a.a.a port 3
rank info not available
Connection to a.a.a.a port 3 [udp/compressnet] succeeded!
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif (null)
src b.b.b.b port 50133
dst a.a.a.a port 4
rank info not available
Connection to a.a.a.a port 4 [udp/*] succeeded!
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif (null)
src b.b.b.b port 64246
dst a.a.a.a port 5
rank info not available
Connection to a.a.a.a port 5 [udp/rje] succeeded!
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif (null)
src b.b.b.b port 50334
dst a.a.a.a port 6
rank info not available
...
...
现在我很困惑。
为什么所有端口都为 UDP 开放?这样安全吗?如果不安全,为什么防火墙不关闭它们?
对我来说,“端口开放”意味着某个程序或系统正在监听它。例如,80/tcp
意味着我的 Web 程序正在监听端口 80。如果我是对的,这是否意味着服务器正在使用 UDP 监听所有端口?
或者“端口开放”只是意味着防火墙没有阻止端口,以便您可以使用某个程序来监听它?
答案1
UDP 响应是误报,您可以忽略这一点。UDP 是一种无连接/无状态协议,因此它不期望任何回复...没有响应、响应错误...都一样。TCP 是一种有状态协议,因为两个端点都保留有关彼此状态的信息,需要确认,并且可以重新传输。
阅读有关无状态协议的内容:https://en.wikipedia.org/wiki/Stateless_protocol
TCP 状态:https://upload.wikimedia.org/wikipedia/commons/a/a2/Tcp_state_diagram_fixed.svg