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

yot*_*ain 32 networking firewall solaris tcp

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

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

操作系统:Linux/Windows

Bra*_*ley 20

如果您想查看是否可以从远程机器形成 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!
Run Code Online (Sandbox Code Playgroud)

失败的执行:

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


gol*_*cks 17

防火墙在阻止请求时应回复ICMP 消息。然而,情况并非一定如此(您会对这篇不错的文章感兴趣)。

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

1) 防火墙拒绝请求

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

“No route to host”可能表示这一点,但也可能表示更微妙的路由问题。

2) 防火墙丢弃数据包

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

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

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

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

换句话说:假设您的网络一般工作正常,如果您获得 #1 或 #2,则意味着防火墙正在积极阻止对端口的访问。如果您的服务器未运行但端口可访问,则 #3 将发生,当然(隐式)#4 是成功连接。


  1. 例如,“端口不可达”、“主机禁止”、主机/端口/管理不可达/禁止的各种其他组合;在消息中查找这些信息,因为它们明确表示存在 IP 防火墙。


slm*_*slm 5

您可以使用该命令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 
Run Code Online (Sandbox Code Playgroud)

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

IP 地址显示本地外部地址Local将是您的系统,而Foreign将是连接到您的 TCP 端口或您连接到其 TCP 端口之一的任何地址。

因此,在端口 22 的情况下,这是在我的系统上运行的 ssh 守护程序,它正在侦听连接。一旦有人尝试连接到ssh守护进程,它就会派生出自己的一个副本并将该连接推送到另一个端口,保持 TCP 端口 22 打开以供其他连接进入。


RSF*_*on7 1

防火墙配置的配置和状态是特定于防火墙/操作系统的。

你可以做的是从 server2 尝试:

nmap server1
Run Code Online (Sandbox Code Playgroud)