RELATED — 请求新连接但属于现有连接一部分的数据包。例如,FTP 使用端口 21 建立连接,但数据在不同的端口(通常是端口 20)上传输。
指出netfilter
连接跟踪机制能够将ftp
的带外数据连接流量标记为RELATED
与ftp
的控制连接处于状态。我有以下问题。
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.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备份软件的网络协议。