天天看點

iptables防火牆規則導緻端口不通的案例分析

<b>iptables防火牆規則導緻端口不通的案例分析</b>

<b>問題現象:</b>

一台伺服器的8080端口通路不通,但其他端口正常,例如ssh的22端口,ping也正常。

從其他機器上進行telnet連接配接8080端口測試,顯示是下邊這個結果。

從telnet測試的結果,仔細看其實會發現有問題,這裡提示了錯誤“no route to host”。

正常進行telnet端口測試,如果端口不通,傳回是這樣的情況,會提示“connection refused”

而通路8080端口會提示“no route to host”,沒有路由能連接配接到目标位址。但實際ping是通的,路由肯定沒有問題,這個異常的提示就是最大疑點。

<b>排查過程:</b>

首先想到是進行抓包,具體看下網絡連接配接情況。

在用戶端機器上,進行telnet連接配接測試,然後用 tcpdump 抓取通路目标ip 120.xx.xx.xx 的資料包。

從抓包的結果看,用戶端通路目标伺服器的8080端口(抓包裡端口顯示webcache),但目标伺服器給傳回了一個icmp協定類型的,提示目标位址不可達 。host 120.xx.xx.xx unreachable ,這裡明顯不正常。

同時也在伺服器端進行了抓包,抓取用戶端ip 101.200.xx.xx 的連接配接。

伺服器端也收到了用戶端通路8080端口的請求,但沒有正常響應用戶端發的tcp三次握手的syn包,而是傳回了一個異常的icmp協定資料包,告訴用戶端目标不可達。

這裡也就可以明白,為什麼telnet端口測試,會提示“no route to host”

在windows上用wireshark進行抓包檢視,會看到伺服器傳回的錯誤資訊“host administratively prohibited”

伺服器傳回的icmp協定的資料包中,是包含了用戶端請求的資料包資訊。

iptables防火牆規則導緻端口不通的案例分析

<b>确定問題:</b>

通過抓包的資訊,基本分析清楚了問題。出現連接配接異常,肯定是伺服器上有特殊限制,防火牆之類的。

在目标伺服器上檢視

iptables防火牆規則。

其中有

這條是拒絕所有連接配接的規則,而允許8080端口通路的規則,是在這條規則之後,優先級沒有拒絕的高導緻8080端口連接配接不上。

拒絕連接配接的規則有 reject-with icmp-host-prohibited 這個選項,是以被拒絕的連接配接會收到一個icmp,傳回目标主機不可達,抓包裡看到傳回的icmp協定,就是這個拒絕的規則導緻。

最後解決方式,關閉iptables防火牆,或者把允許8080端口通路的規則加到前邊。

繼續閱讀