conntrack 條目詳細資訊
我正在閱讀有關連接跟踪的Iptables 文件,但我無法確定以下部分,由我強調:
tcp 6 117 SYN_SENT src=192.168.1.6 dst=192.168.1.9 sport=32775 \ dport=22 [UNREPLIED] src=192.168.1.9 dst=192.168.1.6 sport=22 \ dport=32775 [ASSURED] use=2
此範例包含 conntrack 模組維護的所有資訊,以了解特定連接處於哪個狀態。首先,我們有一個協議,在本例中是 tcp。接下來,普通十進制編碼中的相同值。
$$ … $$ 最後,我們看到了我們對返回數據包的期望。該資訊詳細說明了源 IP 地址和目標 IP 地址(它們都是相反的,因為數據包將被定向回我們)。連接的源埠和目標埠也是如此
我不明白為什麼跟踪預期的 IP 和埠是有用的,如果它們只是倒置的話。當數據包到達時,只需使用一對 IP 和埠即可完成查找,如果未找到,則可以使用相同的欄位但相反。保留這些資訊是某種優化還是我錯過了一些案例,在這些案例中這是實現某些目標的唯一方法?
謝謝
跟踪目前和預期狀態很有用。當預期的 IP 和埠不只是反向反轉時,它最有用。例如,當使用 NAT 時,或者當反向不完全相同時,就會發生這種情況。它還將在相關時驗證狀態轉換是否得到遵守(例如:對於 TCP)一些範例:
在從 192.0.2.2 簡單 ping 之後,回复應該有一個 ICMP 類型 0(回顯回复)而不是初始類型 8(回應要求):
icmp 1 12 src=192.0.2.2 dst=8.8.8.8 type=8 code=0 id=26387 src=8.8.8.8 dst=192.0.2.2 type=0 code=0 id=26387 mark=0 use=1
從具有公共 IP 198.51.100.32 的 NAT 路由器後面的主機 10.1.2.3 到 FTP 伺服器 203.0.113.47的主動(而不是被動)FTP 會話(用 跟踪
conntrack -E
)。請注意,在回復中,路由器的 ip 是預期的,而不是 NATed(並且不可通過 Internet 路由)的 ftp 客戶端的 ip。期望的創建被 SNAT(或 MASQUERADE)規則改變:[NEW] tcp 6 120 SYN_SENT src=10.1.2.3 dst=203.0.113.47 sport=47800 dport=21 [UNREPLIED] src=203.0.113.47 dst=198.51.100.32 sport=21 dport=47800 helper=ftp [UPDATE] tcp 6 60 SYN_RECV src=10.1.2.3 dst=203.0.113.47 sport=47800 dport=21 src=203.0.113.47 dst=198.51.100.32 sport=21 dport=47800 helper=ftp [UPDATE] tcp 6 432000 ESTABLISHED src=10.1.2.3 dst=203.0.113.47 sport=47800 dport=21 src=203.0.113.47 dst=198.51.100.32 sport=21 dport=47800 [ASSURED] helper=ftp
在
ls
期望表中的 ftp 助手添加了從客戶端的 ftp PORT 命令計算的目的地的期望條目以及先前的 conntrack 條目(帶有 nat)之後,以允許流通過(例如,使用防火牆中的相關規則) 在進一步的助手處理之前。這可以在那裡讀取(但是一旦匹配連接就會消失,這意味著可以看到連接,因此除非防火牆延遲它,否則它實際上無法看到):# cat /proc/net/nf_conntrack_expect 295 l3proto = 2 proto=6 src=203.0.113.47 dst=198.51.100.32 sport=0 dport=41603 ftp
並由助手進一步更改(此處為 DNATed,仍使用先前的 conntrack 條目尋求幫助)以最終獲得這個新的跟踪連接:
[NEW] tcp 6 120 SYN_SENT src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 [UNREPLIED] src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [UPDATE] tcp 6 60 SYN_RECV src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [UPDATE] tcp 6 432000 ESTABLISHED src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [ASSURED] [UPDATE] tcp 6 120 FIN_WAIT src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [ASSURED] [UPDATE] tcp 6 60 CLOSE_WAIT src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [ASSURED] [UPDATE] tcp 6 30 LAST_ACK src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [ASSURED] [UPDATE] tcp 6 120 TIME_WAIT src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [ASSURED] [DESTROY] tcp 6 src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [ASSURED]
這些期望條目都用於跟踪流(conntrack),例如,允許通過丟棄未跟踪的內容輕鬆擁有狀態防火牆(如果沒有進行初始 icmp echo ping,則不要讓 icmp echo 回复通過之前使用相同的 id)並記住如何轉換 IP/埠(如果正在使用 nat)。