netfilter 如何跟踪 FTP 的帶外數據連接,使其處於與控制連接相關的狀態?
RELATED — 請求新連接但屬於現有連接的數據包。例如,FTP 使用埠 21 建立連接,但數據在不同的埠(通常是埠 20)上傳輸。
聲明
netfilter
連接跟踪機制能夠將ftp
的帶外數據連接流量標記為RELATED
與 的控制連接處於狀態ftp
。我有以下問題。1)當數據連接設置為非預設埠時,它可以進行類似的跟踪操作嗎?
- 如果是,是否通過 FTP 消息找出數據連接元組 (dst_ip, dst_prt, src_ip, src_prt) ?我知道這太不切實際了。那麼如何
netfliter
真正做到這一點呢?
它是否通過 FTP 消息找出數據連接元組 (dst_ip, dst_prt, src_ip, src_prt) ?我知道這太不切實際了。
是的,這正是它的作用。為什麼你認為它太不切實際?
您可以在這裡自己查看程式碼: https ://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/net/netfilter/nf_conntrack_ftp.c
編輯:好的,在你後來的評論之後,我想我現在明白你的意思了。
核心只需要分析每個 TCP 連接的前幾個數據包的開頭,看它是否看起來像一個 FTP 控制連接,並且只標記實際的 FTP 控制連接以供進一步分析。只有看起來像 FTP 的連接才會被監視數據連接元組。
但幾年前,事實證明這種全自動跟踪可能會被濫用於惡意目的。因此,對於現代核心,您現在需要為需要它們的協議顯式設置 iptables 連接跟踪幫助程序規則,這意味著如果您為 FTP 連接使用非預設目標埠,您將需要一個自定義規則。但是現在您可以完全控制哪些介面、埠和連接目的地/方向將獲得跟踪幫助程序,哪些不會。
正常 FTP 的連接跟踪幫助程序規則應如下所示:
iptables -t raw -A PREROUTING -p tcp --dport 21 -j CT --helper ftp
如果您的防火牆只接受到特定入站埠的連接,您可能還需要在 INPUT 和/或 FORWARD 鏈中使用這樣的規則來接受入站活動 FTP 連接:
iptables -A FORWARD -m conntrack --ctstate RELATED -m helper --helper ftp -p tcp --dport 1024: -j ACCEPT
對於使用非預設埠的控制連接的數據連接,您需要稍微修改規則,例如在埠 2121 中接受屬於控制連接的數據連接:
iptables -A FORWARD -m conntrack --ctstate RELATED -m helper --helper ftp-2121 -p tcp --dport 1024: -j ACCEPT
順便說一句,有幾個可用的連接跟踪幫助模組:
ftp
對於 FTP 協議,顯然。irc
用於 Internet 中繼聊天協議。埠號會有所不同。netbios-ns
你應該不再需要它了,因為 WannaCry 蠕蟲證明 SMB 1.0 協議(用於舊的 NetBIOS 風格的 Windows 文件共享)有一個致命的缺陷。標準埠是 137/UDP。snmp
對於簡單網路管理協議,標準埠 161/UDP。RAS
以及Q.931
h.323 影片會議子協議(舊的 Microsoft NetMeeting 等)。埠分別為 1719/UDP 和 1720/TCP。sip
用於 SIP 網際網路電話協議。標準埠 5060,支持 TCP 和 UDP。sane
SANE掃描器軟體的網路協議,標準埠6566/TCP。pptp
對於 RFC2637 點對點隧道協議,VPN 的一種形式。tftp
如果您需要通過 NAT 傳遞 TFTP 連接。amanda
Amanda備份軟體的網路協議。