我們將向伺服器部署一個新應用程序,該應用程式將偵聽連接埠 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 是連接成功。
- 例如,「連接埠無法存取」、「主機被禁止」以及其他各種組合主機/連接埠/管理員和無法到達/禁止;在訊息中尋找這些內容,因為它們明確指示正在使用 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
基本上,如果我“超時”,則表示韌體上的連接埠未開啟。