netfilter 如何能够跟踪 FTP 的带外数据连接,使其处于与控制连接相关的状态?

netfilter 如何能够跟踪 FTP 的带外数据连接,使其处于与控制连接相关的状态?

此 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的带外数据连接流量标记为RELATEDftp的控制连接处于状态。我有以下问题。

1)当使用非默认端口建立数据连接时,是否可以执行类似的跟踪操作?

2)如果是,它是否通过FTP消息来找出数据连接元组(dst_ip,dst_prt,src_ip,src_prt)?我知道这太不切实际而难以实施。那么如何netfliter真正做到这一点呢?

答案1

它是否通过 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用于互联网中继聊天协议。端口号会有所不同。
  • 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。
  • pptpRFC2637 点对点隧道协议,VPN 的一种形式。
  • tftp如果您需要通过 NAT 传递 TFTP 连接。
  • amanda用于Amanda备份软件的网络协议。

相关内容