如何檢查防火牆是否開啟某個連接埠但未監聽該連接埠

如何檢查防火牆是否開啟某個連接埠但未監聽該連接埠

我們將向伺服器部署一個新應用程序,該應用程式將偵聽連接埠 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

基本上,如果我“超時”,則表示韌體上的連接埠未開啟。

相關內容