iptables 導致 ssh 停止?

iptables 導致 ssh 停止?

我有一台伺服器透過兩個網橋運行多個虛擬機,並希望透過 iptables 保護主機。

所以我有 IN/OUTPUT: drop 和 FORWARD: Accept 的預設值,以及一些允許我 ssh 存取的 IN/OUTPUT 規則。

現在的問題是,當命令產生一些輸出行時,ssh 會話似乎凍結了。例如date可以工作,但是iptables -Lortop會掛在輸出的中間。我可以使用 終止會話~.,再次登錄,將 iptables 設定回預設值,一切都會恢復正常。

此外,在設定 iptables 規則後,需要一段時間才會出現問題。我無法確定確切的時間範圍,我認為是 5 到 20 分鐘之間。

知道什麼可能導致這樣的問題或如何診斷它?

答案1

嘗試運行iptables -L -n(新增 -n 選項)。名稱解析可能會導致 iptables -L 掛起。

答案2

您是否完全阻止 ICMP?如果是這樣,您可能已經創建了一個PMTU黑洞

答案3

您是否有允許已建立的流量通過的 iptable 規則?

iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

我也看到這個問題是由於網路上的水平分割造成的,但這聽起來不像你的問題,因為當你刪除 iptable 規則時問題就消失了

答案4

這可能是 MTU 黑洞問題。

MTU為最大傳輸單元;每邊可以處理多大的資料包。乙太網路預設為 1500 字節,但這並不是唯一的可能性。

短命令之所以有效,是因為它們低於兩個 MTU 大小。較長的則不會,因為它們不是。

如果連接的兩端沒有使用相同的 MTU,或者中間的網路具有較小的 MTU,您的系統將需要以某種方式解決這個問題;該過程稱為路徑 MTU 發現。

發生這種情況的方式是使用 ICMP 訊息。如果您封鎖所有 ICMP,那麼您就封鎖了有用的內容。

更多資訊請點這裡:為什麼不阻止 ICMP?

另請注意,如果中間的小 MTU 網路是第 2 層(例如,您配置的網橋),路徑 MTU 發現將無法運作;資料包將被丟棄並在交換器/網橋和/或乙太網路介面上顯示為錯誤。

相關內容