Networking
iptables 可以用於監控系統範圍內的 TCP 超時/重置嗎?
我正在嘗試確定應用程序與數據庫的連接是在應用程序內部還是由於網路事件。這似乎是 netfilter 在系統範圍內具有可見性的東西。為此,我想使用
-j LOG
withiptables
記錄系統上發生的所有 TCP 重置和超時。不過,我不知道要使用什麼來匹配標準。我覺得答案
conntrack
在某些時候會涉及模組,但我幾乎找不到任何東西。數據庫伺服器是 MS-SQL,J2EE 應用程序在 RHEL 5.10 VM 上執行。後者是我嘗試登錄的機器。編輯:
我發現這篇部落格文章展示瞭如何
--tcp-flags
使用iptables
. 因此,突出的問題是弄清楚如何記錄沒有明確 RST 但由於連接被視為陳舊/超時而關閉的連接。
在 IRC 上詢問了一下之後,似乎普遍的期望是,如果一個節點感覺連接因任何原因異常終止(包括達到內部派生的超時),它應該在關閉其上的連接之前向遠端節點發送一個 RST 數據包邊。因此,這兩個問題似乎都通過相同的解決方案得到了回答:通過 .log TCP 重置
--tcp-flags
。在我的 RHEL 5.10 系統上執行此操作的基本命令(也應該在基於 Debian 的發行版上工作)是:
root@xxxxxxvlt01 ~ $ iptables -A OUTPUT -m tcp -p tcp --tcp-flags RST RST -j LOG root@xxxxxxvlt01 ~ $ iptables -A OUTPUT -m tcp -p tcp --tcp-flags FIN FIN -j LOG
如果沒有匹配標準,我可能最終會匹配相當多的數據包,因此我創建了一個專門針對我所追求的系統的新規則:
root@xxxxxxvlt01 ~ $ iptables -A OUTPUT -d xxx.xxx.64.248/32 -m tcp -p tcp --tcp-flags RST RST -j LOG root@xxxxxxvlt01 ~ $ iptables -A OUTPUT -d xxx.xxx.64.248/32 -m tcp -p tcp --tcp-flags FIN FIN -j LOG root@xxxxxxvlt01 ~ $ iptables -nvL Chain INPUT (policy ACCEPT 767K packets, 108M bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 448K packets, 68M bytes) pkts bytes target prot opt in out source destination 0 0 LOG tcp -- * * 0.0.0.0/0 xxx.xxx.64.248 tcp flags:0x04/0x04 LOG flags 0 level 4 0 0 LOG tcp -- * * 0.0.0.0/0 xxx.xxx.64.248 tcp flags:0x01/0x01 LOG flags 0 level 4 root@xxxxxxvlt01 ~ $
這要好得多。由於我對 RST-on-timeout 內容的確認來自 IRC 上的某個人,因此我將保持開放/未答复,以防有人證明我錯了。一周後我會接受我自己的答案,除非我有矛盾。