Iptables

netfilter 如何跟踪 FTP 的帶外數據連接,使其處於與控制連接相關的狀態?

  • May 21, 2020

此 URI 上的一篇文章https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security_guide/sect-security_guide-firewalls-iptables_and_connection_tracking

RELATED — 請求新連接但屬於現有連接的數據包。例如,FTP 使用埠 21 建立連接,但數據在不同的埠(通常是埠 20)上傳輸。

聲明netfilter連接跟踪機制能夠將ftp的帶外數據連接流量標記為RELATED與 的控制連接處於狀態ftp。我有以下問題。

1)當數據連接設置為非預設埠時,它可以進行類似的跟踪操作嗎?

  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.931h.323 影片會議子協議(舊的 Microsoft NetMeeting 等)。埠分別為 1719/UDP 和 1720/TCP。
  • sip用於 SIP 網際網路電話協議。標準埠 5060,支持 TCP 和 UDP。
  • saneSANE掃描器軟體的網路協議,標準埠6566/TCP。
  • pptp對於 RFC2637 點對點隧道協議,VPN 的一種形式。
  • tftp如果您需要通過 NAT 傳遞 TFTP 連接。
  • amandaAmanda備份軟體的網路協議。

引用自:https://unix.stackexchange.com/questions/587965