如何检查防火墙是否为某个端口打开但没有监听该端口


29

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

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

操作系统:Linux / Windows

Answers:


16

如果要查看是否可以从远程计算机建立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

这不能(完全)解决防火墙是否阻止该端口的问题。似乎nc在可访问端口但没有侦听器时报告“连接被拒绝”,而在防火墙通过icmp取消请求后,则报告“网络不可达”(这意味着端口上可能有或没有服务) )。如果防火墙丢弃了该数据包而不是实际拒绝它,nc它将暂停一会儿。
goldilocks 2013年

好吧,我的最后一个netcat命令的目标只是提供一个示例,说明成功执行和不成功执行是什么,以帮助他们解释由于某种原因不清楚的结果。回答他们问题的部分是第一个“在机器上” /“在服务器上”部分。
Bratchley

我知道问题与Solaris 10有关,但作为一个参考,v11在回购中提供了netcat。
sleepyweasel

15

防火墙在阻止请求时应回复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防火墙。

4

您可以使用该命令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保持打开状态,以便在有其他连接时进入。


仅供参考,netstat语法是非常特定于GNU的,这是在Solaris上本机工作的最接近的等效语言: netstat -a -P tcp -f inet | awk '/LISTEN$/ {print $0}'
Bratchley

Solaris的座右铭应该是“没有一件事情容易。”
Bratchley

1

防火墙配置和防火墙配置的状态是特定于防火墙/ OS的。

您可以从server2尝试一下:

nmap server1

谢谢你的帮助。不幸的是,该命令在Solaris中不存在(或未安装)。我收到“ nmap:找不到命令”
yottabrain

@ user1734143,它可能在“存储库”中或等效的Solaris中,但是无论如何您都可以下载它,甚至可以从此处进行
RSFalcon7 2013年

@ user1734143可以通过OpenCSW获得,您可能仍然应该安装它,这使您的管理经验变得更加容易。
Bratchley

1

最近,我收到了相同的请求并进入线程。我可以使用nc命令扫描固件上的开放端口,就像在查询其输出时一样:

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

基本上,如果我“超时”,则意味着该端口在FW上未打开。


0

您可以使用在线工具,例如www.firewallruletest.com来查看外部主机是否可以建立TCP连接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.