思科自適應安全設備正在丟棄未設置 SYN 標誌的數據包
我們的 DMZ 中有一個 apache 實例,它被配置為將請求代理到我們網路中的內部 NATed tomcat 實例。它工作正常,但是突然間從 apache 到 tomcat 實例的請求停止通過 apache 日誌中的以下內容:
$$ error $$(70007)指定的超時已過期:ajp_ilink_receive() 無法接收標頭
調查 Cisco 日誌查看器顯示以下內容:
錯誤消息 %ASA-6-106015: Deny TCP (no connection) from IP_address/port to IP_address/port flags tcp_flags on interface interface_name。說明:ASA 丟棄了在 ASA 連接表中沒有關聯連接的 TCP 數據包。自適應安全設備在數據包中查找 SYN 標誌,該標誌指示建立新連接的請求。如果未設置 SYN 標誌,並且不存在現有連接,則自適應安全設備會丟棄數據包。
建議 的操作:除非自適應安全設備收到大量這些無效 TCP 數據包,否則不需要。如果是這種情況,請跟踪數據包的來源並確定發送這些數據包的原因。
所有機器都是使用 VMware 虛擬化的,預設情況下,機器一直使用 Intel E1000 模擬 NIC。我們的網路管理員已將其更改為 VMXNET3 驅動程序以嘗試糾正問題,我們只需要等待,看看問題是否仍然存在,因為它是一個間歇性問題。
還有其他可能導致此問題的原因嗎?這不是我們遇到類似問題的第一個服務。
我們的 apache 主機執行 Ubuntu 11.10,核心版本為 3.0.0-17-server。我們在執行核心 2.6.18-308.16.1.el5 的 RHEL5 (5.8) 上也遇到過這個問題,這台機器也有 E1000 NIC。
注意:我不是網路管理員,而是負責這些系統的軟體架構師和分析程序員。
已發現問題是 ASA 在一段時間後關閉持久連接,當它關閉連接時,它還被配置為
RST
在再次進行呼叫時不發送消息。為了理解為什麼這會導致問題,我可以在這裡進行說明。
- Apache 創建成功的第一個連接。
- 在超過 ASA 重置時間的延遲後,ASA 會關閉連接。
- 發出請求,Apache 嘗試發送它認為打開的連接並在之後超時
TimeOut
- 預設 300 秒- Apache 向客戶端發送錯誤
如果仍有許多池連接處於打開狀態,則此處的問題會被放大。例如,如果 Apache 以 5 個池連接開始,並且在上述關閉一個連接之後,它仍然會在客戶端獲得成功請求之前再顯示 4 次此行為。
有幾種方法可以克服這一點。
- 允許 ASA 向其
RST
信任的客戶端發送消息。- 將配置設置
mod_proxy:ProxyPass - keepalive
為On
- 將配置設置為
mod_proxy:ProxyPass - ttl
低於防火牆重置時間。不要嘗試配置太低
mod_proxy:ProxyPass - timeout
,mod_proxy:ProxyPass - connectiontimeout
就好像您的 tomcat 實例中存在任何長時間執行的操作,例如任何 Web 服務或 ReST 端點,那麼如果它們花費的時間超過此時間,它們可能會開始失敗。我們的解決方案是同時執行前兩個選項。