如何检查防火墙是否打开了某个端口但未监听该端口

如何检查防火墙是否打开了某个端口但未监听该端口

我们将向服务器部署一个新应用程序,该应用程序将侦听端口 8443。我们已要求网络团队在部署应用程序之前打开该服务器上端口 8443 的防火墙。当前没有应用程序正在侦听服务器上的该特定端口。

无论如何我可以确保防火墙已打开端口 8443

操作系统:Linux / Windows

答案1

如果您想查看是否可以从远程计算机形成 TCP 连接,请在该计算机和目标计算机上安装 OpenCSW,并在两台计算机上安装 netcat。这是使用 netcat 测试 TCP 连接的语法:

nc -vz targetServer portNum

例如要检查“homeServer1”上的 SSH:

nc -vz homeserver1 22

这使您能够测试来自远程系统的 TCP 级连接。 Netcat 还可以配置为侦听端口而不是充当客户端。要让它监听 TCP/8443:

在容纳应用程序的服务器上:nc -l homeserver1 8443

在位于防火墙外部的计算机上:nc -vz homeserver.fqdn 8443

这是成功执行的示例:

[jadavis6@ditirlns01 ~]$ nc -vz ditirlns01.ncat.edu 8443
Connection to ditirlns01.ncat.edu 8443 port [tcp/pcsync-https] succeeded!

执行失败:

[jadavis6@ditirlns01 ~]$ nc -vz ditirlns01.ncat.edu 8443
nc: connect to ditirlns01.ncat.edu port 8443 (tcp) failed: Connection refused

答案2

防火墙应该回复ICMP消息当他们阻止请求时。然而,情况并非一定如此(您可能会感兴趣这篇好文章)。

您可以从外部测试以查看端口是否可以通过防火墙访问,如果可以,则是否有任何东西正在侦听该端口。以下是涉及 tcp 请求的三种不同场景,您可以使用wireshark或其他一些数据包嗅探器来观察,以及您将看到的内容:

1) 防火墙拒绝请求

您收到返回的 ICMP 消息,发出请求的工具应立即告诉您相关信息(“无法访问、管理员禁止”等)。我所说的“工具”是指您用来发送请求的客户端(我使用的telnet)。消息1的详细信息取决于防火墙的配置方式,但“端口无法访问”可能是最常见的。

“没有到主机的路由”可能表明这一点,但它也可能表明更微妙的路由问题。

2) 防火墙丢弃数据包

没有回复,因此该工具会等待,直到超时或您感到无聊。

3) 防火墙允许数据包(或没有防火墙),但端口上没有任何监听。

您会收到一条 TCP RST/ACK 消息。我认为 TCP 协议需要这个。换句话说,如果端口上没有任何监听,操作系统本身会发送此回复。仅根据工具报告的内容可能很难将其与#1 区分开来,因为它可能在这两种情况下都说同样的话(但是,最有可能将其区分为“连接被拒绝”与#1“网络无法访问”)。在客户端计算机上的数据包嗅探器中观察到,场景#1(ICMP 拒绝消息)和#3(TCP RST/ACK 消息)明显不同。

这里唯一的其他选择是防火墙允许数据包通过并且有东西正在侦听,因此您可以获得成功的连接。

换句话说:假设您的网络总体工作正常,如果您得到#1 或#2,则意味着防火墙正在主动阻止对该端口的访问。如果你的服务器没有运行但端口可以访问,#3 就会发生,当然(隐式的)#4 是连接成功。


  1. 例如,“端口无法访问”、“主机被禁止”以及其他各种组合主机/端口/管理员无法到达/禁止;在消息中查找这些内容,因为它们明确指示正在使用 IP 防火墙。

答案3

您可以使用该命令netstat查看端口是否打开并正在侦听。

例子

$ netstat -anp | less
Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:41716               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:17500               0.0.0.0:*                   LISTEN      3034/dropbox        
tcp        0      0 0.0.0.0:17501               0.0.0.0:*                   LISTEN      3033/dropbox        
tcp        0      0 127.0.0.1:2143              0.0.0.0:*                   LISTEN      3191/ssh                       
tcp        0      0 127.0.0.1:2025              0.0.0.0:*                   LISTEN      3191/ssh 

输出显示进程(最右边的列)正在侦听 TCP 端口。端口号是 IP 地址后面冒号后面的数字(例如 0.0.0.0:111 表示端口 111)。

IP 地址显示当地的国外地址当地的将是你的系统外国的可以是连接到您的 TCP 端口或您连接到其 TCP 端口之一的任何地址。

因此,就端口 22 而言,这是在我的系统上运行的 ssh 守护进程,即听力用于连接。一旦有人尝试连接到ssh守护进程,它就会创建一个自身的副本,并将该连接推送到另一个端口,同时保持 TCP 端口 22 开放,以供其他连接进入。

答案4

最近我也收到了同样的请求并来到了这个线程。我能够使用 nc 命令扫描固件上的开放端口,就像我查询其输出一样:

nc -v -w 1 -z -s *srcIP destIP port* 2>&1 | grep timed > /dev/null && echo closed || echo open

基本上,如果我“超时”,则意味着固件上的端口未打开。

相关内容