Linux协议栈-netfilter(4)-期望连接

传统的conntrack和NAT处理只对IP层和传输层头部进行转换处理,但是一些应用层协议,在协议数据报文中包含了地址信息。为了使得这些应用也能透明地完成NAT转换,NAT使用一种称作ALG的技术,它能对这些应用程序在通信时所包含的地址信息也进行相应的NAT转换。

例如:对于FTP协议的PORT/PASV命令,在数据包载荷中需要包含地址信息,并且数据包如果需要做NAT,那应用层数据部分的地址也需要做NAT转换。实现这种转换,需要在普通的conntrack条目基础上增加一个expect conntrack(期望连接)来记录这个连接上的额外信息。

本文将以tftp和ftp协议举例期望连接。

1. 以tftp举例期望连接

tftp是基于UDP的应用层协议,用于简单的文件传输。

1.1 实验拓扑

测试拓扑如下,在路由器R1上通过tftp请求PC1上的文件“ethreg.sh”,R1和PC1之间有一个路由器R2让R1位于局域网中,PC1位于公网中。在R1上输入以下命令:

tftp –gr ethreg.sh 192.168.10.100

在PC1上抓包结果如下:


第一个数据包为read request请求,数据包方向为R1->PC1(192.168.1.1:50173-> 192.168.10.100:69),其中69中tftp端口号,数据包传输过程经过了SNAT转换。

数据部分共经过两次传输完成,发送数据方向为PC1->R1(192.168.10.100:3873-> 192.168.1.1:50173),数据包在传输过程经过了DNAT转换。

可见传输数据时,第一个包是从Server端即PC1发出的,而PC1处在NAT外面,而通常情况下,这样的数据包是无法通过NAT达到局域网的,因为路由器R2上并没有记录这个连接做NAT的连接条目,NAT的作用之一就是隐藏局域网中的主机。

下面来看一下tftp协议如何依靠期望连接实现数据包的NAT转换的。

1.2 tftp协议的期望连接实现

在编译内核时打开CONFIG_NF_CONNTRACK_TFTP宏,使其以模块形式编译到内核,来支持tftp建立期望连接。该模块的init函数为nf_conntrack_tftp_init(),它初始化了一个conntrack helper方法,并将其注册到helper extension的链表中去(conntrack extensions见前面的博文)。

static struct nf_conntrack_helper tftp[MAX_PORTS][2]__read_mostly;

tftp conntrack模块的初始化函数:

static int __init nf_conntrack_tftp_init(void)
{
	int i, j, ret;
	char *tmpname;

	if (ports_c == 0)
		ports[ports_c++] = TFTP_PORT;

	for (i = 0; i < ports_c; i++) {
		memset(&tftp[i], 0, sizeof(tftp[i]));

		tftp[i][0].tuple.src.l3num = AF_INET;
		tftp[i][1].tuple.src.l3num = AF_INET6;
		for (j = 0; j < 2; j++) {
			tftp[i][j].tuple.dst.protonum = IPPROTO_UDP;
			tftp[i][j].tuple.src.u.udp.port = htons(ports[i]);
			tftp[i][j].expect_policy = &tftp_exp_policy;
			tftp[i][j].me = THIS_MODULE;
			tftp[i][j].help = tftp_help;

			tmpname = &tftp_names[i][j][0];
			if (ports[i] == TFTP_PORT)
				sprintf(tmpname, "tftp");
			else
				sprintf(tmpname, "tftp-%u", i);
			tftp[i][
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2023年的"Ja-Netfilter"是一个基于网络过滤技术的创新想法。它旨在提供更高效、更智能的网络过滤解决方案,帮助用户更好地管理和保护他们的网络安全。 "Ja-Netfilter"将利用最新的人工智能和机器学习技术,通过深度学习算法来分析和识别网络流量中的恶意行为和威胁。它将建立起一种自适应的过滤系统,能够根据实时数据和情境自动地调整过滤规则,以应对不断变化的网络攻击和威胁。 与传统的网络过滤技术相比,"Ja-Netfilter"具有明显的优势。首先,它能够从大量的网络数据中快速准确地分析出潜在的威胁,大大提高了网络防御的效率。其次,通过使用机器学习算法,"Ja-Netfilter"能够主动学习和适应新的网络攻击手段,及时更新过滤规则,从而提供更好的保护。此外,"Ja-Netfilter"还支持用户自定义的过滤规则,使用户能够根据自己的需求对网络流量进行精细化的控制。 "Ja-Netfilter"除了为个人用户提供网络安全保护外,也可以应用于企业和组织的网络安全管理中。它可以帮助企业对内部和外部网络流量进行监控和过滤,实时检测和阻止潜在的威胁,从而保护企业机密和客户数据的安全。 总而言之,"Ja-Netfilter"是一项创新的网络过滤技术,将利用人工智能和机器学习技术提供更高效、更智能的网络安全保护。它的出现将有助于提升网络安全防御能力,为用户提供更安全、更稳定的网络环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值