Firewall
我如何知道我的 TCP 連接不受防火牆/NAT 的影響?
在 Azure 雲上,我發現那裡的防火牆經常斷開 Web 伺服器和數據庫之間的連接。大多數情況下,當有一些不活動的時候,我認為在 5 到 10 分鐘之間。所以我做了一些研究,發現這似乎是一個普遍的問題。
這個問題似乎基本上可以通過設置一些保持活動來解決。(1) (2) (3)
所以歸結為防火牆處理 TCP 連接的一種方式:
當您在 NAT 代理或防火牆後面時,無緣無故斷開連接是一個非常常見的問題。這種行為是由代理和防火牆中實現的連接跟踪過程引起的,它們跟踪通過它們的所有連接。由於這些機器的物理限制,它們只能在記憶體中保留有限數量的連接。最常見和合乎邏輯的策略是保持最新的連接並首先丟棄舊的和不活動的連接。
這是否意味著防火牆/NAT 可以隨時丟棄 TCP 連接?比如 2 秒不活動後?或者有什麼東西可以阻止我們擔心防火牆沒有安全的連接?
從理論上講,是的,任何路由器或防火牆都可以決定斷開您的連接。當然,這很明顯,因為您無法通過發送正確的 TCP 數據包使任何硬體完全按照您的意願行事。至於如何處理,就看路由器了。
實際上,這正是您所引用的。為了防止它,您必須確保線路上有活動。例如,當我有 SSH 會話時,我會在其中執行一個帶有時鐘的 tmux 會話,因此每分鐘都會有一些活動。
此外,我傾向於將 Linux PC 用作路由器和防火牆,因為它們往往有足夠的記憶體來永遠不會殺死任何不活動的連接。這主要是消費級硬體問題。